Special use casesHandling non-DFSG clean upstream sourcesIf you have to handle non-DFSG clean upstream sources, you can use a
different branch which you have to create once:
&gitcmd; branch dfsg_clean upstream
This creates the dfsg_clean branch from the tip of a
branch called upstream. Then, when importing a new
upstream version, you import the new version on the
(by default named
upstream) as usual and just don't merge to the
debian-branch (by default named
master):
&gbp-import-orig; --no-merge /path/to/nondfsg-clean-package_10.4.orig.tar.gz
&gitcmd; 10.4
After the import, you can switch to the dfsg_clean
branch and get the newly imported changes from the upstream branch:
&gitcmd; dfsg_clean
&gitcmd; . upstream
Now make this checkout dfsg clean (preferably by a cleanup script), commit
your changes and merge to your :
cleanup-script.sh
&gitcmd; commit -a -m "Make source dfsg clean"
&gitcmd; tag 10.4.dfsg
&gitcmd; checkout master
&gitcmd; pull .dfsg_cleanImporting NMUs
First, create a branch that holds the NMUs from the tip of your
(default is master) once:
&gitcmd; nmumaster
To import an NMU, change into the git repository and use &gbp-import-dsc;:
&gitcmd; checkout master
&gbp-import-dsc; =nmu/path/to/package_1.0-1nmu0.dsc
This will import the NMU onto the branched named nmu
instead of the default . This method can also
be used to import "old" releases into the &git; repository when migrating
to &git; from another VCS.
Building with &cowbuilder;
&cowbuilder; is nice tool to build Debian packages in a defined
environment. It makes sure all build-dependencies are specified
correctly by building the package in a clean chroot. As its
cousin &pbuilder; it can be extended via hooks to (e.g. run
autopkg tests) but doesn't need a tarball unpacked but uses copy
on write tree to speed up the build.
Since &cowbuilder; uses different command line arguments than
&debuild; and &dpkg-buildpackage;, we can't simply pass the
options to run it on the command line. To simplifiy the
integration we use a separate helper named &git-pbuilder;.
&gbp; has it's own command line option for this:
&gbp-buildpackage;
This will set the build command to run &git-pbuilder; (which
invokes &cowbuilder; by default) and the clean command
to /bin/true. It also activates the parsing
of several &git-pbuilder; related options
like , and
.
We can make &git-pbuilder; usage the default by adding it to
~/.gbp.conf:
cat <<EOF > ~/.gbp.conf
[DEFAULT]
# We invoke cowbuilder via git-pbuilder. Arguments passed to &gbp-buildpackage;
# will be passed to dpkg-buildpackage in the chroot
pbuilder = True
EOF
git-pbuilder defaults to building a package for the
sid distribution. If you want to build for another
distribution, pass this in the option:
&gbp-buildpackage; --git-pbuilder --git-dist=jessie
If you want to use debuild again (without
modifying ~/.gbp.conf), you can use:
&gbp-buildpackage; --git-no-pbuilder
In order for all of the above to work you have to create a
base chroot first using &git-pbuilder;
git-pbuilder create
This can later be updated using
git-pbuilder update
Working on random packages
Whenever you need to work on an arbitrary &debian; package, you can check it
right into &git; with one command:
&gbp-import-dsc --download package
cd package
&gitcmd; branch debian
This uses apt-get to download the source package,
puts the orig tarball on the and the
&debian; changes on the (by default
master). The second command
creates a branch called debian. Now you can easily
modify the package, revert changes you made, create other branches for
testing, see what changes you made, etc. When finished, just do
&gitcmd; commit -a
&gitcmd; diff debian --
to get a nice patch that can be submitted to the &debian; BTS. You can also
fetch the source package from a URL:
&gbp-import-dsc --download http://mentors.debian.net/debian/pool/main/i/ipsec-tools/ipsec-tools_0.7.3-9.dsc
The import works incrementally; you can import new versions on top of
already imported ones for e.g. easy review of changes.