GIT-DROVER(1)

NAME
git-drover - Apply a commit from the trunk to a release branch, or from one release branch to another.

SYNOPSIS

git drover --branch <branch> --cherry-pick <commit>
           [--parent_checkout <path-to-existing-checkout>]
           [--verbose] [--dry-run]

DESCRIPTION

git drover applies a commit to a release branch. It creates a new workdir from an existing checkout to avoid downloading a new checkout without affecting the existing checkout. Creating a workdir requires symlinks so this does not work on Windows. See the EXAMPLE section for the equivalent sequence of commands to run.

git drover does not support reverts. See the EXAMPLE section for the equivalent sequence of commands to run.

OPTIONS

--branch <branch>
    The branch to cherry-pick the commit to.

--cherry-pick <commit>
    The commit to cherry-pick.

--parent_checkout
    The path to the chromium checkout to use as the source for a creating git-new-workdir workdir to use for cherry-picking. If unspecified, the current directory is used.

-v, --verbose
    Enable verbose logging.

--dry-run
    Skip landing the cherry-pick. Just ensure that the commit can be cherry-picked into the branch.

EXAMPLE

  PREREQUISITES

Before working with branches, you must gclient sync --with_branch_heads at least once to fetch the branches.

Merge Example

        # Here's a commit (from some.committer) that we want to 'drover'.
        $ git log -n 1 --pretty=fuller
        commit b5a049e34297f22a4ea63567b32e3290bb3f244c
        Author:     some.committer <some.committer@chromium.org>
        AuthorDate: Thu Apr 10 08:54:46 2014 +0000
        Commit:     some.committer <some.committer@chromium.org>
        CommitDate: Thu Apr 10 08:54:46 2014 +0000
            This change needs to go to branch 9999
        # Now do the 'drover'.
        $ git drover --branch 9999 --cherry-pick b5a049e34297f22a4ea63567b32e3290bb3f244c
        Going to cherry-pick
        """
        commit b5a049e34297f22a4ea63567b32e3290bb3f244c
        Author: some.committer <some.committer@chromium.org>
        Date:   Thu Apr 10 08:54:46 2014 +0000
            This change needs to go to branch 9999
        """
        to 9999. Continue (y/n)? y
        # A cl is uploaded to rietveld, where it can be reviewed before landing.
        About to land on 9999. Continue (y/n)? y
        # The cherry-pick cl is landed on the branch 9999.

Revert Example

        # Make sure we have the most up-to-date branch sources.
        $ git fetch
        # Checkout the branch with the change we want to revert.
        $ git checkout -b drover_9999 branch-heads/9999
        Branch drover_9999 set up to track remote ref refs/branch-heads/9999.
        # Here's the commit we want to revert.
        $ git log -n 1
        commit 215689406a8ca5813412becc6258509be903db59
        Author: some.committer <some.committer@chromium.org>
        Date:   Thu Apr 10 08:54:46 2014 +0000
            This change is horribly broken.
        # Now do the revert.
        $ git revert 215689406a8ca5813412becc6258509be903db59
        # That reverted the change and committed the revert.
        $ git log -n 1
        commit 1efaf0e8b1c6c6afadfb37e15023b52b960ac2fd
        Author: you <you@chromium.org>
        Date:   Thu Apr 10 09:11:36 2014 +0000
            Revert "This change is horribly broken."
            This reverts commit 215689406a8ca5813412becc6258509be903db59.
        # As with old drover, reverts are generally OK to commit without LGTM.
        $ git cl upload -r some.committer@chromium.org --send-mail
        $ git cl land --bypass-hooks

Manual Merge Example

        # Make sure we have the most up-to-date branch sources.
        $ git fetch
        # Here's a commit (from some.committer) that we want to 'drover'.
        $ git log -n 1 --pretty=fuller
        commit 640f962733bfd2b9c44539a0d65952643750957e
        Author:     some.committer <some.committer@chromium.org>
        AuthorDate: Thu Apr 10 08:54:46 2014 +0000
        Commit:     some.committer <some.committer@chromium.org>
        CommitDate: Thu Apr 10 08:54:46 2014 +0000
            This change needs to go to branch 9999
        # Checkout the branch we want to 'drover' to.
        $ git checkout -b drover_9999 branch-heads/9999
        Branch drover_9999 set up to track remote ref refs/branch-heads/9999.
        # Now do the 'drover'.
        # IMPORTANT!!! Do Not leave off the '-x' flag
        $ git cherry-pick -x 640f962733bfd2b9c44539a0d65952643750957e
        [drover_9999 5f1ae97] This change needs to go to branch 9999
         Author: some.committer <some.committer@chromium.org>
         Date: Thu Apr 10 08:54:46 2014 +0000
         1 file changed, 1 insertion(+)
         create mode 100644 modified_file
        # That took the code authored by some.committer and committed it to
        # the branch by the person who drovered it (i.e. you).
        $ git log -n 1 --pretty=fuller
        commit 5f1ae978a8d05c16d8ed812163b7aa927f028bf9
        Author:     some.committer <some.committer@chromium.org>
        AuthorDate: Thu Apr 10 08:54:46 2014 +0000
        Commit:     you <you@chromium.org>
        CommitDate: Thu Apr 10 09:11:36 2014 +0000
            This change needs to go to branch 9999
            (cherry picked from commit 640f962733bfd2b9c44539a0d65952643750957e)
        # Looks good. Ship it!
        $ git cl upload
        # Wait for LGTM or TBR it.
        $ git cl land
        # Or skip the LGTM/TBR and just 'git cl land --bypass-hooks'

SEE ALSO

git-cherry-pick(1), git-revert(1)

CHROMIUM DEPOT_TOOLS

Part of the chromium depot_tools(7) suite. These tools are meant to assist with the development of chromium and related projects. Download the tools from here[1].

NOTES

1.  here
    https://chromium.googlesource.com/chromium/tools/depot_tools.git