我终于发现了使用 Git 处理 SVN 分支需要做什么。我已经尝试过下面提到的东西(除了我指定的地方),所以我相当有信心,只要我不做任何有趣或不合时宜的事情,我从 Git 到 SVN 的提交应该可以正常工作。但当然我对可能发生的任何问题不承担任何责任!我愿意接受进一步的评论/评论。
即使我不使用标准布局克隆 SVN 存储库,我也应该配置指向 subversion 上相关 SVN 路径的遥控器。
克隆一个 SVN 分支(SVN 路径应该指向包含主干、分支和标签的根路径):
git svn clone -s http://myrepo.com c:/my/local/path
如果您已经有一个 SVN 分支的克隆,您需要手动将遥控器添加到其他 SVN 分支,请查看以下内容:
重要的是您有一个跟踪远程分支的本地分支。
git checkout -b localbranch remotes/remote_branch
现在您可以提交该本地分支,并且每次完成后都可以像在主干中一样执行此操作:
git svn fetch
git svn dcommit
当您最终完成该 SVN 分支并希望合并到主干时,您可以执行以下操作(它从该分支获取所有内容并将其重新设置为 master):
git checkout master
git merge localbranch
git rebase -i trunk (just save the message)
git svn fetch
git svn dcommit
如果你愿意,你也可以只做一个壁球合并(如果你不想把所有这些小签到都带过来):
git merge --squash localbranch
git svn fetch
git svn dcommit
在执行真正的 DCOMMIT 之前,您可能会进行试运行以确保一切正常(包括目的地)。
git svn dcommit -dry-run
但是,如果您预计合并冲突(这是我在网上看到的,但我没有尝试过,我只是提到),请在git checkout master
上面显示的行之前执行以下操作。这是一个本地分支,它不跟踪应该用于解决合并冲突和东西的远程分支。这是否有必要是另一回事。
git checkout -b merge_work master
git merge localbranch
git checkout master
git rebase merge_work
我为自己和其他可能想在未来尝试这个的人写下来。