Provided by: git-dpm_0.10.0-1_all bug

NAME

       git-dpm - Debian packages in git manager

SYNOPSIS

       git-dpm --help

       git-dpm [ options ] command [ per-command-options and -arguments ]

DESCRIPTION

       Git-dpm is a tool to handle a Debian source package in a git repository.

       Each  project contains three branches, a Debian branch (master/whatever), a patched branch
       (patched/patched-whatever) and an upstream branch (upstream/upstream-whatever) and git-dpm
       helps  you  store  the  information  in there so you have your changes exportable as quilt
       series.

       Git-dpm will guess the other two branches based on the branch it sees.  (Most commands act
       based on the current HEAD, i.e. what branch you have currently checked out, though some as
       e.g. status allows an optional argument instead).  So for example, if you  are  in  branch
       master,  git-dpm assumes the corresponding upstream branch is called upstream.  If you are
       in branch upstream-something, it assumes the Debian branch is called something.

       Note that most commands may switch to another branch automatically, partly because  it  is
       easier  to  implement  that  way  and  hopefully  so  one does not need to switch branches
       manually so often.

SHORT EXPLANATION OF THE BRANCHES

       the upstream branch (upstream|upstream-whatever)
              This branch contains the upstream sources.  Its contents need to be equal enough to
              the contents in your upstream tarball.

       the patched branch (patched|patched-whatever)
              This  branch  contains  your  patches to the upstream source.  Every commit will be
              stored as a single patch in the resulting package.

              Most of the time it will not exist as a branch known to git, but only as some point
              in  the  history  of  the Debian branch and possibly as tag for published versions.
              Git-dpm will create it when needed and remove the branch when no longer needed.

              To help git generate a linear patch series, this should ideal be a linear chain  of
              commits, whose description are helpful for other people.

              As this branch is regularly rebased, you should not publish it.

       the Debian branch (master|whatever)
              This is the primary branch.

              This branch contains the debian/ directory and has the patched branch merged in.

              Every  change  not  in debian/, .git* or deleting files must be done in the patched
              branch.

EXAMPLES

       Let's start with some examples:

       Checking out a project
              First get the master branch:
               git clone URL

              Then create upstream branch and see if the .orig.tar is ready:
               git-dpm prepare

              Create the patched branch and check it out:
               git-dpm checkout-patched

              Do some changes, apply some patches, commit them..
               ...
               git commit

              If your modification fixes a previous change (and that  is  not  the  last  commit,
              otherwise  you could have used --amend), you might want to squash those two commits
              into one, so use:
               git rebase -i upstream

              Then you want to get those changes into the Debian branch and the new  patch  files
              created  (which  you can do using git-dpm update-patches), but you most likely want
              to also document what you did in the changelog, so all in one step:
               git-dpm dch -- -i

              Perhaps change something in the Debian packaging:
               ...
               git commit -a

              Then push the whole thing back:
               git push

       Switching to a new upstream version
              Get a new .orig.tar file.  Either upgrade your upstream branch to the  contents  of
              that  file  and  call  git-dpm record-new-upstream ../new-stuff.orig.tar.gz or tell
              git-dpm to import and record it:
               git-dpm import-new-upstream --rebase ../new-stuff.orig.tar.gz

              This will rebase the patched branch to the new upstream branch,  perhaps  you  will
              need to resolve some conflicts:
               vim ...
               git add resolved files
               git rebase --continue

              After rebase is run (with some luck even in the first try):
               git-dpm dch -- -v newupstream-1 "new upstream version"

              You could have also done the last step in three by:
               git-dpm update-patches
               dch -- -v newupstream-1 "new upstream version"
               git commit --amend -a

              Do other debian/ changes:
               ...
               git commit -a

              Then push the whole thing back:
               git push

       Creating a new project
              Create  an  upstream  (or upstream-whatever) branch containing the contents of your
              orig.tar file:
               tar -xvf example_0.orig.tar.gz
               cd example-0
               git init
               git add .
               git commit -m "import example_0.orig.tar.gz"
               git checkout -b upstream-unstable

              You might want to use pristine tar to store your tar:
               pristine-tar commit ../example_0.orig.tar.gz upstream-unstable

              Then let git-dpm know what tarball your upstream branch belongs to:
               git-dpm init ../example_0.orig.tar.gz

              Note that since you were in upstream-unstable in this example, in the last  example
              git-dpm  assumed  you  want  your  Debian branch called unstable and not master, so
              after the command returned you are in the newly created unstable branch.

              Do the rest of the packaging:
               vim debian/control debian/rules
               dch --create --package example -v 0-1
               git add debian/control debian/rules debian/changelog
               git commit -m "initial packaging"

              Then add some patches:
               git-dpm checkout-patched
               vim ...
               git commit -a
               git-dpm dch "fix ... (Closes: num)"

              The git-dpm checkout-patched created a temporary branch  patched-unstable  (as  you
              were  in  a  branch  called unstable. If you had called it with HEAD being a branch
              master, it would have been patched) to which you added commits.  Then  the  git-dpm
              update-patches  implied  by git-dpm dch merged those changes into unstable, deleted
              the temporary branch and created new debian/patches/ files.

              Then build your package:
               git-dpm status &&
                dpkg-buildpackage -rfakeroot -us -uc -I".git*"

              Now take a look what happened, perhaps you want to add some files to .gitignore (in
              the  unstable  branch),  or remove some files from the unstable branch because your
              clean rule removes them.

              Continue the last few steps until the package is finished.  Then push your package:
               git-dpm tag
               git push --tags target unstable:unstable pristine-tar:pristine-tar

       Removing existing patches
              First get the master branch:
               git clone URL

              Create the patched branch and check it out:
               git-dpm checkout-patched

              Get  a  list  of  commits  since  the  last  upstream  release:   git   rebase   -i
              upstream-unstable

              This will open your default editor with a list of commits.  Edit the list to remove
              undesired commits.
               ...
               git commit

              Then you want to get those changes into the Debian branch and the old  patch  files
              deleted  (which  you can do using git-dpm update-patches), but you most likely want
              to also document what you did in the changelog, so all in one step:
               git-dpm dch -- -i

              Perhaps change something in the Debian packaging:
               ...
               git commit -a

              Then push the whole thing back:
               git push

GLOBAL OPTIONS

       --debug
              Give verbose output what git-dpm is doing.  Mostly only  useful  for  debugging  or
              when preparing an bug report.

       --debug-git-calls
              Output git invocations to stderr.  (For more complicated debugging cases).

       --allow-changes-in-debian-branch
              Ignore  upstream  changes  in your Debian branch.  This will either discard them if
              merge-patched is called by come command or them being ignored elsewhere.

COMMANDS

       init [options] tarfile [upstream-commit [preapplied-commit [patched-commit]]]
              Create a new project.

              The first argument is an upstream tarball.

              You also need to  have  the  contents  of  that  file  and  the  files  given  with
              --component  unpackaged as some branch or commit in your git repository (or similar
              enough so dpkg-source will not know the difference).  This will be  stored  in  the
              upstream  branch (called upstream or upstream-whatever).  If the second argument is
              non-existing or empty, that branch must already exist, otherwise that  branch  will
              be  initialized  with what that second argument. (It's your responsibility that the
              contents match. git-dpm does not know what your clean rule does,  so  cannot  check
              (and does not even try to warn yet)).

              You  can already have an Debian branch (called master or whatever).  If it does not
              exist, it will exist afterwards.  Otherwise it can contain a  debian/patches/series
              file, which git-dpm will import.

              The  third  argument can be a descendant of your upstream branch, that contains the
              changes of your Debian branch before any patches are applied (Most people prefer to
              have none and lintian warns, but if you have some, commit/cherry pick them in a new
              branch/detached head on top of your upstream branch and name them  here).   Without
              --patches-applied, your Debian branch may not have any upstream changes compared to
              this commit (or if it is not given, the upstream branch).

              If there is no fourth argument, git-dpm will apply possible patches in your  Debian
              branch  on  top of the third argument or upstream.  You can also do so yourself and
              give that as fourth argument.

              The contents of this commit/branch  given  in  the  fourth  commit  or  created  by
              applying  patches on top of the third/your upstream branch is then merged into your
              Debian branch and remembered as patched branch.

              Options:

              --component filename
                     Record a .orig-component.tar file to be unpacked in your upstream branch.

              --patches-applied
                     Denote the Debian branch already has the patches applied.

                     Without this git-dpm will check there are no changes in  the  Debian  branch
                     outside  patch  management  before  applying the patches; with this, it will
                     instead check there are no differences after applying the patches.

              --create-no-patches
                     Do not create/override debian/patches directory.   You  will  have  to  call
                     update-patches  yourself.   Useful  if you are importing historical data and
                     keep the original patches in the Debian branch.

              --record-patch-category
                     Add a Patch-Category: field to each imported patch that is in a subdirectory
                     of  debian/patches.   This  causes  update-patches  to  store it in the same
                     subdirectory.

              --record-patch-name
                     Add a Patch-Name: field to each imported patch with its name.   This  causes
                     update-patches to store it under its original name.

       prepare
              Make  sure  upstream  branch  and  upstream orig.tar ball are there and up to date.
              (Best called after a clone or a pull).

       status [branch]

              Check the status of the current  project  (or  of  the  project  belonging  to  the
              argument branch if that is given).  Returns with non-zero exit code if something to
              do is detected.

       checkout-patched

              Checkout the patched branch (patched|patched-whatever) after making sure it  exists
              and is one recorded in the debian/.git-dpm file.

              If the patched branch references an old state (i.e. one that is already ancestor of
              the current Debian branch), it is changed to the recorded current one.

              Otherwise you can reset it to the last recorded state with the --force option.

       update-patches [options] [branch-name]

              After calling  merge-patched-into-debian  if  necessary,  update  the  contents  of
              debian/patches to the current state of the patched branch.

              Also  record  in  debian/.git-dpm  which  state  of  the patched branch the patches
              directory belongs to.

              If a branch-name is given, that branch is processed.  Otherwise the name is derived
              from the currently checked out branch as usual.

              Options:

              --redo Do something, even if it seems like there is nothing to do.

              --allow-revert, --ignore-deletions, --dot-git-files=*
                     passed on to merge-patched-into-debian

              --amend
                     Do  not  create  a  new commit, but amend the last one in the Debian branch.
                     (I.e. call merge-patched-into-debian with  --amend  and  amend  the  updates
                     patches   into   the   last   commit   even  if  that  was  not  created  by
                     merge-patched-into-debian).

              -m message
                     Use message as commit message.  (If used together with --amend, do not reuse
                     old  commit message, author or author date but replace the old commit with a
                     new commit with that message).

              --keep-branch
                     do not remove an existing patched branch (usually that is removed and can be
                     recreated with checkout-patched to avoid stale copies lurking around.

              --allow-nonlinear
                     passed to merge-patched.

       dch [options] -- dch-options
              After  calling  update-patches if necessary, run devscripts' dch with the specified
              options and then do a git commit with a commit message containing  changes  to  the
              debian/changelog file.

              Options:

              --amend
                     Replace   the   commit   currently   the   head   of   the   Debian   branch
                     (master|something) instead of creating a new one on top.  The commit message
                     will  also  include  changes done to debian/changelog in the previous commit
                     (unless reverted by the new edit).

              --ignore-patches
                     Do not call update-patches but  simply  ignore  the  current  state  of  the
                     patched branch (patched|patched-something).

              --keep-branch,      --allow-revert,      --allow-nonlinear,     --ignore-deletions,
              --dot-git-files=*
                     Passed to update-patches, if called.

              --latest-only|--latest|-l
                     Only include changes between the current working  directory  before  calling
                     dch  and  after calling it (and not since the last commit or the last commit
                     not replaced).

              -e | -v | -a | --all | -s | -n | --no-verify  |  -u  |  --untracked-files  |  -q  |
              --quiet | --cleanup=... | --author=...
                     passed to git commit.

       merge-patched-into-debian [options] [branch-name]
              Usually update-patches runs this for you if deemed necessary.

              This  command  is the core of git-dpm, but you usually do not call it directly.  It
              is called by  update-patches  and  things  calling  update-patches  like  dch  when
              necessary.

              It  replaces  all  files  (with only the exceptions described below) in the current
              Debian  branch  (master|whatever)  with  those  found   in   the   patched   branch
              (patched|patched-whatever).

              Only  the debian directory and files in the root directory starting with ".git" are
              kept from the Debian branch (so .gitignore, .gitattributes, ...  will  stay).   And
              all  files  that  were found in the last recorded patched branch and deleted in the
              current Debian branch will also be deleted in the new one.

              Additionally the debian/.git-dpm file will be updated so the current patched branch
              is recorded and is marked as belonging to the last recorded upstream branch.

              If  there is no branch-name given on the command line the base name of the branches
              to operate on is computed from the currently checked out branch as usual. Otherwise
              this argument is used.

              Options:

              --allow-revert
                     Usually  reverting  to an old state of the patched branch is not allowed, to
                     avoid mistakes (like having only pulled the Debian branch and forgot to  run
                     checkout-patched).  This option changes that so you can for example drop the
                     last patch in your stack.

              --no-ignore-deletions (default)
                     Files deleted currently in  the  Debian  branch  relative  to  the  recorded
                     patched  branch will still be deleted in the new Debian branch and not taken
                     from the new patched branch.  This is the default unless a different default
                     was set with
                      git config dpm.BRANCHNAME.dpmIgnoreDeletions true.

              --ignore-deletions
                     Disable the behavior described in --no-ignore-deletions.

              --dot-git-files=method
                     Specify how files starting with .git outside debian/ are handled.  Those are
                     handles specially as .gitattributes and .gitignore might be different in the
                     Debian branch without being part of any patch.  (The whole debian/ directory
                     is always taken from the Debian branch, so files there are not affected).

                     Possible methods are:

                     automatic (default)
                            Any .git* files that are added, modified or removed  in  the  current
                            Debian  branch  compared  to  the old upstream branch are set to this
                            state, everything else is taken as found in the new patched branch.

                     debian All .git* files are taken from the Debian branch.  Files with a  name
                            like that from the patched branch are ignored.

                     upstream
                            Files  starting  with  .git are not given special handling.  They are
                            taken from the patched branch, unless they are deleted in the  Debian
                            branch  and  the default --no-ignore-deletions is active.  (i.e. just
                            like any other file outside debian/).

              --keep-branch
                     do not remove an existing patched branch (usually that is removed and can be
                     recreated with checkout-patched to avoid stale copies lurking around).

              --amend
                     Replace  the  last commit on your Debian branch (as git commit --amend would
                     do).  With the exception that every parent that is an ancestor of  or  equal
                     to  the new patched branch or the recorded patched branch is omitted.  (That
                     is, you lose not only the commit on the Debian branch, but also  a  previous
                     state  of  the  patched  branch  if your last commit also merged the patched
                     branch).

              -m message
                     Commit message to use for the new commit created.  (If  used  together  with
                     --amend, this disables reusing the old author and date).

              --allow-nonlinear
                     do  not  abort  with  an  error if the patched branch is no linear series of
                     commits on top of the upstream branch.  Using this option is not recommended
                     as  it  easily  hides  problems  with  patched  or  upstream  branch and may
                     introduce  broken  debian/patches/   series,   as   format-patch   does   no
                     serialisation.

       import-new-upstream [options] .orig.tar
              Import  the  contents  of  the  given  tarfile (as with import-tar) and record this
              branch (as with record-new-upstream).

              This is roughly equivalent to:
               git-dpm import-tar -p upstream filename
               git checkout -b upstream
               git-dpm record-new-upstream filename

              --detached
                     Don't make the new upstream branch an ancestor of the  old  upstream  branch
                     (unless you re-add that with -p).

              -p commit-id|--parent commit-id
                     Give import-tar additional parents of the new commit to create.

                     For  example  if you track upstream's git repository in some branch, you can
                     name that here to make it part of the history of your Debian branch.

              --allow-no-parent
                     If dpm.importWithoutParent is set to false via git config, git-dpm will  not
                     allow  import-new-upstream  to  be run without this option or at least on -p
                     option.

              --rebase-patched
                     After recording the new upstream branch, rebase the patched  branch  to  the
                     new upstream branch.

              --no-rebase-patched
                     Do  not  call rebase-patched after recording the new upstream branch.  (This
                     is currently the default, but that may change in the future).

              -m message
                     Commit message to use for the new commit to the Debian branch recording  the
                     new file and upstream branch.

              --component package_version.orig-component.tar.gz
                     Unpack  the specified filename into the component directory and record it so
                     that prepare and status know to check for it.

              --init

                     None of the branches yet exists, create them.

                     As the branches to operate on are derived from HEAD if no --branch option is
                     given,  you  either  need  HEAD  point  to  an not yet existing branch (like
                     directly after git init)  or  you  need  you  give  a  name  with  --branch.
                     Otherwise  one  of  the  branches  already  exists and you only get an error
                     message.

              --branch debianbranch
                     Don't derive the Debian branch name from current HEAD but  use  debianbranch
                     instead.   (And  upstream  branch  name and patched branch name derived from
                     that as usual).

              --pristine-tar-commit | --ptc
                     Call pristine-tar commit for all imported tarballs  not  yet  found  in  the
                     pristine-tar branch.

              --no-pristine-tar-commit
                     Do not call pristine-tar commit for all imported tarballs even if configured
                     to do so by
                      git config dpm.pristineTarCommit true or by
                      git config branch.debianbranch.dpmPristineTarCommit true.

              --ignore-deletions, --dot-git-files=
                     Passed to merge-patched, if called (only  done  if  there  were  no  patches
                     previously).

              --upstream-author author
                     Used as the --author argument to git-dpm import-tar.

              --upstream-date date
                     Used  as  the  --date  argument  to  git-dpm  import-tar (especially auto is
                     supported to extract a date from the tar file).

              --exclude pattern
                     The given pattern is passed to tar as exclude pattern when  unpacking.   Can
                     be given multiple times.

       import-tar [options] .tar-file
              Create a new commit containing the contents of the given file.  The commit will not
              have any parents, unless you give -p options.

              -p commit-id|--parent commit-id
                     Add the given commit as parent.  (Can be specified multiple times).

              --branch branchname
                     Create new branch branchname  if  it  does  not  already  exist  or  replace
                     branchname  with  a  commit  created  from  the  tarball  with  the  current
                     branchname head as parent.

              -m message
                     Do not start an editor for the commit message, but use the argument instead.

              --date date
                     Date of the commit to create.

                     If the value is auto then the newest date of any file or  directory  in  the
                     tarball is used.

              --author author
                     Author of the commit to create. It has to be in the usual git format
                      author <email>.

              --exclude pattern
                     The  given  pattern is passed to tar as exclude pattern when unpacking.  Can
                     be given multiple times.

       record-new-upstream [options] .orig.tar [commit]

              If you changed the upstream branch (upstream|upstream-whatever), git-dpm  needs  to
              know  which  tarball  this  branch  now  corresponds to and you have to rebase your
              patched branch (patched|patched-whatever) to the new upstream branch.

              If there is a second argument, this command first  replaces  your  upstream  branch
              with the specified commit.

              Then  the  new  upstream branch is recorded in your Debian branch's debian/.git-dpm
              file.

              If you specified --rebase-patched (or short --rebase), git-dpm rebase-patched  will
              be called to rebase your patched branch on top of the new upstream branch.

              After  this  (and  if  the branch then looks like what you want), you still need to
              call git-dpm merge-patched-into-debian (or directly git-dpm update-patches).

              WARNING to avoid any misunderstandings: You have  to  change  the  upstream  branch
              before  using this command.  It's your responsibility to ensure the contents of the
              tarball match those of the upstream branch.

              --rebase-patched
                     Automatically call git-dpm rebase-patched.

              --new-tarball-only
                     Don't refuse operation if the tarball changes but the  upstream  branch  did
                     not.   (This  is  only  sensible if the tarball changed without changing its
                     contents, see the warning above).

              -m message
                     Commit message to use for the new commit to the Debian branch recording  the
                     new file and upstream branch.

              --amend
                     Replace the last commit instead of creating a new one on top.

              --component filename
                     Record    filename    as    needed    component    source   file   (i.e.   a
                     sourcename_upstreamversion.orig-component.tar.compression file).  It's  your
                     responsible  to  have  that file's contents already as part of your upstream
                     branch (in a component subdirectory).

                     (Recorded files will be looked for by  status  and  prepare.   The  list  of
                     recorded  component  source  files  is removed when a new upstream branch or
                     upstream .orig source file is recorded).

              --ignore-deletions, --ot-git-files=
                     Passed to merge-patched, if called (which is only  done  if  there  were  no
                     patches previously, so the new upstream branch is merged in directly).

       rebase-patched
              Try  to  rebase  your  current  patched  branch  (patched|patched-whatever) to your
              current current upstream branch (upstream|upstream-whatever).

              If those branches do not yet exist as git branches, they are (re)created  from  the
              information recorded in debian/.git-dpm first.

              This  is only a convenience wrapper around git rebase that first tries to determine
              what exactly is to rebase.  If there are any conflicts, git rebase will ask you  to
              resolve them and tell rebase to continue.

              After this is finished (and if the branch then looks like what you want), you still
              need merge-patched-into-debian (or directly update-patches).

       tag [ options ] [ version ]
              Add tags to the upstream, patched and Debian branches.  If no version is given,  it
              is taken from debian/changelog.

              Options:

              --refresh
                     Overwrite the tags if they are already there and differ (except upstream).

              --refresh-upstream
                     Overwrite the upstream if that is there and differs.

              --allow-stale-patches
                     Don't  error  out if patches are not up to date.  This is only useful if you
                     are importing historical data and want to tag it.

              --named
                     Use the package name as part of the names of the generated tags.   (use  git
                     config dpm.tagsNamed true to make this the default)

              --with-name name
                     Like --named but give the name to use.

              --debian-tag tag-name

              --patched-tag tag-name

              --upstream-tag tag-name
                     Specify the names of the tags to generate.

                     %p is replaced with the package name,

                     %v  with  the version (without epoch) with colons (:) and tilde (~) replaced
                            by underscore (_),

                     %u with the upstream version (without epoch or Debian revision) with  colons
                            (:) and tilde (~) replaced by underscore (_),

                     %e with the epoch,

                     %f  with  the  epoch followed by an underscore (_) if there is an epoch, and
                            with the empty string if there is no epoch,

                     %V with the version (without epoch) with colons (:) and tilde  (~)  replaced
                            by dots (.),

                     %U  with the upstream version (without epoch or Debian revision) with colons
                            (:) and tilde (~) replaced with dots (.),

                     %E with the epoch followed by a dot if there is an epoch, and with the empty
                            string if there is no epoch,

                     %% with a single %.

              If  one  of those is not set via the command line option, git config is asked about
              value of dpm.debianTag, dpm.patchedTag or dpm.upstreamTag.  If that is also not set
              or the special value AUTO, then debian/.git-dpm is scanned for a line of the form
               debianTag="value",
               patchedTag="value" or
               upstreamTag="value".

              (Note:  always  add  those to the end of the file, the first eight lines have fixed
              line numbers)

              If  this  still  does  not  result  in  an  pattern  to  use,  the   defaults   are
              '%p-debian%e-%v',   '%p-patched%e-%v'   and  '%p-upstream%e-%u'  with  --named  and
              'debian%e-%v', 'patched%e-%v' and 'upstream%e-%u' without.

              If a tag name has the special value NONE, no tag is generated.

       ref-tag [ options ] commit [ version ]
              Like tag, but create tags for commit, i.e.  commit will get the Debian tag and  the
              other tags are placed where the debian/.git-dpm file of that commit points to.

              So it is mostly equivalent to:
               git checkout -b temp commit
               git-dpm tag [options] [version]
               git checkout previous-head
               git branch -D temp

              Options like tag.

       apply-patch [ options... ] [ filename ]
              Switch to the patched branch (assuming it is up to date, use checkout-patched first
              to make sure or get an warning), and apply the patch  given  as  argument  or  from
              stdin.

              --author author <email>
                     Override the author to be recorded.

              --defaultauthor author <email>
                     If no author could be determined from the commit, use this.

              --date date
                     Date to record this patch originally be from if non found.

              --dpatch
                     Parse  patch as dpatch patch (Only works for dpatch patches actually being a
                     patch, might silently fail for others).

              --cdbs Parse patch as cdbs simple-patchsys.mk patch (Only works for dpatch  patches
                     actually being a patch, might silently fail for others).

              --edit Start an editor before doing the commit (In case you are too lazy to amend).

              --record-name
                     Add  a  Patch-Name:  field to tell update-patches to export it with the same
                     name again.

              --name name
                     Add a Patch-Name: field to tell update-patches to use name  as  filename  to
                     store this patch into (relative to debian/patches).

              --category name
                     Add  a  Patch-Category:  field  to tell update-patches to always export this
                     patch into a subdirectory name of debian/patches.

       cherry-pick [ options... ] commit
              Recreate the patched branch and cherry-pick the given commit.  Then merge that back
              into  the  Debian  branch  and  update  the  debian/patches  directory (i.e. mostly
              equivalent to checkout-patched, git's cherry-pick, and update-patches).

              --merge-only
                     Only merge the patched branch back into the Debian branch but do not  update
                     the  patches  directory (You'll need to run update-patches later to get this
                     done).

              -e | --edit
                     Passed to git's cherry-pick: edit the commit message picked.

              -s | --signoff
                     Passed to git's cherry-pick: add a Signed-off-by header

              -x     Passed to git's cherry-pick: add a line describing what was picked

              -m num | --mainline num
                     Passed to git's cherry-pick: allow picking a merge by specifying the  parent
                     to look at.

              --repick
                     Don't abort if the specified commit is already contained.

              --allow-nonlinear, --ignore-deletions, --dot-git-files=
                     Passed to update-patches, if called.

                     passed to merge-patched-into-debian and update-patches.

              --keep-branch
                     do not remove the patched branch when it is no longer needed.

              --amend
                     passed  to  merge-patched-into-debian:  amend  the last commit in the Debian
                     branch.

       import-dsc
              Import a Debian source package from a .dsc file.  This can be used to create a  new
              project or to import a source package into an existing project.

              While  a possible old state of a project is recorded as parent commit, the state of
              the old Debian branch is not taken into account.  Especially all file deletions and
              .gitignore   files   and   the  like  need  to  be  reapplied/re-added  afterwards.
              (Assumption is that new source package versions from  outside  might  change  stuff
              significantly, so old information might more likely be outdated.  And reapplying it
              is easier then reverting such changes.)

              First step is importing the .orig.tar file and possible .orig-component.tar  files.
              You  can  either  specify  a  branch to use.  Otherwise import-dsc will look if the
              previous state of this project already has the needed  file  so  the  old  upstream
              branch  can be reused.  If there is non, the file will be imported as a new commit,
              by default with a possible previous upstream branch as parent.

              Then import-dsc will try to import the source package in the state  as  dpkg-source
              -x would create it.  (That is applying the .diff and making debian/rules executable
              for 1.0 format packages and replacing the debian directory with the contents  of  a
              .debian.tar  and  applying possible debian/patches/series for 3.0 format packages).
              This is later referred to as verbatim import.

              If it is a 1.0 source format package, import-dsc then looks for a set of  supported
              patch  systems  and  tries  to apply those patches.  Those are then merged with the
              verbatim state into the new Debian branch.

              Then a debian/.git-dpm file is created and a possible  old  state  of  the  project
              added as parent.

              Note  that  dpkg-source  is  not  used  to extract packages, but they are extracted
              manually.  Especially git-apply is used instead of  patch.   While  this  generally
              works (and git-dpm has some magic to work around some of git-apply's shortcomings),
              unclean patches might sometimes need a -C0 option and then in same cases be applied
              at different positions than where patch would apply them.

              General options:

              -b | --branch branch-name
                     Don't  look  at  the  current  HEAD, but import the package into the git-dpm
                     project branchname or create a new project (if  that  branch  does  not  yet
                     exist).

              --verbatim branch-name
                     After  import-dsc  has  completed successfully, branch-name will contain the
                     verbatim import of the .dsc file.  If a branch of that name already  exists,
                     the new verbatim commit will also have the old as parent.  (This also causes
                     the verbatim commit not being amended with other changes, which  can  result
                     in more commits).

              --use-changelog
                     Parse  debian/changelog  of  the  imported  package.  Use the description as
                     commit messages and the author and time as default for  patches  and  import
                     commits  without  that  information.  (Warning: may still contain some rough
                     edges).

              Options about creating the upstream branch:

              --upstream-to-use commit
                     Do not import the .orig.tar nor try to reuse an old import, but  always  use
                     the commit specified.

                     It  is  your  responsibility  that  this  branch  is  similar  enough to the
                     .orig.tar  file  plus  possible  .orig-component.tar  in  their   respective
                     directories.   (As usual, similar enough means: Does not miss any files that
                     your patches touch or your  build  process  requires  (or  recreates  unless
                     debian/rules  clean  removes  them  again).   Every  file  different than in
                     .orig.tar or not existing there you must  delete  in  the  resulting  Debian
                     branch. No patch may touch those files.)

                     Use  with  care.   Nothing  will  warn you even if you use the contents of a
                     totally wrong upstream version.

              --detached-upstream
                     If importing a .orig.tar as new commit, do not make an possible  commit  for
                     an old upstream version parent.

              --upstream-parent commit
                     Add commit as (additional) parent if importing a new upstream version.

                     (This  can  for  example be used to make upstream's git history part of your
                     package's history and thus help git when cherry-picking stuff).

              --allow-no-parent
                     If dpm.importWithoutParent is set to false via git config, git-dpm will  not
                     allow   import-dsc   to   be   run  without  this  option  or  at  least  on
                     --upstream-parent option.

              --pristine-tar-commit |--ptc
                     Call pristine-tar commit for all tarballs imported after  the  rest  of  the
                     import-dsc command was successful.

              --no-pristine-tar-commit
                     Do not call pristine-tar commit for all imported tarballs even if configured
                     to do so by
                      git config dpm.pristineTarCommit true or by
                      git config branch.debianbranch.dpmPristineTarCommit true.

              --upstream-author author
                     Used as the --author argument to git-dpm import-tar.

              --upstream-date date
                     Used as the --date  argument  to  git-dpm  import-tar  (especially  auto  is
                     supported to extract a date from the tar file).

              --tar-exclude pattern
                     The  given  pattern  is  passed  to  tar  as  exclude pattern when unpacking
                     tarfiles.  Can be given multiple times.

              Options about applying patches:

              -f | --force-commit-reuse
                     Only look at parent and tree and no longer at the description when trying to
                     reuse commits importing patches from previous package versions.

              -Cnum | --patch-context num
                     Passed  as  -Cnum  to git-apply.  Specifies the number of context lines that
                     must match.

              --dpatch-allow-empty
                     Do not error out if a dpatch file does not change anything when  treated  as
                     patch.

                     As  dpatch  files  can  be  arbitrary  scripts,  git-dpm  has  some problems
                     detecting if they are really patches.  (It can only cope with patches).   If
                     a  script  that  is  not a patch is treated as patch that usually results in
                     patch not modify anything, thus those are forbidden without this option.

              --patch-system mode
                     Specify what patch system is used for source format 1.0 packages.

                     auto (this is the default)
                            Try to determine what patch system is used by looking at debian/rules
                            (and debian/control).

                     none   Those are not the patches you are looking for.

                     history
                            Don't  try  to  find any patches in the .diff (like none).  If if the
                            project already exists and the upstream tarball is the  same,  create
                            the  patched state of the new one by using the patches of the old one
                            and adding a patch of top bringing it to the new state.

                            If you import multiple revisions of  some  package,  where  each  new
                            revision  added  at  most  a  single  change to upstream, this option
                            allows you to almost automatically create a  proper  set  of  patches
                            (ideally only missing descriptions).

                            If  there  are  same changes and reverts those will be visible in the
                            patches created, so this mode is not very useful in that case.

                     quilt  Extract and apply a debian/patches/series quilt like series on top of
                            possible upstream changes found in the .diff file.

                     quilt-first
                            As  the  quilt  mode, but apply the patches to an unmodified upstream
                            first and then cherry-pick the changes found in the .diff file.

                            As this is not the order in which patches are  applied  in  a  normal
                            unpack/build  cycle, this will fail if those changes are not distinct
                            enough (for example when  patches  depend  on  changes  done  in  the
                            .diff).

                            But  if  the  .diff only contains unrelated changes which varies with
                            each version, this gives a much nicer history, as the commits for the
                            patches can more easily be reused.

                     quilt-applied
                            As  the  quilt-first mode, but assume the patches are already applied
                            in the .diff, so apply them on top of an unmodified upstream and then
                            add  a commit bringing it to the state in the .diff.  (Or not if that
                            patch would be empty).

                     dpatch | dpatch-first | dpatch-applied
                            Like the quilt  resp.  quilt-first  resp.  quilt-applied  modes,  but
                            instead look for dpatch-style patches in debian/patches/00list.

                            Note  that  only  patches  are supported and not dpatch running other
                            commands.

                     simple | simple-first | simple-applied
                            Like the quilt  resp.  quilt-first  resp.  quilt-applied  modes,  but
                            instead  assume  debian/patches/ contains patches suitable for cdbs's
                            simple-patchsys.mk.

              --patch-author "name <email>"
                     Set the author for all git commits importing patches.

              --patch-default-author "name <email>"
                     Set an author for all patches not containing author  information  (or  where
                     git-dpm cannot determine it).

              --edit-patches
                     For every patch imported, start an editor for the commit message.

              --record-patch-category
                     Add a Patch-Category: field to each imported patch that is in a subdirectory
                     of debian/patches.  This causes update-patches  to  store  it  in  the  same
                     subdirectory.

              --record-patch-name
                     Add  a  Patch-Name: field to each imported patch with its name.  This causes
                     update-patches to store it under its original name.

       record-dsc [options] commit .dsc-file
              Store a pristine .dsc file in a dscs branch after storing  the  files  it  contains
              using pristine-tar.

              The  first  argument  is  an tag or commit storing the git-dpm project in the state
              belonging to the .dsc file and the second argument is the .dsc  file  itself.   The
              files  it references are expected in the same directory as the file itself (if they
              are needed).

              Some checks are done to make sure the file and its contents are named properly  and
              match  the  commit  in  question,  but  only cursory to avoid obvious mistakes (for
              example only the version is checked, but .debian.tar is not unpacked to  check  the
              files are really the same, for example).

              Options:

              --create-branch
                     Create a new dscs branch.

              --allow-unsigned
                     Allow  recording  a  unsigned  .dsc file.  This usually defeats the point of
                     storing them at all.

the debian/.git-dpm file

       You should not need to know about the contents if this file except for debugging git-dpm.

       The file contains 8 lines, but future version may contain more.

       The first line is hint what this file is about and ignored.

       Then there are 4 git commit ids for the recorded states:

              First the state of the patched branch when the patches in debian/patches were  last
              updated.

              Then  the  state  of  the  patched  branch  when it was last merged into the Debian
              branch.

              Then the state upstream branch when the patched branch was last merged.

              Finally the upstream branch.

       The following 3 lines are the filename, the sha1 checksum and the size of the  origtarball
       belonging to the recorded upstream branch.

SHORTCUTS

       Most commands also have shorter aliases, to avoid typing:

        update-patches:    up, u-p, ci
        prepare: prep
        checkout-patched:  co, c-p
        rebase-patched:    r-p
        apply-patch:  a-p
        import-tar:   i-t
        import-new-upstream:    i-n-u, inu
        record-new-upstream:    r-n-u, rnu
        merge-patched-in-debian: merge-patched

       record-new-upstream  is also available under the old name new-upstream, though likely will
       be removed in future versions (to avoid confusion).

BRANCHES

       the upstream branch (upstream|upstream-whatever)
              This branch contains the upstream sources.  It contents need to be equal enough  to
              the contents in your upstream tarball.

              Equal  enough  means that dpkg-source should see no difference between your patched
              tree and and original tarball unpackaged,  the  patched  applied  and  debian/rules
              clean  run.  Usually it is easiest to just store the verbatim contents of your orig
              tarball here.  Then you can also use it for pristine tar.

              This branch may contain a debian/ subdirectory, which will usually be just ignored.

              You can either publish that branch or make  it  only  implicitly  visible  via  the
              debian/.git-dpm file in the Debian branch.

              While  it usually makes sense that newer upstream branches contain older ones, this
              is not needed.  You should be able to switch from one created yourself or  by  some
              foreign-vcs importing tool generated one to an native upstream branch or vice versa
              without problems.  Note that since the Debian branch  has  the  patched  branch  as
              ancestor  and  the  patched  branch the upstream branch, your upstream branches are
              part of the history of your Debian branch.  Which has the advantage  that  you  can
              recreate  the  exact  state  of  your branches from your history directly (like git
              checkout -b oldstate myoldtagorshaofdebianbranchcommit  ;  git-dpm  prepare  ;  git
              checkout  unstable-oldstate)  but  the  disadvantage that to remove those histories
              from your repository you have to do some manual work.

       the patched branch (patched|patched-whatever)
              This branch contains your patches to the upstream source.  (which of  course  means
              it is based on your upstream branch).

              Every commit will be stored as a single patch in the resulting package.

              To  help git generate a linear patch series, this should ideal be a linear chain of
              commits, whose description are helpful for other people.

              As this branch is regularly rebase d, you should not publish it.  Instead  you  can
              recreate this branch using git-dpm checkout-patched using the information stored in
              debian/.git-dpm.

              You are not allowed to change the contents of  the  debian/  subdirectory  in  this
              branch.  Renaming files or deleting files usually causes unnecessary large patches.

       the Debian branch (master|whatever)
              This is the primary branch.

              This branch contains the debian/ directory and has the patched branch merged in.

              Every  change  not  in debian/, .git* or deleting files must be done in the patched
              branch.

       alternative branch names
              You can specify alternate branch names for  upstream  and  patched  branches  of  a
              specific Debian branch, or force a branch to be a Debian branch that would normally
              be considered e.g. upstream branch of another branch  by  adding  dpmUpstreamBranch
              and  dpmPatchedBranch  configure  items for the Debian branch in question (you need
              both, only one is treated as error).

              The following example is a no-op for all practical purposes:
               git config branch.master.dpmUpstreamBranch upstream
               git config branch.master.dpmPatchedBranch patched

COPYRIGHT

       Copyright © 2009,2010 Bernhard R. Link
       This is free software; see the source for copying conditions. There is  NO  warranty;  not
       even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.