我想将cvs和svn存储库合并到一个新的git仓库中,当然不会丢失历史记录。捕获的是svn repo是历史上cvs repo的直接延续。有人刚刚创建了svn repo并且笨拙地从cvs添加了最后一个状态而没有保留任何历史记录。最近的消息来源是svn。我不想保留旧的回购。
图形历史:
CVS: A - B - C
SVN: D - E - F - G
我想要的是什么:
GIT: A - B - C - D - E - F - G
我使用cvs2git从cvs创建了一个git repo,并在http://john.albin.net/git/convert-subversion-to-git中使用git svn clone
从svn创建了另一个git repo,但是却无法弄清楚如何将两者结合起来。我这样做了:
git clone cvs.git
cd cvs
git remote add svn ../../svn.git
git fetch svn
现在怎样? git merge -s ours svn/master
似乎做了我想做的事,但没有创建线性历史记录:
A - B - C - - - H'
/
D - E - F - G /
git rebase
的任何实验都没有让我到处找。
答案 0 :(得分:5)
使用.git/info/grafts
连接历史记录,然后git filter-branch
使其永久化。
有一些描述是如何做到的:http://bugsquash.blogspot.co.uk/2010/03/stitching-git-histories.html
答案 1 :(得分:2)
使用kan所写的内容,我提出了这个解决方案:
git clone cvs.git
cd cvs
git remote add svn ../../svn.git
git fetch svn
使用git log --all
查找未连接的历史记录:
...
|
* ab42f52 2011-09-14 06:03:07 +0000 | [svnuser]
|
* 1985b93 2011-09-14 06:00:00 +0000 | Migration from CVS [svnuser]
* 12e0ed4 2011-09-14 05:58:10 +0000 | *** empty log message *** (HEAD, origin/master, origin/HEAD, master) [cvsuser]
|
* 5060a7f 2011-04-18 14:07:03 +0000 | *** empty log message *** [cvsuser]
|
...
找到完整的SHA1:
git show 1985b93
git show 12e0ed4
创建移植物:
echo 1985b9305ebc819e760f7ecf8e2abe7963eac055 12e0ed4c3dd75cec396a2d228825702eab73ba19 > .git/info/grafts
现在历史已经连接但尚未永久:
|
* ab42f52 2011-09-14 06:03:07 +0000 | [svnuser]
|
* 1985b93 2011-09-14 06:00:00 +0000 | Migration from CVS (grafted) [svnuser]
|
* 12e0ed4 2011-09-14 05:58:10 +0000 | *** empty log message *** (HEAD, origin/master, origin/HEAD, master) [cvsuser]
|
* 5060a7f 2011-04-18 14:07:03 +0000 | *** empty log message *** [cvsuser]
|
将其永久化,如http://bugsquash.blogspot.co.uk/2010/03/stitching-git-histories.html:
所示git branch svnmaster svn/master
git filter-branch -- 12e0ed4c3dd75cec396a2d228825702eab73ba19..svnmaster
这会创建新的提交,但也会保留原始的svn提交。 git log --all
会显示出来:
* 849278b 2013-04-15 16:31:44 +0000 | Java 6 in Eclipse. Deployed. (svnmaster) [svnuser]
|
...
|
* c33f7cc 2011-09-14 06:03:07 +0000 | [svnuser]
|
* 7acb3ed 2011-09-14 06:00:00 +0000 | Migration from CVS [svnuser]
|
| * b3d5413 2013-04-15 16:31:44 +0000 | Java 6 in Eclipse. Deployed. (svn/master, refs/original/refs/heads/svnmaster) [svnuser]
| |
...
| |
| * ab42f52 2011-09-14 06:03:07 +0000 | [svnuser]
| |
| * 1985b93 2011-09-14 06:00:00 +0000 | Migration from CVS (grafted) [svnuser]
|/
|
* 12e0ed4 2011-09-14 05:58:10 +0000 | *** empty log message *** (HEAD, origin/master, origin/HEAD, master) [cvsuser]
|
* 5060a7f 2011-04-18 14:07:03 +0000 | *** empty log message *** [cvsuser]
|
移除移植物,重复的历史记录将消失:
rm -r .git/info/grafts .git/refs/original
清理:
git reset --hard svnmaster
git branch -D svnmaster
推动:
git push
全部完成!