[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

debian-science git repository



Hi all,

Since the debian-science git repository is now up and running, it's
time to populate it with packages. I uploaded the source packages I
maintain already (these are meshlab, imview and imview-doc, I'm also
thinking of moving rasmol from collab-maint).

There are certainly more than one way to use git for maintaining
packages, but I'll outline the way I do it, for the benefit of people
who may be just starting with git:

Upstream sources are kept in the 'upstream' branch and updated from a
tarball every time there is a new release. It's also possible to set
up a branch which is periodically synchronized from the upstream VCS
via a cron job calling git-svn or similar, if one wants to track
development versions.

When upstream sources are stored in git, bit-identical copies of the
upstream tarballs can also be easily stored in version control with
Joey Hess's pristine-tar program. For one of my packages, storing a
2.5 MB source tarball requires only 40 kB of extra space in the form
of a delta file, stored in the 'pristine-tar' branch. By doing this,
everything needed to build and upload a source package can be
downloaded with a single git clone command.

When developing patches which touch the upstream sources, create a new
branch for each patch, branching from 'upstream'. This way the
development history for each feature branch is clean and the patch can
be easily submitted to the upstream author if necessary. These feature
branches, if not submitted to upstream, should be merged with the
upstream branch every time a release is made, to resolve possible
conflicts.

The Debian files are kept in the 'debian' branch, which should branch
(usually by merging) from the latest upstream. In the case one has
feature branches as described above, this branch also works as an
integration branch. All the feature branches are merged to this branch
and conflicts between them resolved. The package is built normally
using debuild -i\.git or just the debian/rules binary target.

Additionally, publishing the repository in alioth (git.debian.org)
requires some steps which are not completely obvious. Here's  a short
guide:

First, in alioth:
# create a bare git repository
cd /git/debian-science/
mkdir project.git ; cd project.git
git --bare init

# activate the default post-update hook to allow http checkouts
chmod a+x hooks/post-update

# The non-obvious part: If your repo does not have a 'master' branch
# (like in the example above), the HEAD ref in the repository needs
# to be set to point to something that exists in the repo you are about
# to push. Otherwise checkouts from the clone of this repo will fail.
# In our case this branch should be 'debian'
echo 'ref: refs/heads/debian' > HEAD


Then locally:
# tell your local git repo about the remote
git remote add alioth ssh://user@git.debian.org/git/debian-science/project.git
# hack away
[...]
# push to alioth, when you want to publish your repository
git push --all alioth
git push --tags alioth

And that's it.

Teemu


Reply to: