Provided by: git-dpm_0.10.0-1.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.

git-dpm                                            2012-05-15                                         GIT-DPM(1)