我们有一个新的 git 存储库,它是从 svn 存储库中产生的。 git repo 现在是领先的存储库,将在其中进行进一步的开发。这个 repo 是一个托管的。 另一边的 svn repo 将作为非 git 用户的发布管道。 问题是,如何从 git 仓库不时更新 svn 仓库?我读了很多关于 git-svn 的文章,其中不应该使用 merge 等(参见 Is git-svn dcommit after merging in git dangerous? )。 但是 merge 会在 git 仓库中发生,我们不想通过奇怪的规则(比如“只允许 rebase”)限制 git 仓库中的开发。
所以问题很简单:他们是如何保持 svn 存储库与 git 存储库同步的最佳实践(比方说每两周一次)。是否有可能将更改从 svn 安全地重新传输到 git(以防万一必须对 svn 存储库应用紧急修复,所以这种情况很少发生)。
由于新的 git repo 是托管的,因此中间必须有一个 svn-git repo 作为中介。这个 repo 可用于将 git-merges “重新连接”到 git-rebases 左右。将所有中间 git 提交作为一个 blob 提交到 SVN 也很好。
最佳答案
我的设置略有不同:SVN 存储库不是从 Git 存储库克隆的。
我的 Git 仓库主要有两个分支:master
和 svn
。 master
与远程裸 Git 存储库同步,svn
链接到远程 SVN 存储库。
我使用 git cherry-pick
将提交从一侧应用到另一侧并且在 rebase 和 merge 方面没有问题。
我之前尝试将 master
merge 到 svn
中,但总是以无休止的冲突解决 session 结束。当只使用 cherry-pick 时,生活就容易多了。
要将 svn
提交到我的 master
中,我执行以下操作:
首先,让两个分支与其上游同步:
git checkout svn
git svn rebase
git checkout master
git pull
然后(在 master
上):
gitk svn
这会打开 gitk
窗口,我在其中选择要从 svn
传输到 master
的提交。然后,我使用 git push
将提交应用到我的远程。
要获取从master
到svn
的更改,我git checkout svn
然后启动gitk master
。我再次选择要传输的提交,完成后,git svn dcommit
将提交推送到 SVN 服务器。
简单无痛。
关于git-svn : keeping git repo and svn repo in sync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993783/