DragonFly BSD は git を SCM として使用し、カーネルとユーザーランド全体の両方に対して単一のリポジトリとブランチを使用します。
2011 年 11 月 26 日、ほとんどのファイルがまったく変更されていないにも関わらず、誰かが何らかの形でリポジトリ内のすべてのファイルを変更するコミットを行いました。
これは、2011 年 11 月26 日の問題のあるコミットです
。
それ以来、いくつかのツールで、リポジトリ内の任意のファイルのファイル履歴を見ると、そのコミットで 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 の時間は偽物であり、ファイルが
A
削除されずに追加されたこと、およびdst
sha1 が同じであることに注意してください。ファイルが削除されておらず、まだ同じsha1を持っていると考えるとほとんど意味がありませんが、src
sha1が常にそのような偽のコミットであることを示す別のより代表的な例:0000000...
dst
% 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