SYNOPSIS
git drover --branch <branch> (--cherry-pick <change> | --continue [path_to_workdir] | --abort [path_to_workdir]) [--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.
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.
- --continue [path_to_workdir]
-
Continue a cherry-pick that required manual resolution. The path to the drover workdir is optional. If unspecified, the current directory is used.
- --abort [path_to_workdir]
-
Abort a cherry-pick that required manual resolution and clean up its workdir. The path to the drover workdir is optional. If unspecified, the current directory is used.
- --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 3b3f7e1631a521457357228c2048e647c60e67bd
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 3b3f7e1631a521457357228c2048e647c60e67bd
Going to cherry-pick
"""
commit 3b3f7e1631a521457357228c2048e647c60e67bd
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.
Merge with Conflicts Example
# Here's a commit (from some.committer) that we want to 'drover'.
$ git log -n 1 --pretty=fuller
commit 28f2d8f22642366b09afa8ea2d4ef6ea6de2f662
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 28f2d8f22642366b09afa8ea2d4ef6ea6de2f662
Going to cherry-pick
"""
commit 28f2d8f22642366b09afa8ea2d4ef6ea6de2f662
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
Error: Patch failed to apply.
A workdir for this cherry-pick has been created in
/tmp/drover_9999
To continue, resolve the conflicts there and run
git drover --continue /tmp/drover_9999
To abort this cherry-pick run
git drover --abort /tmp/drover_9999
$ pushd /tmp/drover_9999
# Manually resolve conflicts.
$ git add path/to/file_with_conflicts
$ popd
$ git drover --continue /tmp/drover_9999
# 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 302334dbd2dca060814ffd3567808f2beafbf647
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 302334dbd2dca060814ffd3567808f2beafbf647
# That reverted the change and committed the revert.
$ git log -n 1
commit dd4742441d71cf2b8f403ff9ca819b3201de3c5b
Author: you <you@chromium.org>
Date: Thu Apr 10 09:11:36 2014 +0000
Revert "This change is horribly broken."
This reverts commit 302334dbd2dca060814ffd3567808f2beafbf647.
# 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
Using 50% similarity for rename/copy detection. Override with --similarity.
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 441c947b3ff6e1d6b9036d67926011fbea92724f
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 441c947b3ff6e1d6b9036d67926011fbea92724f
[drover_9999 c7b0d40] 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 c7b0d40c9f5793a27043688183a48597e656adcc
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 441c947b3ff6e1d6b9036d67926011fbea92724f)
# Looks good. Ship it!
$ git cl upload
# Wait for LGTM or TBR it.
$ git cl land
Using 50% similarity for rename/copy detection. Override with --similarity.
# 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.