On Tue, Oct 9, 2012 at 4:26 PM, James Nylen <jnylen@xxxxxxxxx> wrote: > This new option does the reverse of --annotate, which is more useful > when contributing back to a library which is also included in the > repository for a larger project, and perhaps in other situations as > well. > > Rather than adding a marker to each commit when splitting out the > commits back to the subproject, --unannotate removes the specified > string (or bash glob pattern) from the beginning of the first line of > the commit message. This enables the following workflow: > > - Commit to a library included in a large project, with message: > Library: Make some amazing change > > - Use `git-subtree split` to send this change to the library maintainer > > - Pass ` --unannotate='Library: ' ` or ` --unannotate='*: ' ` > > - This will turn the commit message for the library project into: > Make some amazing change > > This helps to keep the commit messages meaningful in both the large > project and the library project. > > Signed-off-by: James Nylen <jnylen@xxxxxxxxx> > --- Has anybody looked at this? It has been very useful for me. > Let me know if gmail has munged this patch. You can also get at it > like this: > > $ git remote add nylen git://github.com/nylen/git.git > $ git fetch nylen > $ git show nylen/subtree-unannotate > --- > contrib/subtree/git-subtree.sh | 11 +++++++++-- > contrib/subtree/git-subtree.txt | 15 +++++++++++++++ > 2 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh > index 920c664..8d1ed05 100755 > --- a/contrib/subtree/git-subtree.sh > +++ b/contrib/subtree/git-subtree.sh > @@ -21,6 +21,7 @@ P,prefix= the name of the subdir to split out > m,message= use the given message as the commit message for the merge commit > options for 'split' > annotate= add a prefix to commit message of new commits > +unannotate= remove a prefix from new commit messages (supports bash globbing) > b,branch= create a new branch from the split subtree > ignore-joins ignore prior --rejoin commits > onto= try connecting new tree to an existing one > @@ -43,6 +44,7 @@ onto= > rejoin= > ignore_joins= > annotate= > +unannotate= > squash= > message= > > @@ -80,6 +82,8 @@ while [ $# -gt 0 ]; do > -d) debug=1 ;; > --annotate) annotate="$1"; shift ;; > --no-annotate) annotate= ;; > + --unannotate) unannotate="$1"; shift ;; > + --no-unannotate) unannotate= ;; > -b) branch="$1"; shift ;; > -P) prefix="$1"; shift ;; > -m) message="$1"; shift ;; > @@ -310,8 +314,11 @@ copy_commit() > GIT_COMMITTER_NAME \ > GIT_COMMITTER_EMAIL \ > GIT_COMMITTER_DATE > - (echo -n "$annotate"; cat ) | > - git commit-tree "$2" $3 # reads the rest of stdin > + ( > + read FIRST_LINE > + echo "$annotate${FIRST_LINE#$unannotate}" > + cat # reads the rest of stdin > + ) | git commit-tree "$2" $3 > ) || die "Can't copy commit $1" > } > > diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt > index 0c44fda..ae420aa 100644 > --- a/contrib/subtree/git-subtree.txt > +++ b/contrib/subtree/git-subtree.txt > @@ -198,6 +198,21 @@ OPTIONS FOR split > git subtree tries to make it work anyway, particularly > if you use --rejoin, but it may not always be effective. > > +--unannotate=<annotation>:: > + This option is only valid for the split command. > + > + When generating synthetic history, try to remove the prefix > + <annotation> from each commit message (using bash's "strip > + shortest match from beginning" command, which supports > + globbing). This makes sense if you format library commits > + like "library: Change something or other" when you're working > + in your project's repository, but you want to remove this > + prefix when pushing back to the library's upstream repository. > + (In this case --unannotate='*: ' would work well.) > + > + Like --annotate, you need to use the same <annotation> > + whenever you split, or you may run into problems. > + > -b <branch>:: > --branch=<branch>:: > This option is only valid for the split command. > -- > 1.7.11.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html