为什么git日志--cherry pick这么慢?

为什么git日志--cherry pick这么慢?,git,performance,git-cherry-pick,Git,Performance,Git Cherry Pick,我想获得两个给定标记之间的更改,命令是: git log `Tag1...Tag2 --cherry-pick --no-merges --right-only 但是它非常慢 我分别逐个测试参数。只有当使用--cherry pick时,git日志速度非常慢 为什么??有人能帮我吗 --樱桃采摘 当提交集受到对称差异的限制时,忽略任何在“另一端”引入与另一个提交相同更改的提交 例如,如果您有两个分支,A和B,那么只在它们的一侧列出所有提交的常用方法是--left-right(请参见 --lef

我想获得两个给定标记之间的更改,命令是:

git log `Tag1...Tag2 --cherry-pick  --no-merges --right-only
但是它非常慢

我分别逐个测试参数。只有当使用
--cherry pick
时,git日志速度非常慢

为什么??有人能帮我吗

--樱桃采摘
当提交集受到对称差异的限制时,忽略任何在“另一端”引入与另一个提交相同更改的提交

例如,如果您有两个分支,A和B,那么只在它们的一侧列出所有提交的常用方法是--left-right(请参见 --left-right选项的说明)。但是,它显示了从另一个分支(例如,“b上的第三个”可能是 从树枝上摘下的樱桃。使用此选项,这些提交对将从输出中排除

它必须比较所有提交以寻找相似性-与根本不必进行任何比较相比,这将是一个非常缓慢的操作。

我一直在使用

git log tag1 --not tag2

这给了我tag1上的所有提交,而不是tag2上的所有提交。对于分支和标记也可以很好地工作。

樱桃采摘可能不会那么快,因为它可能会检测到重命名作为合并的一部分,这可能会很昂贵,特别是当你在樱桃采摘远离头部的东西时

可能是您的git配置有
gc.auto=0
git config--get gc.auto
),所以请仔细检查它是否已启用,或者只是运行:

git gc
以清理不必要的文件并优化本地存储库

您还可以尝试将
merge.renamelimit
config变量设置为更小的值(例如,1,因为0表示没有限制)。如果这样做没有帮助,请尝试分析您的git(例如,使用
strace
perf record git cherry pick…
)并找到瓶颈

见:

对于merge recursive,我们总是希望按对计算 在每一侧和祖先之间重命名。所以这与 樱桃采摘的目的地总是一个昂贵的地方 源操作和目标操作之间的更改

如果没有重命名,使用 三路树行。例如,您看到某个子树位于中的树A处
我们的
祖先的
树,但在
他们的
中的树B上。所以你不知道 不得不进一步下降,只能说“拿走他们的”(好吧,你有 下降
他们的
以获取值)。但我希望它能得到更多 与索引的交互作用复杂(可能不是 无论如何,由于重命名问题,值得花费大量精力)

-皮夫


谢谢你的回复,没错。我看到这页了。然而,正如它所说的,我们计划省略出现在其他分支上的更改。我们有其他的方法来代替这个吗?如果你使用merge而不是cherry pick,你可以在没有所有开销的情况下完成这个。是的,我知道,但是问题代码库不是我们的工作,我们只是获取更改来分析某个组件的质量。我们无法控制软件开发人员的行为。有点混乱。我已经把回购协议拉到了本地,上面的命令也在本地运行。你的意思是什么?对不起,我没赶上你。是的,他们来自同一个地方。