ファイルの名前と内容が変更されている場合、コミット後に移動をマークすることはできますか?
例えば
file1.txt
に変更されfile2.txt
、内容が変更されました。git commit
- Git は
file1.txt
削除されたと考えておりfile2.txt
、無関係な新しいファイルです。
コミットが発生した後にこれを名前変更としてフラグを立てる方法はありますか?
ファイルの名前と内容が変更されている場合、コミット後に移動をマークすることはできますか?
例えば
file1.txt
に変更されfile2.txt
、内容が変更されました。git commit
file1.txt
削除されたと考えておりfile2.txt
、無関係な新しいファイルです。コミットが発生した後にこれを名前変更としてフラグを立てる方法はありますか?
いいえ、そうではありません。Git は名前の変更の追跡を行わないためです...しかし、名前の変更の検出
は行います (ファイルの内容と名前の類似性に基づいて)。
この意味は
git log --follow file2.txt
--follow
名前を変更することでファイルの履歴をたどります (注: これは、ちょっとしたハックのように、残念ながら常に正しく機能するとは限りません)。git blame -C -C file2.txt
ファイルの名前変更、ファイル間およびファイル内でのコンテンツのコピーと移動にわたって、行ごとのファイル履歴をたどりますgit show -C
ファイルの名前変更があったことを示します (差分を表示するときに常に名前の変更を行い、必要に応じてコピーの検出も行うように Git を構成できます)。HTH
いいえ、ありません。Git には、ファイル ID の概念がありません。ディレクトリ ツリーのコンテンツを格納します。木全体だけが歴史の概念を持っています。
古いファイルを削除して新しいファイルを追加したのではなく、ファイルの名前が変更されたことを追跡する唯一の理由は、そのファイルの変更をマージできるようにするためです。ファイルを変更したため (名前変更の検出で類似と見なされる範囲を超えて)、いずれにせよ競合なしで変更をマージする機会はないため、実質的な違いはないはずです。
Git は、同様のファイルを検索してマージの理由を処理することに注意してください。これは、git status
およびすべてのマージで自動的に行われgit log
、git diff
必要に応じて変更を表示する他のコマンドで行われます。名前の変更が見つからない場合は、マージを実行できない可能性があります。