1

我有一个 SVN 存储库,我使用 git-svn 签出,使用该--stdlayout选项(当时,存储库是空的)。

然后我在 master 分支上工作了一段时间。使用时git svn dcommit,它会 svn-commit 我的更改以https://my.host/repo/trunk使其符合预期。

在某些时候,我用 git 创建了一个名为“算术”的分支。后来我也想在 svn 中创建那个分支,所以我按照网站的建议做了 agit svn branch arithmetics然后 a 。git branch --set-upstream arithmetics remotes/arithmetics我想这是出了问题的地方,因为我收到了关于--set-upstream被弃用的警告。

调用时git svn dcommit,它会承诺https://my.host/repo/branches/arithmetics,到目前为止一切顺利。但后来我注意到,dcommit当我尝试将分支合并回 master 时,无论当前在 git 存储库中签出的分支如何,都会提交到该分支。

我什至尝试从 svn 创建一个新的克隆,将分支合并到那里的 master 中。我还尝试trunk使用 明确签出git checkout -b local/trunk remotes/trunk,然后将分支合并到其中,然后git svn dcommit. 它总是会再次提交到分支。

我怎样才能解决这个问题?

PS:git rebase正如我所读到的那样,我用于合并,合并提交对 git-svn 有问题,所以我没有这些。

4

1 回答 1

2

您不能将git 分支提交到 SVN 存储库,因为 Git 和 SVN 具有完全不同的分支概念。与 git 合并然后调用 dcommit 将线性化您的历史记录(与使用 rebase 非常相似),然后推送到当前签出的分支。

这是手册页中的重要部分git svn

合并跟踪
虽然 git svn 可以跟踪采用标准布局的存储库的复制历史记录(包括分支和标签),但它还不能将 git 内部发生的合并历史记录回上游给 SVN 用户。因此,建议用户在 git 中保持尽可能线性的历史记录,以简化与 SVN 的兼容性(请参阅下面的 CAVEATS 部分)。

此外,警告部分有一段专门针对您的问题:

不建议在您计划从其提交的分支上运行 git merge 或 git pull ,因为 Subversion 用户看不到您所做的任何合并。此外,如果您从作为 SVN 分支镜像的 git 分支合并或拉取,dcommit 可能会提交到错误的分支。

如果您进行合并,请注意以下规则: git svn dcommit 将尝试在名为 的 SVN 提交之上提交

git log --grep=^git-svn-id: --first-parent -1
于 2013-01-05T15:01:27.753 回答