我已经创建了一个运行linter的pre-commit
钩子。 pre-commit
文件存在于<project>\.githooks\pre-commit.sh
中。现在,我想通过制作文件与团队成员共享此钩子
所以我在makefile中做了
.PHONY: all githooks
githooks:
root="$(pwd)"
ln -s "$root/.githooks" "$root/.git/hooks"
我收到错误
$ make githooks
root=""
ln -s "oot/.githooks" "oot/.git/hooks"
ln: oot/.git/hooks: No such file or directory
make: *** [githooks] Error 1
看来我没有将$pwd
读入变量,并且我无法加入2个字符串。我将如何在makefile
中执行此操作?
更新:
我已将钩子更改为
githooks:
root="$$(pwd)"; \
ln -s "$$root/.githooks" "$$root/.git/hooks"
这是make文件的输出
[ 1:31PM ] [ ~ ]
$ make githooks
root="$(pwd)"; \
ln -s "$root/.githooks" "$root/.git/hooks"
[ 1:32PM ] [ ~ ]
$ find . -maxdepth 1 -type l -ls
find命令未返回任何链接。我尝试了git commit
,但该钩子没有触发。
有两个问题。
配方中的每一行都在单独的shell中执行; root
是在第一个外壳程序中定义的,但没有在执行ln
的外壳程序中定义。整个脚本需要在配方中的逻辑行中。
$(pwd)
尝试在执行该行之前扩展名为pwd
的Makefile变量。要保留命令替换,请双击$
:$$(pwd)
。同样,需要$$root
传递$root
才能使外壳扩展。现在,$root
试图扩展Makefile变量r
(也未定义),然后是文字文本oot
。
正确的食谱是
githooks:
root="$$(pwd)"; \
ln -s "$$root/.githooks" "$$root/.git/hooks"