我使用gitosis来托管我的GIT存储库.
我想阻止管理员以外的用户(由提交者的电子邮件识别)将更新推送到子模块.
我试图看看我是否可以通过pre-receive hook读取子模块更改列表,但由于它是一个裸仓库,它无法读取.gitmodules.
#!/bin/bash
OLDREV=$1
NEWREV=$2
unset GIT_DIR
unset GIT_WORKING_TREE
SUBS=$(git show $NEWREV:.gitmodules | sed -n "s/^.*git@repo://p")
for submod in SUBS
do
echo $submod
done
exit 1
但我得到:
remote: fatal: Path '.gitmodules' does not exist (neither on disk nor in the index).
你知道我怎么能读取在预接收挂钩中被推送的子模块提交吗?
最佳答案 您的问题在于您尝试阅读OLDREV和NEWREF的方式.
Githooks没有像你期望的那样获得他们的论点,他们被写入stdin,这实际上意味着他们被管道输入.
要正确阅读它们,您必须执行以下操作:
while read OLDREF NEWREF REFNAME
do
# Work with the references ...
done
pre-push.example挂钩 – 你可以在每个git存储库中找到 – 给出了一个很好的印象.