git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git-svn merge helper
@ 2007-09-30 11:05 Björn Steinbrink
  2007-09-30 14:15 ` Benoit SIGOURE
  0 siblings, 1 reply; 10+ messages in thread
From: Björn Steinbrink @ 2007-09-30 11:05 UTC (permalink / raw)
  To: git

Hi,

I recently discovered git-svn and absolutey love it. One thing that I'm
missing though, is an equivalent of "svn merge" for merging between svn
remotes, to support the SVN way of using "squashed" merges, where you
just note the merge meta-data in the commit message. "git merge" didn't
work for me (and probably isn't expected to work) to merge between two
svn branches, so I've resorted to cherry-picking the required commits
one by one into a temporary branch and then squashing them together by
doing a --squash merge with a second temporary branch (as in [1]).

Of course that becomes extremely annoying if there are like 200
commits to merge, so I came up with the following script to help me.
It does just what I described above, but automated. Usage is like this:

git-svn-merge trunk 123 543

Which does the same as "svn merge -r123:543 trunk-url", except for being
incremental (ie. no huge one-time patch, eventually causing a massive
set of conflicts) and often faster.

In case of conflicts, it bails out and let's you fix them. Then you can
just re-run it with the same parameters again, as it automatically
determines where to start cherry-picking if you're currently on the
merge branch.

It's neither complete nor nice to look at, but it more or less gets the
job done, so I thought I'll just post it here, maybe someone picks it up
and brings it into shape.

Thanks,
Björn

[1] http://cheat.errtheblog.com/s/gitsvn/


#!/bin/sh

BRANCH=$(git branch | grep \* | cut -d ' ' -f2)

START=$(git svn find-rev r$2 $1)
END=$(git svn find-rev r$3 $1)

if echo $BRANCH | grep -q svnmerge/
then
	START=$(git svn find-rev r$(git svn find-rev HEAD) $1)
else
	git checkout -b svnmerge/$BRANCH
fi

for HASH in $(git log --pretty=format:%H --reverse $START..$END)
do
	git cherry-pick $HASH || exit
done

git checkout $BRANCH
git checkout -b svnmerge/$BRANCH-squashed
git merge --squash svnmerge/$BRANCH
git commit -m "Merged changes from revisions $2-$3 from $1 into $BRANCH."

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2007-10-03 11:40 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-30 11:05 git-svn merge helper Björn Steinbrink
2007-09-30 14:15 ` Benoit SIGOURE
2007-10-01  2:50   ` Björn Steinbrink
2007-10-01  7:56     ` Benoit SIGOURE
     [not found]       ` <8c5c35580710010113v7d4ad14bt129b7cb12d8f4fb8@mail.gmail.com>
2007-10-02 21:14         ` Björn Steinbrink
2007-10-02 22:04           ` Steven Walter
2007-10-02 22:38             ` Björn Steinbrink
2007-10-03  0:42               ` Steven Walter
2007-10-03  1:02                 ` Björn Steinbrink
2007-10-03 11:40                   ` Andreas Ericsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).