如何将两个 git 分支推送到单独的 svn 存储库?特别是使用 sourcetree

How to push two git branches to seperate svn repositories? Especially using sourcetree

我有一个本地 git 存储库,它用

初始化
git svn init http://abc.xxx/svn/trunk/topic_A

然后我在本地创建了一个分支topic_B,想放到svn下URLhttp://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分支。

而且似乎没有办法改变颠覆的推送目的地。

谁能想出正确的方法?非常感谢!

您只需将 [svn-remote "topic_B"] 重命名为其他名称,这样就不会发生冲突。

And it seems there is noway you can change the push destination of subversion.

另一种选择是通过命令行而不是配置文件来设置它:

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

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

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

  1. git 按照@CodeWizard 的说明配置 svn-remote;
  2. git svn fetch topic_B
  3. 使用 git branch 在当前分支上创建新分支 分支 ;
  4. 将当前分支重新设置为 topic_B;
  5. git svn dcommit。而这次它将被推送到正确的 svn URL.

这只是一个简单的想法演示。实际问题总是比这更复杂。例如,当topic_B不创建为空目录时,作为SVN的习惯,往往是将trunk复制到branches/topic_B目录下。而且 rebase 过程会很有趣。

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