2016-05-31 2 views
2

変更を含むすべてのフォルダを取得するgitコマンドは何ですか?変更を含むすべてのフォルダを取得するGitコマンド

git diff --name-only 

しかし、実際のファイルはすべて変更されていますか?これは相対パスからのすべてのファイル名を削除し、任意の重複を除去するxargs

dirnameから
git diff --name-only | xargs dirname | uniq 

スルー

+0

A/B/C/aaa.txtが変更されている場合は、どのフォルダを使用しますか? A /またはA/B/C /ま​​たはそれ以外? – ElpieKay

+0

ルートgitフォルダからすべてのサブディレクトリ名が必要です。ですから、基本的にはルートgitリポジトリであればA/ – yetanotherposter

+0

のフォルダ名が返されます。この 'git log --pretty =" go-away:%h "--name-only | grep -v go-away:| grep/| awk -F/'{print $ 1}' | sort -u' – ElpieKay

答えて

4

変化を含む経路を取得するために、パイプ出力。例えば

dirname

$ git diff --name-only 
app/lib/sub/dirlist.cpp 
app/net/rpc.cpp 
config/config.txt 

$ git diff --name-only | xargs dirname | uniq 
app/lib/sub 
app/net 
config 

xargsを返しますが、複数の行(リスト出力)を取り、順番に各上で次のコマンド(この例ではdirname)を実行します。 uniqは出力から重複を削除します。

+0

ありがとうございますこれは素晴らしいです – yetanotherposter

+2

'| uniq'を実行して重複を破棄します。 (Gitがソートされた内部のツリー順でトラバースするのでソートは必要ありません) – torek

+0

OSXのdirnameは1つの引数しか許さないので、OSXでは "xargs -n1 dirname"を使います。 xargsの-n1はstdinから一度に1行を取り出し、dirnameに渡します。 – DavidN

関連する問題