2016-04-14 41 views
0

我正在写一个git远程的预接收钩。如果推送中的任何改变的对象被破坏(即悬挂)符号链接,则该预接收钩应拒绝推送。Git预接收钩拒绝推断与破碎的符号链接

也就是说,

#!/bin/bash 
# hooks/pre-receive 
while read old_sha1 new_sha1 name ; do 
    files=$(git diff --name-only $old_sha1..$new_sha1) 
    # If a file in $files is a symbolic link pointing at nothing, non-zero exit 
done 

我怎样才能做到这一点?

回答

0

您可以迭代文件并检查它们中的任何一个是否为破坏的符号链接。要做到这一点,你可以用test -e检查是否存在:

for f in $files; do if [ ! -e "$f" ]; then # Problem if you reach here ... exit 1 fi done

注意我上面的脚本是不稳健的文件名空格。使用git diff --names-only -z并正确拆分'\0'的结果可以解决问题。

+0

预接收钩子运行在远程git仓库上,这是一个“裸”的仓库。裸存储库没有存储库的工作副本,也没有常用目录布局中的任何工作副本文件。因此,上述不起作用。 – rlandster