Packaging using gbp
git-buildpackage is a utility that supports maintaining a Debian/Ubuntu package in
git. It takes care of a lot of the details and ensures consistency and correctness.
A gbp-compatible repository has two main branches:
The upstream branch is used to store the content of successive upstream ('orig') tarballs, and each upstream release is tagged.
The master branch is forked from upstream and adds the
debian/ directory. It has tags for each package release.
When a new upstream version is integrated, the upstream branch is merged into master.
There's usually also a pristine-tar branch that's used in conjunction with upstream to recreate exact copies of the original upstream tarballs.
Adding a new patch
For a quilt-format package, differences from the upstream release are stored as a series of patches in
debian/patches/. gbp can import these patches into a temporary branch called a patch-queue which is never pushed to the shared (remote) repository. The developer then makes new commit(s) on this branch, and uses gbp to export the branch back to
debian/patches/. The updated
debian/ directory is then committed to the master branch.
The exact steps are as follows:
git checkout master
- Start from a known state
gbp pq import
- Turn the patches into commits on a temporary branch and switch to it. You are now on patch-queue/master
- HACK, COMMIT, HACK, COMMIT, HACK, COMMIT ...
- Your commits will become new patches
git checkout master
- Switch away from the patch-queue branch
- Check for extraneous files and uncommitted changes
git clean -dxf
- Remove extraneous files
gbp pq export
- Review the added/changed patches
git add debian
- Stage everything under
git commit -m "Add patch(es): ..."
- List the patches in the commit message
gbp dch -R -c
- Update the changelog and open it in an editor for final adjustment. You can usually just save and quit.
gbp buildpackage --git-pristine-tar -nc -S
- Build a source package