我想给定的两个标记之间的变化,该命令是:为什么git log --cherry pick太慢了?
git log `Tag1...Tag2 --cherry-pick --no-merges --right-only
但它是非常缓慢的。
我分别逐个测试参数。只有当与--cherry-pick
,git日志是非常缓慢的。
为什么?有人可以帮助我吗?
我想给定的两个标记之间的变化,该命令是:为什么git log --cherry pick太慢了?
git log `Tag1...Tag2 --cherry-pick --no-merges --right-only
但它是非常缓慢的。
我分别逐个测试参数。只有当与--cherry-pick
,git日志是非常缓慢的。
为什么?有人可以帮助我吗?
--cherry-挑
省略任何承诺,介绍作为另一提交的“另一侧”当设定提交的与对称差限定的相同变化。例如,如果您有两个分支A和B,则通常只列出所有提交中的一个提交的方式是 - 左右对齐(请参阅下面的示例中的 描述 - 左右选项)。然而,它显示了从其他分支樱桃挑选的提交(例如,“分支B的第3条”可能是从分支A挑选的 )。使用这个选项,这样的提交对将从输出中排除。
它必须比较所有提交寻找相似之处 - 这将是一个非常缓慢的操作,而不必做任何比较。
我一直在使用
git log tag1 --not tag2
这使我对TAG1所有提交不上TAG2。也适用于分支和标签。
樱桃采摘可能不是那么快,因为它可能检测到重命名作为合并的一部分,这可能是昂贵的,特别是当你正在樱桃采摘远离HEAD的东西时。
这可能是你的混帐配置有gc.auto = 0
(git config --get gc.auto
),所以要仔细检查它的启用,或只是运行:
git gc
为了清理不必要的文件和优化本地资源库。
您也可以尝试将merge.renamelimit
配置变量设置为较小的值(例如1,因为0意味着无限制)。如果这不起作用,请尝试对你的git进行分析(例如使用strace
或perf record git cherry-pick ...
)并找出瓶颈。
对于合并递归,我们总是要计算成对 每边和祖先之间的重命名。所以差异到 樱桃挑选目的地总是将是一个昂贵的O( 源和目标之间的变化#操作)。
没有重命名,你可以做更好的实际合并与 三向树步行。例如,你看到一些子树在 的树A中,
ours
和ancestor
树,但是在树B中的theirs
。所以你不必 不得不进一步下降,并可以只是说“拿他们”(嗯,你有 下降theirs
获得值)。但我预计它会让更多的 与指数之间的互动变得复杂(并且可能不是 值得花费很多努力,因为重命名问题,无论如何)。-Peff
感谢您的答复,这是正确的。我看到这个手册页。不过,正如它所说的,我们打算省略其他分支上出现的变化。我们有其他方法而不是这个吗? –
如果您使用合并而不是樱桃挑选,您可以做到这一点没有所有的开销。 – Michael
是的,我知道,但问题代码库不是我们的工作,我们只是获取更改以分析某个组件的质量。我们无法控制sw开发者的行为。 –