我想调用位于存储库中的脚本。我当然可以这样做:
#!/bin/sh ../../myscript.sh
但我认为这并不好)那么如何在提交后脚本中获取项目的路径呢?
67up9zun1#
当你处理一个非裸仓库时,post-commit 1钩子会在仓库工作树的当前工作目录下运行,所以你不需要../../。如果您需要脚本的完整路径,您可以执行以下操作:
post-commit
../../
SCRIPT=$(readlink -nf myscript.sh)
...或者您可以使用git rev-parse --show-toplevel获取工作目录的绝对路径:
git rev-parse --show-toplevel
SCRIPT=$(git rev-parse --show-toplevel)/myscript.sh
1 ...但是注意,对于其他一些钩子来说,情况并非如此,例如,在非裸仓库中的post-receive钩子中,当前工作目录是.git目录。
post-receive
.git
tsm1rwdh2#
这仍然有效吗?我的post-commit包含
#!/bin/sh exec ./../../myscript.sh
并且工作。仅使用exec myscript.sh或myscript.sh是不起作用的。此外,即使是myscript.sh,如果要求输入pwd,也会返回/.git/hooks文件夹。使用$GIT_WORK_TREE指向~。我目前还没有看到指向repo根的可靠方法。
exec myscript.sh
myscript.sh
2条答案
按热度按时间67up9zun1#
当你处理一个非裸仓库时,
post-commit
1钩子会在仓库工作树的当前工作目录下运行,所以你不需要../../
。如果您需要脚本的完整路径,您可以执行以下操作:
...或者您可以使用
git rev-parse --show-toplevel
获取工作目录的绝对路径:1 ...但是注意,对于其他一些钩子来说,情况并非如此,例如,在非裸仓库中的
post-receive
钩子中,当前工作目录是.git
目录。tsm1rwdh2#
这仍然有效吗?我的
post-commit
包含并且工作。
仅使用
exec myscript.sh
或myscript.sh
是不起作用的。此外,即使是myscript.sh,如果要求输入pwd,也会返回/.git/hooks文件夹。使用$GIT_WORK_TREE指向~。我目前还没有看到指向repo根的可靠方法。