我想获得两个给定标签之间的更改,命令是:
git log `Tag1...Tag2 --cherry-pick --no-merges --right-only
但速度很慢。
我逐个测试参数。只有当--cherry-pick
时,git log非常慢。
为什么呢?有人可以帮助我吗?
答案 0 :(得分:1)
- 樱桃挑选
当提交集受限于对称差异时,省略任何引用与“另一方”上的另一个提交相同的更改的提交。例如,如果您有两个分支A和B,通常只在一侧列出所有提交的方法是--left-right(请参阅下面的示例) --left-right选项的描述)。然而,它显示了从另一个分支中挑选出来的提交(例如,“b上的第3个”可能是 樱桃采摘从分支A)。使用此选项,这些提交对将从输出中排除。
它必须比较所有寻找相似性的提交 - 与完全没有进行任何比较相比,这将是一个非常慢的操作。
答案 1 :(得分:0)
我一直在使用
git log tag1 --not tag2
这让我对tag1的所有提交都不在tag2上。适用于分支和标签。
答案 2 :(得分:-1)
樱桃采摘可能不会那么快,因为它可能会将重命名视为合并的一部分,这可能很昂贵,尤其是当你挑选远离HEAD的东西时。
可能是你的git配置有gc.auto = 0
(git config --get gc.auto
),所以要仔细检查它是否已启用,或者只是运行:
git gc
为了清理不必要的文件并优化本地存储库。
您也可以尝试将merge.renamelimit
配置变量设置为较小的值(例如1,因为0表示无限制)。如果这样做无效,请尝试分析您的git(例如,使用strace
或perf record git cherry-pick ...
)并找出瓶颈。
对于merge-recursive,我们总是希望计算成对的 在每一方和祖先之间重命名。所以差异到了 樱桃挑选目的地总是一个昂贵的O(# 源和目标之间的变化。
如果没有重命名,你可以在实际合并时做得更好 三路树步行。例如,你看到一些子树位于树A中
ours
和ancestor
树,但在theirs
的树B。所以你没有 必须进一步下降,可以说“拿他们的”(好吧,你有 下降theirs
以获取值)。但我希望它会变得更多 与索引的交互很复杂(可能不是 因为重命名问题,无论如何都值得花费很多精力)。-Peff