如何保持这个git hook不会形成无限循环?

时间:2016-02-21 00:48:14

标签: git

我推送到一个裸存储库。从那里我使用post-receive钩子,它导致该服务器上的工作目录在裸存储库上进行拉/推。

这不仅通过更改更新工作目录,而且还将任何用户添加的内容推送到裸仓库(服务器)。

我没有运行它b.c它会导致无限循环,因为推送到服务器会再次启动post-receive挂钩。

我需要这只发生一次,而不是一遍又一遍。

以下是代码:

#!/bin/sh

# deprecated
# git --work-tree=~/public_html --git-dir=~/root.git checkout -f
# cd /home/username/root.git/hooks

# on a push to the server, run a pull/push to the apps working directory
(
    cd ~/root
    git pull ~/root.git master
    git add -A .
    git commit -m "automated commit on push"
    git push ~/root.git master
)

echo "*"
echo "**"
echo "***"
echo "****"
echo "*****"
echo "success"
echo "*****"
echo "****"
echo "***"
echo "**"
echo "*"

有没有办法只根据一个条件运行钩子,即不是每次推送?

1 个答案:

答案 0 :(得分:0)

假设您在特定用户推送的钩子中,那么您可以通过git log检查上一次提交的作者:

LAST_USER=$(git log -1 --pretty=format:"%an")

如果是钩子使用的用户,则不要进行推送。