如何创建用于共享githooks的makefile

问题描述 投票:0回答:1

我已经创建了一个运行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,但该钩子没有触发。

git shell makefile pre-commit-hook
1个回答
0
投票

有两个问题。

  1. 配方中的每一行都在单独的shell中执行; root是在第一个外壳程序中定义的,但没有在执行ln的外壳程序中定义。整个脚本需要在配方中的逻辑行中。

  2. $(pwd)尝试在执行该行之前扩展名为pwd的Makefile变量。要保留命令替换,请双击$$$(pwd)。同样,需要$$root传递$root才能使外壳扩展。现在,$root试图扩展Makefile变量r(也未定义),然后是文字文本oot

正确的食谱是

githooks:
        root="$$(pwd)"; \
        ln -s "$$root/.githooks" "$$root/.git/hooks"
© www.soinside.com 2019 - 2024. All rights reserved.