Git-mvを使用してgitでファイルを移動すると、ステータスがファイルの名前が変更されたことを示し、一部を変更してもほとんど同じものと見なされます(履歴を追跡できるので良いことです) 。
ファイルをコピーするとき、元のファイルには履歴があり、新しいコピーに関連付けたいと思います。
ファイルを移動してから元の場所で再チェックアウトしようとしました-いったんgitを移動すると、元の場所をチェックアウトできません。
ファイルシステムのコピーを行ってからファイルを追加しようとしました-gitは新しいファイルとしてリストします。
Gitがファイルのコピー操作を記録する方法はありますか?それは、ファイルの名前変更/移動を記録する方法と同様の方法で、履歴を元のファイルに戻すことができますか?
Gitは名前の変更の追跡もコピーの追跡も行いません。つまり、名前の変更やコピーはrecordしません。代わりに、名前の変更とコピーdetectionが行われます。 git diff
オプションを使用してgit show
(および-M
)で名前変更の検出を要求できます。-C
オプション(-C
は-M
を意味し、--find-copies-harder
または-C -C
(これは-C
を意味し、-M
を意味します。 )。 git-diff マンページを参照してください。
diff.renames
をブール値の真の値(例:true
または1
)に設定することで、常に名前変更検出を行うようにgitを設定することもできます。 copy
またはcopies
へ。 git-config マンページを参照してください。
-l
のgit diff
オプションと関連する構成変数diff.renameLimit
も確認してください。
Gitではgit log <pathspec>
の動作が異なることに注意してください。ここで<pathspec>
はパス区切り文字のセットです。ここで、pathは(サブ)ディレクトリ名です。履歴のフィルタリングと簡素化beforeの名前変更とコピー検出が有効になります。名前の変更とコピーを追跡する場合は、git log --follow <filename>
を使用します(現在は少し制限があり、単一のファイルでのみ機能します)。
Gitにコピーされたファイルの履歴を強制的に検出させることができます。
( https://stackoverflow.com/a/44036771/138968 から取得したソリューション)