MFC: update advice on MFC practices
Highlight MFC to a branch needing approval Rearrange a couple sections to improve document structure. Change some enumeration lists to bulleted lists since I think that looks nicer.
This commit is contained in:
parent
b4977a4f42
commit
0181ba1611
1 changed files with 38 additions and 34 deletions
|
@ -712,6 +712,24 @@ up and do a `git cherry-pick --continue`.
|
|||
Once the cherry-pick is finished, push with `git push`. If you get an error due to losing the commit race,
|
||||
use `git pull --rebase` and try to push again.
|
||||
|
||||
==== MFC to RELENG branch
|
||||
|
||||
MFCs to branches that require approval require a bit more care.
|
||||
The process is the same for either a typical merge or an exceptional direct commit.
|
||||
|
||||
* Merge or direct commit to the appropriate `stable/X` branch first before merging to the `releng/X.Y` branch.
|
||||
* Use the hash that's in the `stable/X` branch for the MFC to `releng/X.Y` branch.
|
||||
* Leave both "cherry picked from" lines in the commit message.
|
||||
* Be sure to add the `Approved by:` line when you are in the editor.
|
||||
|
||||
[source,shell]
|
||||
....
|
||||
% git checkout releng/13.0
|
||||
% git cherry-pick -x $HASH --edit
|
||||
....
|
||||
|
||||
If you forget to to add the `Approved by:` line, you can do a `git commit --amend` to edit the commit message before you push the change.
|
||||
|
||||
==== Multiple commit MFC
|
||||
|
||||
[source,shell]
|
||||
|
@ -785,18 +803,15 @@ using 'git rebase -i' is better.
|
|||
When committing source commits to stable and releng branches, we have
|
||||
the following goals:
|
||||
|
||||
1. Clearly mark direct commits distinct from commits that land a
|
||||
change from another branch
|
||||
2. Avoid introducing known breakage into stable and releng branches
|
||||
3. Allow developers to determine which changes have or have not been
|
||||
landed from one branch to another
|
||||
* Clearly mark direct commits distinct from commits that land a change from another branch.
|
||||
* Avoid introducing known breakage into stable and releng branches.
|
||||
* Allow developers to determine which changes have or have not been landed from one branch to another.
|
||||
|
||||
With subversion, we used the following practices to achieve these goals:
|
||||
|
||||
1. Using 'MFC' and 'MFS' tags to mark commits that merged changes from
|
||||
another branch
|
||||
2. Squashing fixup commits into the main commit when merging a change
|
||||
3. Recording mergeinfo so that `svn mergeinfo --show-revs` worked
|
||||
* Using 'MFC' and 'MFS' tags to mark commits that merged changes from another branch.
|
||||
* Squashing fixup commits into the main commit when merging a change.
|
||||
* Recording mergeinfo so that `svn mergeinfo --show-revs` worked.
|
||||
|
||||
With Git, we will need to use different strategies to achieve the same
|
||||
goals. This document aims to define best practices when merging
|
||||
|
@ -812,31 +827,7 @@ replicated or "landed" to a stable branch, or a commit from a stable
|
|||
branch that is replicated to a releng branch with some varation of
|
||||
`git cherry-pick`.
|
||||
|
||||
==== Commit message standards
|
||||
===== Marking MFCs
|
||||
|
||||
There are two main options for marking MFCs as distinct from direct
|
||||
commits:
|
||||
|
||||
1. One option that matches our existing practice (the wisdom of which
|
||||
I'm not commenting on) would mark MFCs like this in the commit
|
||||
message: `MFC: 12def6789a3a,ac32ee4a5c2e`
|
||||
|
||||
where the first 12 digits of the hash is used to mark the commit message.
|
||||
This "abbreviated hash" can be retrieved by: `git show --format=%p --no-patch $full_hash`
|
||||
|
||||
This preserves the information, but isn't 'git standard'. It also
|
||||
requires committers to manually edit commit messages to include
|
||||
this information when merging.
|
||||
|
||||
2. Use the `-x` flag with `git cherry-pick`. This adds a line to the
|
||||
commit message that includes the hash of the original commit when
|
||||
merging. Since it is added by Git directly, committers do not have
|
||||
to manually edit the commit log when merging.
|
||||
|
||||
We feel that the second option is simpler going forward.
|
||||
|
||||
===== Finding Eligible Hashes to MFC
|
||||
==== Finding Eligible Hashes to MFC
|
||||
|
||||
Git provides some built-in support for this via the `git cherry` and
|
||||
`git log --cherry` commands. These commands compare the raw diffs of
|
||||
|
@ -867,6 +858,19 @@ There are a few options for resolving this:
|
|||
commit, but collecting the `-x` annotations at the end of the
|
||||
landed commit log.
|
||||
|
||||
==== Commit message standards
|
||||
===== Marking MFCs
|
||||
|
||||
There are two main options for marking MFCs as distinct from direct
|
||||
commits:
|
||||
|
||||
* Use the `-x` flag with `git cherry-pick`. This adds a line to the
|
||||
commit message that includes the hash of the original commit when
|
||||
merging. Since it is added by Git directly, committers do not have
|
||||
to manually edit the commit log when merging.
|
||||
|
||||
When merging multiple commits, keep all the "cherry picked from" lines.
|
||||
|
||||
===== Trim Metadata?
|
||||
|
||||
One area that was not clearly documented with subversion (or even CVS)
|
||||
|
|
Loading…
Reference in a new issue