'\" t .\" Title: git-drover .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 10/20/2015 .\" Manual: Chromium depot_tools Manual .\" Source: depot_tools 704d890 .\" Language: English .\" .TH "GIT\-DROVER" "1" "10/20/2015" "depot_tools 704d890" "Chromium depot_tools Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" git-drover \- Apply a commit from the trunk to a release branch, or from one release branch to another\&. .SH "SYNOPSIS" .sp .nf \fIgit drover\fR \-\-branch (\-\-cherry\-pick | \-\-continue [path_to_workdir] | \-\-abort [path_to_workdir]) [\-\-parent_checkout ] [\-\-verbose] [\-\-dry\-run] .fi .sp .SH "DESCRIPTION" .sp 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\&. .sp git drover does not support reverts\&. See the EXAMPLE section for the equivalent sequence of commands to run\&. .SH "OPTIONS" .PP \-\-branch .RS 4 The branch to cherry\-pick the commit to\&. .RE .PP \-\-cherry\-pick .RS 4 The commit to cherry\-pick\&. .RE .PP \-\-continue [path_to_workdir] .RS 4 Continue a cherry\-pick that required manual resolution\&. The path to the drover workdir is optional\&. If unspecified, the current directory is used\&. .RE .PP \-\-abort [path_to_workdir] .RS 4 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\&. .RE .PP \-\-parent_checkout .RS 4 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\&. .RE .PP \-v, \-\-verbose .RS 4 Enable verbose logging\&. .RE .PP \-\-dry\-run .RS 4 Skip landing the cherry\-pick\&. Just ensure that the commit can be cherry\-picked into the branch\&. .RE .SH "EXAMPLE" .SS "PREREQUISITES" .sp Before working with branches, you must \fIgclient sync \-\-with_branch_heads\fR at least once to fetch the branches\&. .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBMerge Example\fR .RS 4 .sp .sp .if n \{\ .RS 4 .\} .nf # Here\*(Aqs a commit (from some\&.committer) that we want to \*(Aqdrover\*(Aq\&. \fB$ git log \-n 1 \-\-pretty=fuller\fR commit 9b111fcda69cb6bf8a38d1e77867c298d80ca9d1 Author: some\&.committer AuthorDate: Thu Apr 10 08:54:46 2014 +0000 Commit: some\&.committer CommitDate: Thu Apr 10 08:54:46 2014 +0000 This change needs to go to branch 9999 # Now do the \*(Aqdrover\*(Aq\&. \fB$ git drover \-\-branch 9999 \-\-cherry\-pick 9b111fcda69cb6bf8a38d1e77867c298d80ca9d1\fR Going to cherry\-pick """ commit 9b111fcda69cb6bf8a38d1e77867c298d80ca9d1 Author: some\&.committer 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\&. .fi .if n \{\ .RE .\} .sp .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBMerge with Conflicts Example\fR .RS 4 .sp .sp .if n \{\ .RS 4 .\} .nf # Here\*(Aqs a commit (from some\&.committer) that we want to \*(Aqdrover\*(Aq\&. \fB$ git log \-n 1 \-\-pretty=fuller\fR commit 89ce5bb7bdf7149754b94e4d9fc5413435e6680d Author: some\&.committer AuthorDate: Thu Apr 10 08:54:46 2014 +0000 Commit: some\&.committer CommitDate: Thu Apr 10 08:54:46 2014 +0000 This change needs to go to branch 9999 # Now do the \*(Aqdrover\*(Aq\&. \fB$ git drover \-\-branch 9999 \-\-cherry\-pick 89ce5bb7bdf7149754b94e4d9fc5413435e6680d\fR Going to cherry\-pick """ commit 89ce5bb7bdf7149754b94e4d9fc5413435e6680d Author: some\&.committer 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 \fB$ pushd /tmp/drover_9999\fR # Manually resolve conflicts\&. \fB$ git add path/to/file_with_conflicts\fR \fB$ popd\fR \fB$ git drover \-\-continue /tmp/drover_9999\fR # 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\&. .fi .if n \{\ .RE .\} .sp .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBRevert Example\fR .RS 4 .sp .sp .if n \{\ .RS 4 .\} .nf # Make sure we have the most up\-to\-date branch sources\&. \fB$ git fetch\fR # Checkout the branch with the change we want to revert\&. \fB$ git checkout \-b drover_9999 branch\-heads/9999\fR Branch drover_9999 set up to track remote ref refs/branch\-heads/9999\&. # Here\*(Aqs the commit we want to revert\&. \fB$ git log \-n 1\fR commit d5efb50dcc76ea29ad30d1015fb291a9ba5fc0db Author: some\&.committer Date: Thu Apr 10 08:54:46 2014 +0000 This change is horribly broken\&. # Now do the revert\&. \fB$ git revert d5efb50dcc76ea29ad30d1015fb291a9ba5fc0db\fR # That reverted the change and committed the revert\&. \fB$ git log \-n 1\fR commit 1b6ccf84e2c13c6f6a2b69b29626aed8fa0ae24d Author: you Date: Thu Apr 10 09:11:36 2014 +0000 Revert "This change is horribly broken\&." This reverts commit d5efb50dcc76ea29ad30d1015fb291a9ba5fc0db\&. # As with old drover, reverts are generally OK to commit without LGTM\&. \fB$ git cl upload \-r some\&.committer@chromium\&.org \-\-send\-mail\fR \fB$ git cl land \-\-bypass\-hooks\fR .fi .if n \{\ .RE .\} .sp .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBManual Merge Example\fR .RS 4 .sp .sp .if n \{\ .RS 4 .\} .nf # Make sure we have the most up\-to\-date branch sources\&. \fB$ git fetch\fR # Here\*(Aqs a commit (from some\&.committer) that we want to \*(Aqdrover\*(Aq\&. \fB$ git log \-n 1 \-\-pretty=fuller\fR commit 2655f8d9d48f18dbfed237c67b8c65134050b2e3 Author: some\&.committer AuthorDate: Thu Apr 10 08:54:46 2014 +0000 Commit: some\&.committer CommitDate: Thu Apr 10 08:54:46 2014 +0000 This change needs to go to branch 9999 # Checkout the branch we want to \*(Aqdrover\*(Aq to\&. \fB$ git checkout \-b drover_9999 branch\-heads/9999\fR Branch drover_9999 set up to track remote ref refs/branch\-heads/9999\&. # Now do the \*(Aqdrover\*(Aq\&. # IMPORTANT!!! Do Not leave off the \*(Aq\-x\*(Aq flag \fB$ git cherry\-pick \-x 2655f8d9d48f18dbfed237c67b8c65134050b2e3\fR [drover_9999 589e8ad] This change needs to go to branch 9999 Author: some\&.committer 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)\&. \fB$ git log \-n 1 \-\-pretty=fuller\fR commit 589e8adbb095944100d029724b4038094120f23b Author: some\&.committer AuthorDate: Thu Apr 10 08:54:46 2014 +0000 Commit: you CommitDate: Thu Apr 10 09:11:36 2014 +0000 This change needs to go to branch 9999 (cherry picked from commit 2655f8d9d48f18dbfed237c67b8c65134050b2e3) # Looks good\&. Ship it! \fB$ git cl upload\fR # Wait for LGTM or TBR it\&. \fB$ git cl land\fR # Or skip the LGTM/TBR and just \*(Aqgit cl land \-\-bypass\-hooks\*(Aq .fi .if n \{\ .RE .\} .sp .RE .SH "SEE ALSO" .sp \fBgit-cherry-pick\fR(1), \fBgit-revert\fR(1) .SH "CHROMIUM DEPOT_TOOLS" .sp Part of the chromium \fBdepot_tools\fR(7) suite\&. These tools are meant to assist with the development of chromium and related projects\&. Download the tools from \m[blue]\fBhere\fR\m[]\&\s-2\u[1]\d\s+2\&. .SH "NOTES" .IP " 1." 4 here .RS 4 \%https://chromium.googlesource.com/chromium/tools/depot_tools.git .RE