2

Git pre-commitフッククライアントスクリプトを作成しています。コミットされたファイルをフィルタリングして、削除されたファイルで何かを実行したいと思います。

以下を使用すると、コミットに含まれるすべてのファイルを次のようにループできることがわかりました。

#!/bin/sh

for file in $( exec git diff-index --cached --name-only HEAD )
  do
    echo $file
done

削除されたファイルを見つけるには、ファイルが削除されたときのgit status --porcelain <file>ように最初の文字が表示されるので、使用できると思います。D

したがって、必要なのは、の出力の最初の文字がであるかどうかを確認するための構文の作成を支援することgit status --porcelain <file>ですD

#!/bin/sh

for file in $( exec git diff-index --cached --name-only HEAD )
  do
    # This line doesn't work but it's the best I've came up with.
    if git status --porcelain $lessFile == *"D"*; then
      echo "$file was deleted"
    fi
done

または、私がここで基地から離れているかどうかを知らせてください。ありがとう。

4

1 に答える 1

3

試す

 $( exec git status --porcelain | egrep "^D" | sed -e 's/^D  //' )

スペースのあるファイル名に問題がある可能性があります。以上

git diff-index --cached --name-status HEAD | awk '$1 == "D" { print $2 }' | while read file
do
   echo $file
done

この質問も参照してください。

于 2012-06-22T01:49:41.387 に答える