我正在为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 :(得分: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'
上正确拆分结果可以解决问题。