【发布时间】:2013-01-31 18:41:13
【问题描述】:
DragonFly BSD 使用 git 作为其 SCM,为内核和整个用户空间提供一个存储库和分支。
在 2011 年 11 月 26 日,有人做了一个提交,以某种方式触及了存储库中的每个文件,尽管大多数文件根本没有更改。
这是 2011 年 11 月 26 日的违规提交:
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/86d7f5d305c6adaa56ff4582ece9859d73106103
https://github.com/DragonFlyBSD/DragonFlyBSD/commit/86d7f5d305c6adaa56ff4582ece9859d73106103
从那时起,使用一些工具,如果您查看存储库中任何位置的任何文件的文件历史记录,您会发现它在 2011 年 11 月 26 日随该提交而更改,但它仅显示在某些工具中,并且未在其他中显示。
例如,伪造的 2011-11-26 提交未显示,使用以下工具:
git log sys/sys/sensors.hhttps://github.com/DragonFlyBSD/DragonFlyBSD/commits/master/sys/sys/sensors.h
然而,虚假的提交错误地显示如下:
-
git whatchanged --pretty=%at sys/sys/sensors.h1322296064 :000000 100644 0000000... 554cfc2... A sys/sys/sensors.h 1191329821 :000000 100644 0000000... 554cfc2... A sys/sys/sensors.h1322296064 时间是假的,请注意文件是如何被
Added 而不被删除的,并且dstsha1 是相同的。另一个更具代表性的例子,它表明srcsha1 在此类虚假提交中始终为0000000...,尽管当您认为该文件从未被删除并且仍然具有相同的dstsha1 时,这几乎没有意义:% 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那样忽略对未实际修改的文件的此类虚假提交?
【问题讨论】:
标签: git git-commit gitweb