首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两个git存储库,一个git-cvs克隆,一个git-svn克隆。

合并两个git存储库,一个git-cvs克隆,一个git-svn克隆。
EN

Stack Overflow用户
提问于 2010-10-29 22:44:28
回答 2查看 486关注 0票数 2

我使用的代码来自CVS控制的存储库(@sourceforge)。我没有直接使用它,而是使用了别人制作的git克隆。在我的克隆中,我做了几处修改。

与此同时,上游项目已经切换到SVN (@googlecode)。我自己创建了一个自动更新的git克隆。

现在,我想将我之前对CVS/git的修改应用到SVN/git中。不幸的是,对于相同的提交,SHA是不同的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-31 13:37:03

假设您的补丁位于单个线性序列中,您可以使用"git format-patch""git am"轻松完成此操作。首先,将新的存储库切换到您的更改应该从中萌发的修订版本,并创建一个新分支来保存您的更改:

代码语言:javascript
复制
cd $NEWREPO
git checkout -b my-changes $SPROUT_POINT

然后使用"git format- R1..R2“导出您想要迁移的提交的范围补丁,并使用"git am”将它们应用到新的存储库中:

代码语言:javascript
复制
(cd $OLDREPO; git format-patch -k --stdout R1..R2) | (cd $NEWREPO; git am -k)

我建议首先将补丁应用到对应于CVS修订版的修订版,补丁最初是从CVS修订版中产生的,因为这样做应该会成功,没有任何冲突。然后,如果需要,在新的存储库中使用"git rebase"将提交移动到适当的Subversion分支的顶端。

票数 1
EN

Stack Overflow用户

发布于 2010-11-01 20:26:05

另一种选择是从您的CVS存储库中提取更改,并基于SVN存储库对其进行重新设置。就像这样(在svn repo中完成的所有操作)

代码语言:javascript
复制
git remote add cvs-repo /path/to/you/cvs/clone
git fetch cvs-repo
git checkout -b my-branch-with-changes cvs-repo/my-branch-with-changes
git rebase --onto ${SVN_UPSTREAM} ${CVS_UPSTREAM}

最后一个git rebase应该接受所有基于cvs-upstream的提交,并将它们“连接”到最后一个SVN。

在图形中:

代码语言:javascript
复制
cvs-repo: A -- B -- C -- D (last_cvs_commit) -- E -- F (your changes)

svn-repo: G -- H -- I -- J (last_svn_commit)

(其中A--B--C--D与G--H--I--J相同,只是散列不同

您使用您的更改签出分支,然后运行:

代码语言:javascript
复制
git rebase --onto J D

这会将情况更改为:

代码语言:javascript
复制
svn-repo: G -- H -- I -- J (last_svn_commit) -- E' -- F' (your changes, rebased)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4052919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档