Git sources for Debian
----------------------

The git Debian package sources are available through git, and
through 'apt-get source git'.  Getting the sources through git
should be preferred:

 # apt-get install git  # if not yet done

 $ git clone https://repo.or.cz/r/git/debian.git/ git
 $ cd git

After cloning the repository, you have checked out the debian-sid
branch, ready to be used by dpkg-buildpackage, e.g.

 $ dpkg-buildpackage -i -rfakeroot -uc -us

If you want to make changes in the ./debian/ subdirectory, this is the
correct branch to work on.  After making changes, document them in
debian/changelog, and commit through 'git add' and 'git commit', or 'git
commit -a', or similar.  If you think the changes should be incorporated
into the standard Debian package, create the patch[es] through 'git
format-patch', and send them to the Debian Bug Tracking System, e.g.

 $ vi debian/rules
 $ debchange -pi
 $ git commit -a
 $ git format-patch HEAD^


If you want to make changes to the upstream git sources, first checkout
the release+patches branch

 $ git checkout -b release+patches origin/release+patches

The release+patches branch holds patches on top of the current release
version that is packaged for Debian/unstable. The current release
version is available in the release branch.  If you are interested, you
can checkout this branch too

 $ git checkout -b release origin/release

When releasing a new Debian package based on a new upstream release, the
release branch will be fastforwarded, and the release+patches branch is
rewound and rebased on the new HEAD of the release branch.  This is done
by

 $ git checkout release
 $ git merge v1.6.5
 $ git checkout release+patches
 $ git rebase release

You generally don't need to do that, but beware that the release+patches
branch is rewound occasionally.

After checking out the release+patches branch, make the desired changes
to the upstream sources, and commit them.  To integrate the changes into
the Debian package, extract these changes, and change to the debian-sid
branch (Note: the file extension for the patches is '.diff', use 'git
config --add format.suffix .diff' to make that the default)

 $ git format-patch release..release+patches
 $ git checkout debian-sid

Now move the extracted patches into the debian/patches/ directory, add
their filenames to debian/patches/series, add a meaningful message to
debian/changelog, and commit the changes to the debian-sid branch:

 $ ls ????-*.diff >> debian/patches/series
 $ mv ????-*.diff debian/patches/
 $ git add debian/patches
 $ debchange -pi
 $ git add debian/changelog
 $ git commit

Again, if you think the changes should be incorporated into the standard
Debian package, create the patch[es] from the debian-sid branch through
'git format-patch', send them to the Debian Bug Tracking System.

There's a mailing list to coordinate work on the git-core packages, if
you're interested in helping please subscribe to the
<debian-package-git> mailing list by sending an email to
<debian-package-git-subscribe@list.smarden.org>.

 -- Gerrit Pape <pape@smarden.org>  Sat, 10 Apr 2010 12:28:52 +0000
