Git-svn merge 和提交分支

标签 git git-svn

我最近一直在使用 git-svn 通过 git 管理旧的 svn 存储库。

我最近在我创建的一个分支中工作,如下所示:
git checkout -b local-branch svn-branch

此后我一直在该分支工作并使用以下方式提交回 svn 分支:
git svn dcommit

现在是时候将本地分支 merge 回主分支了,我尝试执行以下操作:
git checkout master
git merge local-branch

到目前为止,一切都很好。现在我想将 merge 提交回 subversion,所以我尝试这样做:
git svn dcommit

但是,现在我的主人正在提交回 svn-branch 分支,而不是我所期望的主干。有什么我错过的吗,或者这种 merge 不建议像这样在 svn 分支之间 merge ?

作为旁注,我改为通过 svn 进行 merge ,但我想尽可能避免使用 svn。处理这个问题的首选方法是什么?

最佳答案

git svn dcommit 始终将更改发送到 git-svn-id 签名中指定的 url,该签名是 HEAD 历史记录中第一父提交链的最新版本。

我想,您的 merge 是快进的(即可以从 local-branch/svn-branch 访问主引用),因此它只是通过“git merge”设置为 local-branch,而不是 merge 提交创建。

建议始终使用 --no-ff 选项和“git merge”,因为 Subversion 没有快进 merge 这样的概念。 (您可以在 config 中将此选项 (merge.ff=true) 设置为默认值 [ 或将 branch.master.mergeoptions 设置为 Git 的“--no-ff” < 1.7.6] 但请注意,如果您使用超过 1 个 Remote ,“git pull”也将变得非快进)

为了避免 SVN 和/或 git-svn:如果您有权访问存储库服务器,您可以查看 SubGit为 Subversion 提供纯 Git(不是 git-svn)接口(interface)的项目。即使在 SubGit 的情况下,也强烈建议使用 --no-ff 选项,因为快进 merge (和快进 rebase )无法与另一个提交的分支删除和重新创建区分开来(对于任何 Git<->SVN 翻译都是如此)工具)。

但也许任何其他原因(我不知道任何其他原因)导致最新提交消息中带有分支 URL(而不是主干 URL)的“git-svn-id”。无论如何,请确保 master 指向正确的提交。

关于Git-svn merge 和提交分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605767/

相关文章:

java - Playframework 2 - 部署到 ec2

bash - 使用 git-svn 时模拟 subwcrev

Git-SVN clone 这个什么时候结束?

git - 自动修复相同消息和作者(完整存储库)的连续提交

git - git中40个字符的唯一标识是怎么生成的?为什么它是独一无二的?

node.js - 如何将在 node_modules 中所做的更改提交回 git?

git - 如何找到指向 git 树对象的提交?

svn - 将非标准 svn 转换为 git

git - 在 svn + SASL 上使用 git-svn 加密

git - 如何使用 git-svn 重新获取新指定分支的修订版