2012-11-17 283 views
3

谷歌整整一天之后,我将不得不请专家来帮助我。把两个git仓库合并成一个有两个分支的仓库

我克隆了一些我转换为git的公共SVN回购。这个回购只有一个主分支,它从一些特定的版本开始,比如说1.0。

我也有一个独立创建的git仓库,并且从1.0版本开始。我创建这个是因为我想破解一些公共项目。我刚刚下载了源代码,创建了空的git repo,添加了1.0版本并着手对它进行破解。这个回购也只是主分店。

现在,我会撒谎创建第三个git仓库,其中版本1.0将作为起点,它将有两个分支:'svn'和'mystuff'。我想保留两个分支的历史。

 1.0 
    / \ 
    / \ 
br. svn br. mystuff 
    |  | 
    v1.1  v1.1' 
    v1.2  v1.2' 
    v1.3  v1.3' 
    .   . 
    .   . 

如果我有这个,我可以使用svn2git很容易地从SVN回购新的修订版本,并轻松地与我的地方“的MyStuff”分支合并。我不需要推送到SVN回购,只需从它获取新的修订版。

你能帮我再次使用git乐趣吗?

回答

2

那种 - 哈克的,方法是使用git format-patch到回购的所有提交导出到一个目录,git checkout对方的回购1.0分支,创建一个新的分支(git checkout -b new-branch),然后git am您以前生成的补丁。

因此,我们打电话给public您的公共SVN回购克隆,以及local您通过下载源代码和黑客入侵的git回购。

cd local 
mkdir ../patches 

# -o tells the output directory for the patches 
# the git log ... gives you the hash of the second commit of the repo (the first one 
# changes are already present in your 'public' repo 
git format-patch -o ../patches/ $(git log --pretty=format:%H | head -n-1 | tail -1) 

cd ../public 
git checkout -b mystuff 1.0 
# Apply patches 
git am ../patches/* 
+0

谢谢。这听起来像是我的问题的完美解决方案,但我一直得到这个错误:**已经存在索引 补丁失败在0001初始提交** 我得到这个项目的每个文件。提供** git format-patch **和** git am **的工作示例会给蜜蜂带来多大麻烦吗? – user1832156

+1

@ user1832156我想你可能不得不忽略第一次提交,因为该提交与你的'1.0'分支已经拥有的树一样。我更新了答案,试着这样做。 – mgarciaisaia

+0

非常感谢您的帮助。我希望这对其他人有用。我得到这么多*补丁不适用*错误,我终于放弃了。我甚至手动提交了第一次提交从我的本地回购,并调整您的示例从第二次提交开始,我仍然得到*补丁不适用*。既然这花了太多时间,我放弃了。但一般来说,你的答案是正确的。 – user1832156