这是我的场景:
-
a 上游 git标签
1.2
已被用作没有git svn
的空subversion存储库中的第一个提交。文件已被复制并添加到Subversiontrunk
工作副本中。 -
在颠覆中,
/trunk
中已经提交了一小部分更改集
我现在想使用原始上游(大存储库)中的git叉,并将这些颠覆更改集导入从初始标签1.2
创建的A feature 分支中。p> subversion存储库中没有分支或标签,我有兴趣将导入到上游 git存储库中。
我对git-svn
的第一次试验并没有成功,因为该分支没有用上游历史记录的共同祖先创建。那我应该如何导入颠覆变更集以便能够在git中进行合并?
我认为您对使用git svn
的看法在这里可以。
您可以将无关历史的合并与使用--allow-unrelated-histories
作为Merge命令的参数。
或者,您只需使用git cherry-pick
重新申请您的新导入的提交在git标签之上。
您可以首先通过 git svn clone <URL for svn repo>
将SVN迁移到git 。然后,您可以将新的转换后的Git Repo(假设主分支)合并到上游Git Repo Master Branch 中。合并步骤如下:
# in your upstream git repo
git remote add new <path for the new converted git repo>
git fetch new
git checkout master
git rebase master new/master
git checkout -b temp
git checkout master
git merge temp
为了自动解决冲突文件,您可以使用-X
选项:
- 使用主版本
git rebase master new/master -X ours
。
解决冲突文件 - 使用新/主版本
git rebase master new/master -X theirs
。
解决冲突文件
在记录中,这是我有效地完成的详细过程。想法是在处理最新升级之前先检查自定义代码的潜在冲突。
1)准备您的git存储库。灵感来自:在现有的git存储库中添加一个新的颠覆遥控器
$ git clone UPSTREAM
在.git/config
git-svn
遥控器中的遥控器 [svn-remote "remote-trunk"]
url = SUBVERSION_TRUNK_FOLDER_URL
fetch = :refs/remotes/git-svn-remote-trunk
运行转换为git consits
$ git svn fetch --authors-prog=map_authors.sh remote-trunk
2)1.2
分支上的颠覆变化:
$ git branch custom-v1.2 v1.2
$ git checkout -b custom-trunk remotes/git-svn-remote-trunk
$ git rebase custom-v1.2
预计第一个重新命名的提交是空的,必须用git rebase --skip
确认。
在现实生活中,我对几个我必须还原为原始文件以避免以后的冲突的终结不匹配。
在几乎没有git rebase --continue
的情况下,如果需要解决冲突,现在可以将自定义代码集成到最新的主体中:
$ git checkout -b custom-master origin/master
$ git merge custom-trunk
*)吸血鬼的更快替代方法是直接与基于标签的分支合并,或直接与最新的origin/master
$ git checkout -b custom-v1.2 v1.2
$ git merge --allow-unrelated-histories remotes/git-svn-custom-trunk
$ git checkout -b custom-master origin/master
$ git merge custom-v1.2