ある時点ではgit repoですが、今はrepoにはありません。ここでは3つのシナリオがあります。ある時点でファイルがgit repoにあったが、今は存在しない場合は、ファイルが「名前が変更された」、「削除された」、「名前が変更されて削除された」かを調べる
- ファイルの名前が変更されました。もしそうなら、ファイルの現在の名前は何か。
- ファイルが削除されました。ファイルが削除される前のある時点でファイルの名前が変更されていない場合は、これは簡単です。
- ファイルの名前が変更され、削除されました。
名前が変更された場合、またはファイルが削除された場合、ファイルの現在の名前を知ることに興味があります。
私はpowershellでgitを使用しているWindowsマシンですが、これらの手順は他のシステムでは簡単に複製できます。
手順
a。私は2つのファイルを追加した。
Add-Content file1.txt "This is file 1"
Add-Content file2.txt "This is file 2"
git add .
git commit -m "Added file1.txt and file2.txt"
b。私はfile1.txtの名前を変更しました。
git mv file1.txt fileone.txt
git commit -m "Renamed file1.txt to fileone.txt"
cです。私はfile2.txtを削除しました
Remove-Item file2.txt
git add .
git commit -m “Deleted file file2.txt”
これらの2つのファイルを変更しないこれらのコミット間には、より多くのコミットが存在する可能性があります。これまでの私のgitログです
git log –oneline
d618114 (HEAD -> master) deleted file2.txt
ba6ec22 Renamed file1.txt to fileone.txt
fe2a51e Added file1.txt and file2.txt
これは私がこれまで持っているものです。
出力:
commit ba6ec22e3fdf7e6eb6f33acd83f49f99e9f2610a
Author: Sunil Shahi <[email protected]>
Date: Sun Oct 8 15:35:02 2017 -0500
Renamed file1.txt to fileone.txt
D file1.txt
commit fe2a51e9aa5835c5886b31f988e4076155c1194e
Author: Sunil Shahi <[email protected]>
Date: Sun Oct 8 15:31:27 2017 -0500
Added file1.txt and file2.txt
A file1.txt
これに伴う問題は、それが実際に名前が変更されたときに、ファイルがコミット私の第二に削除されたことを示しているということです。 --follow
フラグで現在のファイル名を使用すると、詳細はわかりますが、ファイル名はわかりません。
git log --follow --name-status -- "fileone.txt"
出力
commit ba6ec22e3fdf7e6eb6f33acd83f49f99e9f2610a
Author: Sunil Shahi <[email protected]>
Date: Sun Oct 8 15:35:02 2017 -0500
Renamed file1.txt to fileone.txt
R100 file1.txt fileone.txt
commit fe2a51e9aa5835c5886b31f988e4076155c1194e
Author: Sunil Shahi <[email protected]>
Date: Sun Oct 8 15:31:27 2017 -0500
Added file1.txt and file2.txt
A file1.txt
このアプローチは、削除されたファイルのために十分です。しかし、それが削除される前にある時点で名前が変更された場合、同じ問題が発生します。
ありがとうございます。
この細心の注意深い答えをありがとう。私はそれが私が予想したよりも少し仕事があることを認識していますが、それは楽しい読書です。あなたの最後の段落の正規表現がgrep用であると仮定しています。つまり、Windowsで利用できる他のツールに合わせて修正する必要があります。私はSelect-Stringがすべきだと思います。 –
Windows Gitをお持ちの場合は、シェルとgrepがあります.Gitスクリプトの中には、シェルスクリプトで書かれており、sedやgrepなどのコマンドを使用しているものがあります。しかし、他の検索ユーザーはより速くて便利かもしれません。 – torek