【问题标题】:Why git sometimes shows that a file was changed when it was not?为什么 git 有时会显示文件已更改但未更改?
【发布时间】: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 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 时间是假的,请注意文件是如何被Added 而不被删除的,并且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-whatchangedgitwebgit-loggithub 那样忽略对未实际修改的文件的此类虚假提交?

【问题讨论】:

    标签: git git-commit gitweb


    【解决方案1】:

    我查看了有问题的提交并找到了答案:

    这是一个“根提交”——它没有任何父级。通常,repo 中唯一具有此属性的提交是第一次提交。

    所以这次提交中的每个文件都是新的,因为不存在旧版本。

    git log 过滤掉这个提交,因为它不是合并点的第一个父级。我不知道导致git log 认为首先有一些东西可以忽略的逻辑。

    不,没有办法让其他工具忽略此类提交,因为它们只是在做自己的工作。

    这里的问题是,这个提交不应该在没有父级的情况下创建,如果有人创建了这样的提交,它不应该在任何地方合并。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 2016-03-08
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多