2

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

我最近一直在这样创建的分支中工作:
git checkout -b local-branch svn-branch

从那以后,我一直在该分支中工作并使用以下命令返回 svn-branch:
git svn dcommit

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

到目前为止,一切都很好。现在我想将合并提交回颠覆,所以我试试这个:
git svn dcommit

然而,现在我的主人正在返回 svn-branch 分支,而不是我预期的主干。有没有我错过的东西或者这种合并只是不建议在像这样的 svn 分支之间合并?

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

4

1 回答 1

3

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

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

建议始终使用 --no-ff 选项和“git merge”,因为 Subversion 没有快进合并这样的概念。(您可以merge.ff=true配置branch.master.mergeoptions将此选项(偏僻的)

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

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

于 2012-09-26T16:28:03.303 回答