如何推送两个git分支来分离svn存储库?特别是使用sourcetree

时间:2016-03-31 00:57:50

标签: git git-svn sourcetree

我有一个用

初始化的本地git存储库
git svn init http://abc.xxx/svn/trunk/topic_A

然后我创建了一个本地分支topic_B,并希望将其放在svn URL http://abc.xxx/svn/branches/topic_B下。 svn分支是使用svn客户端创建的。 所以我不需要在git中创建svn分支。

我应该如何修改.git / config文件来添加它?

我尝试添加:

[svn-remote "topic_B"]
url = https://abc.xxx/branches/topic_B/
fetch = :refs/remotes/topic_B

[branch "topic_B"]
remote = .
merge = refs/remotes/topic_B

但是,当从控制台使用git时,git commit总是选择中继URL作为推送目的地?

在sourcetree中,GUI似乎很难获取新添加的远程svn分支。

现在看来你可以改变颠覆的推送目的地。

任何人都可以找到正确的方法吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以简单地将[svn-remote "topic_B"]重命名为其他名称,这样就不会发生冲突。

  

现在看来你可以改变颠覆的推送目的地。

另一种选择是将其设置为VIA命令行而不是配置文件:

git config --add svn-remote.topic_B.url ...
git config --add svn-remote.topic_B.fetch :refs/remotes/topic_B

这将生成与您的问题相同的输出。

答案 1 :(得分:0)

嗯,我认为这是答案,但仍然不是我的完整解决方案。而且我认为已经找到了一种方法来实现我实际上应该做的事情:

  1. git配置svn-remote为@CodeWizard说;
  2. git svn fetch topic_B;
  3. 使用git branch在当前创建新分支 分支
  4. 将当前分支转换为topic_B;
  5. git svn dcommit。这次将推送到正确的svn URL。
  6. 这只是一个简单的想法。实际问题总是比这更复杂。例如,当topic_B不是作为空目录创建时,作为SVN自定义,通常通过将trunk复制到branches / topic_B目录来完成。而且,变革过程会很糟糕。

    我认为这可以通过读取树或挑选樱桃或通过应用补丁来解决,例如如果只需要更改一个子目录或只有几个文件。但是,我对这些评论并不十分熟悉,如果有人可以对现有解决方案给予反思,那就太好了