Gitリポジトリで2か月間修正されていないcppソースファイルなど、過去の特定の日付より古いファイルを検索しようとしています。Gitリポジトリの特定の日付より古いファイルを見つける
Linuxのfind
シェルコマンドを使用している場合、私のワークスペースのファイルは "git sync"された日付でマークされているため、シェルコマンドを見つけることができません。
どうすればいいですか?
Gitリポジトリで2か月間修正されていないcppソースファイルなど、過去の特定の日付より古いファイルを検索しようとしています。Gitリポジトリの特定の日付より古いファイルを見つける
Linuxのfind
シェルコマンドを使用している場合、私のワークスペースのファイルは "git sync"された日付でマークされているため、シェルコマンドを見つけることができません。
どうすればいいですか?
まず、現在レポにあるファイルを見つける必要があります。それは簡単です:
git ls-files
これらのファイルのそれぞれについて、特定の日付の後に変更されているかどうかを確認する必要があります。 git log
はここに動作します:
git log --since "<some date>" -- somefile.cpp
が(ファイルが指定した日付以降に変更されていない場合、これは何も出力が得られません。)
は、ユーザーフレンドリーな出力のための別のgit log
コマンドと一緒にすべてを置きます、ここで仕事をする必要があります
bashスクリプトは次のとおりです。
#!/bin/bash
date=$1
git ls-files | while read path
do
if [ "$(git log --since \"$date\" -- $path)" == "" ]
then
echo "$path $(git log -1 --pretty='%h %ad' -- $path)"
fi
done
は使用方法:
/path/to/myscript.sh "2017-01-01 12:00"
これは、あなたが1行にこれをダウン凝縮可能性が当然のように、それは、バッシュだあなたの1月1日の正午前以降に変更されていないファイルのみ、2017年
が表示されます:
git ls-files | while read path; do if [ "$(git log --since \"$1\" -- $path)" == "" ]; then echo "$path $(git log -1 --pretty='%h %ad' -- $path)"; fi done
は、ファイルの特定の種類の結果を制限するには、そのように、途中でgrep
コマンドを追加します。
git ls-files | grep -e ".cpp$" -e ".h$" -e ".c$" | while read path; ...
がここにましですあなたは引数として、それらのファイルタイプを渡すことができます上記のスクリプトのrsion:
#!/bin/bash
date=$1
grepargs=""
shift
while [ $? -eq 0 ]
do
grepargs="$grepargs -e \"$1\""
shift
done
git ls-files | grep $grepargs | while read path
do
if [ "$(git log --since \"$date\" -- $path)" == "" ]
then
echo "$path $(git log -1 --pretty='%h %ad' -- $path)"
fi
done
使用法:
/path/to/myscript.sh "2017-01-01 12:00" ".cpp$" ".h$" ".c$"
のbash myscript.shに引数としてファイル拡張子を渡すためにどのように?たとえば、myscript.sh "2017-01-01" "cpp、c"(CおよびC++ソースのみ)。 – electro
@electroもう一度私の答えを更新しました。 –
ありがとうございます。 ".cpp $"でスクリプトを呼び出すと、シェル上で不正な変数名エラーが発生するようです。私は$記号だと思う。 – electro