在我做了 git svn clone --stdlayout ... 之后,一切看起来都很好,我已经转换了远程分支。但是当 git log --graph 时,我没有看到任何分支 merge 图。正常吗? 最佳答案 自 2008 年夏天发布的 1.5.0 版以来,Subversion 确实支持 merge 跟踪。 Subversion 将执行 merge 的信息作为 svn:mergeinfo 属性设置在 merge 目标上,无论是分支目录,如 ^/trunk/,还是任何其他目录。Git 和 Subversion 中的 merge 跟踪机制之间存在主要差异: 整个分支 merge 。当你在 master 分支上时,命令$ git merge some-branch导致 merge 提交,其第一个父项设置为 master 引用的提交,第二个父项设置为 some-branch 引用的提交(我在这里不考虑快进和冲突 merge )。对于 git 来说,这意味着创建的 merge 提交包括 整个历史记录 的 master 和 some-branch。当您 check out ^/trunk/分支到 svn 工作副本然后运行$ svn merge ^/branches/some-branch trunk-working-copySubversion 将在 trunk-working-copy 目录中设置 svn:mergeinfo 属性,如下所示:/branches/some-branch:10-20,30-40,50-60范围 10-20,30-40,50-60 包括那些尚未从 ^/branches/some-branch/ merge 到 ^/trunk/分支的修订版(Subversion 会自动检测它们)。Mergeinfo 属性仅指定曾经 merge 到分支中的那些修订。并且由用户检查所有这些 merge 的修订是否包含 分支的整个历史记录 。 cherry-pick merge 。当您需要将来自单个提交的更改 merge 到您的主分支时,您可以运行$ git cherry-pick bc347a8之后 git 创建一个带有相应更改的提交,并将单个父级设置为先前由 master 分支引用的提交。也就是说,git 不会为cherry-pick 创建任何类型的 merge 提交。因此,git 无法通过其图形结构跟踪精选提交。与 Subversion 相对的是通过调整 svn:mergeinfo 属性来跟踪cherry-pick merge :$ svn merge -c100 ^/branches/some-branch trunk-working-copy这个命令非常简单,它调整 svn:mergeinfo 如下:/branches/some-branch:100这意味着 Subversion 会跟踪挑选 merge 。 因此,您在翻译后不会收到 merge 提交。据我所知,git-svn 在 merge 历史记录方面存在某些问题。但是作为 subgit 开发人员,我不得不说 subgit 应该正确处理 merge 跟踪信息。很可能在您的分支上设置的 svn:mergeinfo 属性不包括 merge 到它们的分支的整个历史记录 。这是如何发生的: 您使用了旧的 svn 客户端 ( 您已经进行了挑选并跳过了一些修订范围,将其添加到 svn:mergeinfo 中。 您在不是分支目录的目录上设置了 svn:mergeinfo,即它们不是 ^/trunk/、^/branches/some-branch 等(对于标准布局)。 要解决此问题,您必须找到 merge 跟踪信息的跳过部分并将其添加到您的分支中: 尝试查找尚未 merge 的修订版:$ svn mergeinfo --show-revs eligible ^/branches/some-branch/@HEAD ^/trunk/@HEAD输出必须包括您尚未从 ^/branches/some-branch/ merge 到 ^/trunk/的所有修订。 尝试通过 svn merge 尚未 merge 的修订。 如果您认为所有更改都已 merge ,请使用 svn merge 命令的 --record-only 选项; 如果您不太确定,最好执行正常的 svn merge ,这将应用所有丢失的更改。 使用 subgit,您还可以通过 git 方式进行 merge ,然后将创建的 merge 提交推送到 subgit 支持的存储库,因此它将使用正确的 svn:mergeinfo 将这些 merge 提交转换为 svn 修订版。 作为一个不错的奖励,您可以引用与 merge 跟踪相关的 SubGit specification,它有一些漂亮的图表,用于我上面所说的所有内容。关于git - 在 "git svn clone"之后,我仍然没有出色的分支 merge 提交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8261112/
10-15 05:22