2

给定一个存储库结构:

o-o-o-o-o-<several hundreds of commits>-o-o-C-o-o master
                                           /
                                          c (files moved to a subdirectory)
                                         /
a-a-a-<several tens of commits>-a-a-a-a-A-b-b-b-b tools

这是一个多根存储库,“master”行上的所有提交都表明第一个父级位于该分支上,同样,“tools”上的所有提交都有其第一个父级跟随工具分支。

提交“c”是为了让合并提交“C”变得微不足道,以便布局与 master 的布局匹配。

为什么 'git cherry -v master tools 需要这么长时间?

编辑:

我的本地测试指的是错误的分支(我使用了错误的名称),但是 git cherry 仍然非常慢。

4

1 回答 1

2

git cherry命令从分叉点开始比较

$ git cherry -v tools master

           __*__*__*__*__> <tools>
          /
fork-point
          \__+__+__-__+__+__-__+__> <master>

我们可以通过如下指定<limit>参数来避免这种情况git cherry

$ git cherry -v tools master <limit>

           __*__*__*__*__> <tools>
          /
fork-point
          \__*__*__<limit>__-__+__> <master>

现在分支上的所有提交都被忽略了;从而使git cherry命令能够更快地完成。


为什么?

通过手册页,git cherry我们可以注意到以下内容:

因为 git cherry 比较的是变更集而不是提交 id (sha1),所以您可以使用 git cherry 来确定您在本地进行的提交是否已在不同的提交 id 下应用。例如,如果您通过电子邮件提供补丁而不是直接推送或拉取提交,就会发生这种情况。

本质上,这意味着git cherry不只是比较 commit-ids 的哈希值,而是比较整个 changeset/diffs/commits。这是看起来花费大量时间的主要原因(与其他类似git命令相比)。

于 2013-08-13T07:14:48.747 回答