Git预接收钩子拒绝推送与破坏的符号链接

时间:2016-04-14 15:09:41

标签: git symlink

我正在为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

我该怎么做?

1 个答案:

答案 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'上正确拆分结果可以解决问题。