我正在编写一个看起来像这样的post-receive挂钩:
#!/bin/sh
# this file is in root.git/hooks
# deprecated
# git --work-tree=~/public_html --git-dir=~/root.git checkout -f
cd /home/username/www
git add -A .
git commit -m "automated commit on push"
# cd /home/username/root.git/hooks
# cd /home/username/root.git
#git pull x
#git push y
我更改为add / commit
的git repo,我需要回到我的裸仓库并执行pull / push
。
我应该回到hooks目录还是只是git目录。
答案 0 :(得分:2)
你不会回到任何地方。当进程退出时,忘记了钩子进程的工作目录,所以如果你把它改成什么就完全无关紧要。
如果要在存储库上运行命令,则应该在工作树中(如果它是非裸的)或者在存储库中(如果它是裸的)。您之前的位置不相关。
钩子在该目录中运行,您可以直接在其上发出命令。
如果您需要暂时去某个地方,我建议您使用子shell:
(
cd /home/username/www
git commit -a -m "automated commit on push"
)
# You are back wherever you were, before you opened the parenthesis
这使得脚本可以重新定位(尽可能多;它仍然需要到另一个repo的路径)。
实际上,GIT_DIR
也设置在钩子中,如果你想在不同的存储库上工作,除了更改目录之外你还需要取消设置:
(
cd /home/username/www
unset GIT_DIR
...
)
环境将在)
之后恢复,就像当前工作目录一样。