合并两个git存储库历史记录

mpl*_*ork 5 svn git cvs

我想将cvs和svn存储库组合成一个新的git仓库,当然不会丢失历史记录.捕获的是svn repo是历史上cvs repo的直接延续.有人刚刚创建了svn repo并且笨拙地从cvs添加了最后一个状态而没有保留任何历史记录.最近的消息来源是svn.我不想保留旧的回购.

图形历史:

CVS: A - B - C
SVN: D - E - F - G
Run Code Online (Sandbox Code Playgroud)

我想要的是:

GIT: A - B - C - D - E - F - G
Run Code Online (Sandbox Code Playgroud)

我用cvs2git用cvs制作了一个git repo,用svn制作了另一个git repo,git svn clone如http://john.albin.net/git/convert-subversion-to-git所述,但是无法弄清楚如何组合二.我这样做了:

git clone cvs.git
cd cvs
git remote add svn ../../svn.git
git fetch svn
Run Code Online (Sandbox Code Playgroud)

怎么办?git merge -s ours svn/master似乎做我想要的但不创建线性历史:

A - B - C - - - H'
               /
D - E - F - G /
Run Code Online (Sandbox Code Playgroud)

任何实验都git rebase没有把我带到任何地方.

kan*_*kan 5

使用.git/info/grafts连接历史,然后git filter-branch使其永久化.有一些描述如何有人这样做:http://bugsquash.blogspot.co.uk/2010/03/stitching-git-histories.html