git-svn : keeping git repo and svn repo in sync

标签 git svn synchronization

我们有一个新的 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 仓库主要有两个分支:mastersvnmaster 与远程裸 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 将提交应用到我的远程。

要获取从mastersvn 的更改,我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/

相关文章:

git - git reset –hard head`和`git clean –force -d`vs`git checkout —之间有什么区别,以放弃本地更改。

git - 在 PowerShell 中将 curl REST 调用转换为 Invoke-RestMethod

git - 如何创建分支并推送到服务器

svn - 颠覆: why "mixed revisions" when revision numbers are sequential?

linux - 使用 Jenkins 进行 Selenium 测试

file - 唯一标识 NTFS 中的文件/文件夹,即使在移动/重命名之后

synchronization - GPU 上的高效桶排序

git - 新 git 存储库的默认配置设置?

svn - 将 SVN 工作目录的闪存驱动器副本转换为正确的工作目录?

java - 显示 Java 中与 2 个线程同步的用法