123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- '\" t
- .\" Title: git-drover
- .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
- .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
- .\" Date: 05/03/2019
- .\" Manual: Chromium depot_tools Manual
- .\" Source: depot_tools e58cce6c
- .\" Language: English
- .\"
- .TH "GIT\-DROVER" "1" "05/03/2019" "depot_tools e58cce6c" "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 <branch>
- (\-\-cherry\-pick <change> | \-\-continue [path_to_workdir] |
- \-\-abort [path_to_workdir])
- [\-\-parent_checkout <path\-to\-existing\-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 <branch>
- .RS 4
- The branch to cherry\-pick the commit to\&.
- .RE
- .PP
- \-\-cherry\-pick <commit>
- .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 1f4859134ea36bfc71bab20d4b4463908860fd04
- 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 \*(Aqdrover\*(Aq\&.
- \fB$ git drover \-\-branch 9999 \-\-cherry\-pick 1f4859134ea36bfc71bab20d4b4463908860fd04\fR
- Going to cherry\-pick
- """
- commit 1f4859134ea36bfc71bab20d4b4463908860fd04
- 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\&.
- .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 351e3be4c0f2f65ff1bcbcafd2fd4c53ab3b4587
- 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 \*(Aqdrover\*(Aq\&.
- \fB$ git drover \-\-branch 9999 \-\-cherry\-pick 351e3be4c0f2f65ff1bcbcafd2fd4c53ab3b4587\fR
- Going to cherry\-pick
- """
- commit 351e3be4c0f2f65ff1bcbcafd2fd4c53ab3b4587
- 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
- \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 \*(Aqdrover_9999\*(Aq set up to track remote ref \*(Aqrefs/branch\-heads/9999\*(Aq\&.
- # Here\*(Aqs the commit we want to revert\&.
- \fB$ git log \-n 1\fR
- commit 8f0c06e50f535e3fcca2b189bb6b5d106bb1e5e6
- 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\&.
- \fB$ git revert 8f0c06e50f535e3fcca2b189bb6b5d106bb1e5e6\fR
- # That reverted the change and committed the revert\&.
- \fB$ git log \-n 1\fR
- commit 829317133eb319e61f222fea996ca2703cd27fbe
- Author: you <you@chromium\&.org>
- Date: Thu Apr 10 09:11:36 2014 +0000
- Revert "This change is horribly broken\&."
- This reverts commit 8f0c06e50f535e3fcca2b189bb6b5d106bb1e5e6\&.
- # 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
- .sp
- If your cherrypick onto a release branch gets reverted, do not create a new cherrypick from master onto that release branch\&. Instead, use the "Reland" button on the original cherrypick CL\&.
- .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 ceb84b4befd7a7c060d210fdc57b3d0f46d68fa4
- 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 \*(Aqdrover\*(Aq to\&.
- \fB$ git checkout \-b drover_9999 branch\-heads/9999\fR
- Branch \*(Aqdrover_9999\*(Aq set up to track remote ref \*(Aqrefs/branch\-heads/9999\*(Aq\&.
- # Now do the \*(Aqdrover\*(Aq\&.
- # IMPORTANT!!! Do Not leave off the \*(Aq\-x\*(Aq flag
- \fB$ git cherry\-pick \-x ceb84b4befd7a7c060d210fdc57b3d0f46d68fa4\fR
- [drover_9999 bd9bd5b] 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)\&.
- \fB$ git log \-n 1 \-\-pretty=fuller\fR
- commit bd9bd5b74ab9b942d127ddbefb99eec50b65fbf1
- 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 ceb84b4befd7a7c060d210fdc57b3d0f46d68fa4)
- # 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
- .sp
- If git cl upload errors out, the branch you\(cqre uploading to probably has a CL with the same Change\-Id\&. Instead of cherry\-picking manually, use the Reland button in the Gerrit UI to create a new CL, and patch that CL into your client\&.
- .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
|