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 8b79b7b2f7e6e728f9a3c7b385c72efc7c47244a
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 8b79b7b2f7e6e728f9a3c7b385c72efc7c47244a
Going to cherry-pick
"""
commit 8b79b7b2f7e6e728f9a3c7b385c72efc7c47244a
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 33b0e9164d4564eb8a4b4e5b951bba6edeeecacb
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 33b0e9164d4564eb8a4b4e5b951bba6edeeecacb
# That reverted the change and committed the revert.
$ git log -n 1
commit 8a2d2bb98b9cfc9260a9bc86da1eec2a43f43f8b
Author: you <you@chromium.org>
Date: Thu Apr 10 09:11:36 2014 +0000
Revert "This change is horribly broken."
This reverts commit 33b0e9164d4564eb8a4b4e5b951bba6edeeecacb.
# 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 537f446fa3d5e41acab017bb0b082fbd0c9eb043
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 537f446fa3d5e41acab017bb0b082fbd0c9eb043
[drover_9999 b468abc] 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 b468abc42ddd4fd9aecc48c3eda172265306d2b4
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 537f446fa3d5e41acab017bb0b082fbd0c9eb043)
# 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
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.