私はGitを比較的使い始めたばかりです。転覆(SVN) 以前。
グラフィカルなGitフロントエンドやIDEプラグインのほとんどでは、ファイル名が変更された場合、ファイルの履歴を表示できないようです。
git log --follow
コマンドラインでは、名前変更全体のログを見ることができます。
リーナス・トーバルズによれば(代替リンク) この--follow
スイッチは「SVN 初心者」向けであり、本格的な Git ユーザーは使用しません。
--follow は完全なハックであり、親子関係や優れたリビジョン グラフなどについて何も知らなかった元 SVN ユーザーを満足させることだけを目的としています。
これは完全に基本的なものではありませんが、現在の「--follow」の実装は、実際には不可欠なものではなく、リビジョンウォーキングロジックにボルトで固定された簡単な前処理です。
これは文字通り、「本物の Git 機能」としてではなく、「SVN 初心者」を喜ばせるために設計されました。名前の変更が全体像の中で重要であるという (壊れた) 考え方から抜け出すことが目的でした。
熱心な Git ユーザーは、ファイル名が変更されたときにそのファイルの履歴をどうやって取得するのでしょうか? これを実行する「本当の」方法は何でしょうか?
ベストアンサー1
Linus の主張の背後にある一般的な動機は、(あまり鵜呑みにしないでいただきたいのですが) 熱心な Git ユーザーは「ファイル」の履歴をまったく気にしないということだと思います。Git リポジトリにコンテンツを入れるのは、コンテンツ全体に意味のある履歴があるからです。
ファイル名の変更は、パス間で移動する「コンテンツ」の小さな特殊なケースです。Git ユーザーが「つるはし」機能を使用して追跡できるファイル間を移動する関数がある場合があります (例: log -S
)。
その他の「パス」の変更には、ファイルの結合と分割が含まれます。Git は、どのファイルが名前変更されたとみなされ、どのファイルがコピーされた (または名前変更されて削除された) とみなされるかをあまり気にしません。ツリーの完全なコンテンツを追跡するだけです。
多くのバージョン管理システムがファイル中心であるのに対し、Git は「ツリー全体」の考え方を推奨しています。このため、Git は「ファイル名」よりも「パス」を参照することが多いのです。