为什么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,你可以在没有所有开销的情况下完成这个。是的,我知道,但是问题代码库不是我们的工作,我们只是获取更改来分析某个组件的质量。我们无法控制软件开发人员的行为。有点混乱。我已经把回购协议拉到了本地,上面的命令也在本地运行。你的意思是什么?对不起,我没赶上你。是的,他们来自同一个地方。