DragonFly BSD 使用 git 作为其 SCM,为内核和整个用户空间提供一个单一的存储库和分支。
在 2011 年 11 月 26 日,有人做了一个提交,以某种方式触及了存储库中的每个文件,尽管大多数文件根本没有更改。
这是 2011 年 11 月 26 日的违规提交:http:
//gitweb.dragonflybsd.org/dragonfly.git/commitdiff/86d7f5d305c6adaa56ff4582ece9859d73106103
https://github.com/DragonFlyBSD/DragonFlyBSD/commit/86d7f5d305c6adaa56ff4562ece939
从那时起,使用一些工具,如果您查看存储库中任何文件的文件历史记录,您可以看到它在 2011 年 11 月 26 日随该提交而更改,但它仅显示在某些工具中,而未显示在其他。
例如,以下工具不会显示虚假的 2011-11-26 提交:
git log sys/sys/sensors.h
https://github.com/DragonFlyBSD/DragonFlyBSD/commits/master/sys/sys/sensors.h
但是,虚假提交错误地显示如下:
git whatchanged --pretty=%at sys/sys/sensors.h
1322296064 :000000 100644 0000000... 554cfc2... A sys/sys/sensors.h 1191329821 :000000 100644 0000000... 554cfc2... A sys/sys/sensors.h
1322296064 时间是假的,请注意文件是如何被 dd 的
A
而从未被删除,并且dst
sha1 是相同的。另一个更具代表性的例子,它表明src
sha1 总是0000000...
在这样的虚假提交中,尽管当你考虑到该文件从未被删除并且仍然具有相同的dst
sha1 时它几乎没有意义:% git whatchanged --pretty=%at sys/sys/sysctl.h | head -9 1322296064 :000000 100644 0000000... 6659977... A sys/sys/sysctl.h 1296826445 :100644 100644 94b8d96... 6659977... M sys/sys/sysctl.h 1292413105 :100644 100644 8c9deaa... 94b8d96... M sys/sys/sysctl.h
http://gitweb.dragonflybsd.org/dragonfly.git/history/HEAD:/sys/sys/sensors.h
我的问题如下:
如何在不首先删除文件的情况下添加文件?允许这样的事情是/是git中的一个错误吗?
为什么有些工具会压缩此类虚假提交(并向用户隐藏它们),而有些工具却没有?
有没有办法在实际上没有修改的文件上进行
git-whatchanged
和gitweb
忽略此类虚假提交,就像git-log
这样github
做一样?