我正在编写一个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
或者让我知道我是否离开这里。感谢。
答案 0 :(得分: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