2016-04-14 39 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