如何将Subversion提交到Git上游存储库中

时间:2017-03-03 08:21:00

标签: git svn version-control git-svn

以下是我的情景:

  • 上游 Git标记1.2已被用作没有git svn的空Subversion存储库中的第一次提交。文件已被复制并添加到Subversion trunk工作副本中。

  • 在Subversion中,
  • /trunk

  • 中提交了一小组变更集

我现在想使用原始上游(大型存储库)中的Git fork,并将这些Subversion更改集导入到从初始标记{{1}创建的功能分支中}。

Subversion存储库中没有分支或标记我有兴趣导入上游 Git存储库。

我对1.2的第一次试用未成功,因为分支创建为上游历史记录的共同祖先。我应该如何导入我的Subversion变更集才能在Git中运行合并呢?

3 个答案:

答案 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