37

だから私はone.txtマスターブランチで何年にもわたって変更しているというファイルを持っています。 gitk one.txtその1つの特定のファイルの全体の履歴が表示されます。ただし、one.txt=>two.txtを変更した後gitk two.txt、名前を変更する前に変更が表示されません。

試しgitk --follow two.txtましたが、各コミットのコメントのみを提供し、実際のファイル変更情報は提供しませんでした。

私にはできることはわかってgit log --follow two.txtいますが、gitk変更される内容ごとに各SHA1値を指定する必要があります。

だから何かヒントはありますか?

4

1 に答える 1

30

Linux Torvaldsによると、問題はgitk --follow今のところとは異なり、git log --follow--follow主にハックであると考えられます。

元のフォローパッチを投稿したときに、この正確な問題について言及したことは間違いありません。基本的には、「--follow」は完全なハックであり、通常のコミットフィルタリング機能を使用しないため、派手なものになります。 「--parent」のように、実際にはうまく機能しません。

IOW、それが修正可能かどうかはまったくわかりません。「--followこれは非常に基本的に非gittyなことであり、実際には完全なハックです。これはかなり小さなハックです。よくわからず、ソースコードを見ると、gitに非常に自然に適合していると思うかもしれません。しかし、違います。

--parentさて、私たちも一緒に仕事をするためにハックすることは可能です--followが、率直に言って、私には方法がわかりません。--followハックは基本的に次のように要約されるためです。

  • コミットをプルーニングしないでください(これは通常、親子関係を単純化し、興味のないコミットを削除するものです)
    • ""の通常のコミットのリスト全体についてgit logは、名前の変更を探す魔法の特別なハックを使用してパッチを生成します。
  • 名前を変更した場合は、魔法のように追跡するパスを変更します。これにより、次に確認するコミットで、新しい(古い)パスをたどります。
  • パッチが空の場合、コミットを強制的に非表示にします(内部的には、これは " rev->always_show_header = 0;"のことです)

ここで重要なのは、通常は親の名前変更を行うコミットのプルーニングを実行した後、キューの最後ですべての魔法を実行することです。

ごめん。たまに使っ--followたことがありますが、「わかりました、名前が変更されました」と表示するのはハックです。「」がきちんと機能していればいいgitk --follow <pathname>のですが、それは私があまり気にかけていることではありません。

于 2011-07-22T23:18:56.677 に答える