git merge更改日志输出(非稳定排序)
我注意到git merge在进行合并时似乎没有进行稳定排序。或者它可能是完全不同的东西。我真的不知道出了什么问题 如果您尝试这个小测试用例10-20次,直到它显示“FLAKY”: (这是一个单行程序,可以在bash提示符下运行) 通常,您在末尾回显的日志如下所示:git merge更改日志输出(非稳定排序),git,Git,我注意到git merge在进行合并时似乎没有进行稳定排序。或者它可能是完全不同的东西。我真的不知道出了什么问题 如果您尝试这个小测试用例10-20次,直到它显示“FLAKY”: (这是一个单行程序,可以在bash提示符下运行) 通常,您在末尾回显的日志如下所示: merge 1 2 0 但一段时间后,您可能会得到1和2来切换位置: merge 2 1 0 这令人难以置信地愤怒。我总是可以在测试中使这两个第一次提交可以互换,但我不希望这样。我宁愿去掉片状物。有人知道是什么原因吗?TLDR:这
merge 1 2 0
但一段时间后,您可能会得到1和2来切换位置:
merge 2 1 0
这令人难以置信地愤怒。我总是可以在测试中使这两个第一次提交可以互换,但我不希望这样。我宁愿去掉片状物。有人知道是什么原因吗?TLDR:这是一种很容易触发的竞争条件,因为git日志以1秒的分辨率按时排序。一个可能的解决方法是使用:
git log --topo-order
所以在调查之后。Git订单根据日期/时间提交。这是显而易见的。存储的日期以秒为单位,以unix时间戳为单位,因此分辨率非常糟糕。当所有提交都具有相同的时间戳时(通常情况下),它将选择按某种(稳定的!)顺序“merge 1 2 0”对它们进行排序 然而,有时,最后2正好发生在时间改变时,因此它将有一个更高的时间戳,因此总是放在1之上 所以这是常见的情况:
Merge: a217d34 1f853fc
Date: 1381855683 +0200
merge
commit a217d34c3b7694e4a5f963ead624b4d3e4a87adf
Date: 1381855683 +0200
1
commit 1f853fc9acf669929ccab71d341784a525a5360e
Date: 1381855683 +0200
2
commit 490507918504597c90300889aaf3cb5cbb5dd82c
Date: 1381855683 +0200
0
这是一个特殊的(片状的)案例。至少在这次测试中,我想在我的真实测试中可能会有所不同,只有当他们突然有相同的时间时,它才会剥落
Merge: a2f0bba f3b9f1e
Date: 1381855747 +0200
merge
commit f3b9f1eeeef0c8c77aa8505224198951dc6d6904
Date: 1381855747 +0200
2
commit a2f0bba815bb2a1e8e611f755397350c732b5e6b
Date: 1381855746 +0200
1
commit ab28f3063df4d51c79ee0fbdec0ae77f870e8e3b
Date: 1381855746 +0200
0
我还没有设计出我将遵循什么计划来修复这个问题,但似乎git log--topoorder
就可以了。它至少在这个小测试中表现相同
Merge: a2f0bba f3b9f1e
Date: 1381855747 +0200
merge
commit f3b9f1eeeef0c8c77aa8505224198951dc6d6904
Date: 1381855747 +0200
2
commit a2f0bba815bb2a1e8e611f755397350c732b5e6b
Date: 1381855746 +0200
1
commit ab28f3063df4d51c79ee0fbdec0ae77f870e8e3b
Date: 1381855746 +0200
0