在pre-commit hook shell脚本中检查git状态

我正在写一个Git预先提交的钩子客户端脚本,我想过滤通过提交的文件,并与删除的东西做一些事情。

我发现用下面的代码我可以用下面的代码遍历提交中包含的所有文件。

#!/bin/sh for file in $( exec git diff-index --cached --name-only HEAD ) do echo $file done 

要find删除的文件,我相信我可以使用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 

或者让我知道,如果我在这里的基础。 谢谢。

尝试

  $( 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 

也请看这个问题 。