I'm going to talk for about 35 minutess and then I'll take questions.
+Firstly, a bit of framing.
+
When we work on Debian we take on different roles. The biggest
difference is between the maintainer (or maintainers) of a package,
working on their own package, and everyone else.
I'm going to start by presenting dgit from the point of view of
-everyone else: NMUers, sponsorship, bug squashers, downstreams,
-users, teams doing cross-archive work
-like transitions and reproducible builds, and so on. Maintainers,
-please be patient - I'll get to you later
+everyone else: NMUers, sponsorship, bug squashers, downstream distros
+and users, teams doing cross-archive work like transitions and
+reproducible builds, and so on. Maintainers, please be patient - I'll
+get to you a bit later in the talk.
==== manpage slide
If you don't want to, or can't, upload to Debian, but do want so share
your work with other people, you can git push your dgit
-branch anywhere suitable, so they can fetch it. So, for example, you
+branch anywhere suitable, so other can fetch it. So, for example, you
could share your branch with your sponsor, who could then approve it
by running dgit push. dgit's branches are ordinary git branches for
this purpose.
A downstream such as a derivative or partial derivative of Debian can
-use the dgit branches directly as the upstream for a git-based setup,
+use the dgit branches directly as the upstreams for a git-based setup,
and work entirley without source packages.
==== data flow slide
needs the .orig tarballs for your source package. If you are not
doing a new upstream version, dgit fetch will get the relevant .origs
for you. If you /are/ doing a new upstream version, then presumably
-you have obtained them as part of preparing your package, or you can
-build them easily.
+you have obtained the origs as part of preparing your package, or you
+can build them easily.
==== NMU linear history slide
If you are doing a straightforward NMU you should produce a
well-structured linear sequence of commits, as you would for any other
-git upstream. Not only does this mean that if the maintainer is using
-dgit, they can hopefully easily include your changes; it also means
-that if they _aren't_ using dgit, at least you have published a
-history which is suitable for rebasing onto theirs, or whatever.
+git upstream, based on the dgit suite branch. Not only does this mean
+that if the maintainer is using dgit, they can hopefully easily
+include your changes; it also means that if they _aren't_ using dgit,
+at least you have published a history which is suitable for rebasing
+onto theirs, or whatever it is they might want to do with it.
If the source package is `3.0 (quilt)', you shouldn't touch
debian/patches; dgit will take care of that for you. This is the
other reason why you should provide a tidy linear patch series: if the
maintainer likes quilt and is not using dgit, your changes will be
-automatically presented to them in a fairly plausible format like they
-should expect from any other NMU.
+automatically presented to them in a fairly plausible format - a
+series of extra patches - like they should expect from any other NMU.
An ordinary NMUer should not normally update a patch in the quilt
stack directly. Ie, an NMUer shouldn't squash their changes into an
existing patch. This is because while it's easy for the maintainer to
squash it themselves, if they want, it's a little harder for the
-maintainer to disentangle a squashed patch. This can also result in
-people having to read interdiffs, which are notoriously confusing.
+maintainer to disentangle a squashed patch. Working directly on
+patches can also result in people having to read interdiffs, which are
+notoriously confusing.
==== NMU linear history on top of basic dgit history
packages in the archive.
If you dgit clone a package and it has an X-Vcs-Git header, dgit will
-set up a remote for it, so you can fetch the history and use it if you
+set up a remote for that, so you can fetch the maintainer's history and use it if you
like. So in that sense dgit clone encompasses debcheckout.
But, in the general case, the X-Vcs-Git tree may not be immediately
-useable to someone not familiar with the package.
+useable to someone not familiar with the package, so dgit doesn't use
+it for the dgit suite branch.
-The maintainer's repo might contain only a debian/ directory, or be a
-quilty tree without patches applied. And the tag and suite naming
-conventions can vary too. So while the maintainer's history can be
-useful if you want to do archeaology, it's not in general suitable for
-use by dgit.
+For example, the maintainer's repo might contain only a debian/
+directory, or be a quilty tree without patches applied. And the tag
+and suite naming conventions can vary too. So while the maintainer's
+history can be useful if you want to do archeaology, it's not in
+general suitable for use by dgit.
There is also the problem that the maintainer's nominated git server
might be anywhere, so it might be down, or gone away, or compromised.
So, if the maintainer is not using dgit, dgit has to synthesise a git
history. The history you see in dgit will then have a very basic
branch and commit structure, rather than representing the package's
-actual history.
+actual history, something like you see here.
Which brings me onto the other side of this talk: dgit for
as a maintainer to use dgit push to do your uploads. They will then
be able to see, and directly work with, your own history.
-In general, the point of using a dvcs like git is to publish your
+More generally, the point of using a dvcs like git is to publish your
work. The existing ways of publishing git histories for Debian
packagess aren't uniformly useable for users: they require the user to
understand the maintainer's git working practices.
But it's in your own selfish interest to upload with dgit, too:
-If you use dgit, you will be able to directly merge NMUs, patches
-proposed via pull-request emails, and so on: Because, in this case,
-the dgit-using contributor will have based their work on your own
-history. Whereas, if you don't, dgit-using contributors will be
-working on a stub history, and may dgit push commits based on that
-stub. You can dgit fetch it even if you're not using dgit for your
-uploads, but when you do at the very least you'll have to rebase the
-NMUer's work.
+If you use dgit, you will be able to directly merge NMUs, branches
+proposed via pull-request emails, and other similar contributions:
+Because, in this case, the dgit-using contributor will have based
+their work on your own history. Whereas, if you don't use dgit,
+dgit-using contributors will be working on a stub history, and may
+dgit push commits based on that stub. You can dgit fetch that work
+even if you're not using dgit for your own uploads, but if you're not
+using dgit push yourself, at the very least you'll have to rebase the
+NMUers' and other contributors' work onto your own history.
Another advantage of using dgit for your maintainer uploads is that it
will put your own history on browse.dgit.debian.org, rather than
intended to complement them. So (unlike git-dpm) dgit does not define
a git history structure.
-Nor does dgit define a branch structure distinguishing upstream or
-downstream branches, pristine tar branches, etc.
+Nor, unlike git-buildpackage, does dgit define or suggest a branch
+structure for naming upstream or downstream branches, pristine tar
+branches, etc.
dgit doesn't require a particular source format; it couldn't, since it
needs to work with any package.
The most important requirement is that your git tree is identical to
the unpacked source package. (Technically, in the case of a `3.0
(quilt)' package, it is what is sometimes called a `patches-applied
-packaging branch without .pc directory', which means that the upstream
+packaging branch without .pc directory'. Patches-applied means that the upstream
source files in the main package tree correspond to the actual source
code that will be used when the package is built, rather than to the
upstream versions.)
For all native packages, and for users of git-dpm and raw git, this is
already the interchange format. These maintainers can start using
-dgit right away. Please do!
+dgit right away for all their maintainer uploads. Please do!
For those using git-buildpackage with `3.0 (quilt)', things are a bit
more complicated. I'm told that gbp pq can be used to generate a
package history.
+==== dgit requirements slide
+
But the most obvious challenge for a maintainer with an existing git
branch, but trying to use dgit, is dgit's insistence that the source
package and git tree are the same.
-However, some source packages contain files not in the maintainers'
-git branches, and which are needed to build: most commonly, autotools
-output. Such git branches are not useable with dgit.
+Sadly, quite a few source packages contain files not in the
+maintainers' git branches, but which are needed to build: most
+commonly, autotools output. Such git branches are not useable with
+dgit.
But nowadays most people recommend that the package build should
always rerun autotools. If you do that, then neither your git tree
well.
Alternatively, you can commit the autotools output to git. Merge
-conflicts etc. are easily resolved by rerunning autotools.
+conflicts, which do occur occasionally if you do this, are easily
+resolved by rerunning autotools.
-And a second way this can bite is that it is normally best to use one
-of dgit's build operations to build for upload. This is mainly
-because most other tools remove .gitignore by default. dgit requires
-that the source package and git tree are the same, so if your git tree
-has .gitignore in it, your source package should too.
+And a second way dgit's rule can bite is that it is normally best to
+use one of dgit's build operations to build for upload. This is
+mainly because most other tools remove .gitignore by default. dgit
+requires that the source package and git tree are the same, so if your
+git tree has .gitignore in it, your source package should too.
Finally, there is one compelling advantage of dgit's git-based