2012-06-22 66 views
2

我正在编写一个Git预提交钩子客户端脚本,我想通过提交的文件进行筛选,并使用已删除的文件执行某些操作。检查预提交钩子shell脚本中的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 

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

回答

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 

另请参阅this question

+0

感谢您的回复。你介意在你的示例中包含完整的上下文吗?不知道有关shell脚本的任何事情,我很难将它们放在一起。 –

+0

只使用第二个。它是完整的和完整的 –

+0

太棒了,我第一次尝试它时复制了错误。谢谢你的帮助。 –