以下是我的情景:
上游 Git标记1.2
已被用作没有git svn
的空Subversion存储库中的第一次提交。文件已被复制并添加到Subversion trunk
工作副本中。
在/trunk
我现在想使用原始上游(大型存储库)中的Git fork,并将这些Subversion更改集导入到从初始标记{{1}创建的功能分支中}。
Subversion存储库中没有分支或标记我有兴趣导入上游 Git存储库。
我对1.2
的第一次试用未成功,因为分支创建为上游历史记录的共同祖先。我应该如何导入我的Subversion变更集才能在Git中运行合并呢?
答案 0 :(得分:1)
我认为您在使用git svn
时所采取的措施是正确的
您可以使用--allow-unrelated-histories
作为参数对合并命令强制合并不相关的历史记录
或者您可以使用git cherry-pick
在Git标记之上重新应用新导入的提交。
答案 1 :(得分:0)
您可以先{strong} {strong>将svn迁移到git onCreateView
。然后你可以将新转换的git repo(假设master分支)合并到你的上游git repo master分支。合并步骤如下:
git svn clone <URL for svn repo>
要在rebase时自动解决冲突文件,您可以使用# 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
解决冲突文件。答案 2 :(得分:0)
为了记录,这是我有效做的详细程序。想法是在处理升级到最新版本之前首先检查自定义代码中的潜在冲突。
1)准备你的git存储库。灵感来自:Add a new subversion remote into existing Git repository
$ git clone UPSTREAM
在git-svn
.git/config
遥控器添加到存储库
[svn-remote "remote-trunk"]
url = SUBVERSION_TRUNK_FOLDER_URL
fetch = :refs/remotes/git-svn-remote-trunk
将转换运行到Git提交
$ git svn fetch --authors-prog=map_authors.sh remote-trunk
2)1.2
分支上的Rebase Subversion变更集:
$ 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
*)Vampire的更快替代方法是直接与基于标记的分支合并或直接合并到最新的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