2

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

我发现通过以下内容,我可以使用以下内容遍历提交中包含的所有文件。

#!/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 回答