Git预提交钩子未按预期工作

Git预提交钩子未按预期工作,git,githooks,Git,Githooks,我已将我的repo配置为使用hooks目录,而不是.git/hooks目录,以便可以 我想运行sed在提交之前编辑密码。我在我的hooks/pre-commit脚本中使用了这段代码,我也使它成为可执行的 #!/bin/bash FNAME=smbclient.conf sed -i -e 's/password=.*/password=See_Thycotic/g' ${FNAME} grep -c See_Thycotic ${FNAME} if [ "$?" -ne "0" ] ; th

我已将我的repo配置为使用
hooks
目录,而不是
.git/hooks
目录,以便可以

我想运行
sed
在提交之前编辑密码。我在我的
hooks/pre-commit
脚本中使用了这段代码,我也使它成为可执行的

#!/bin/bash

FNAME=smbclient.conf
sed -i -e 's/password=.*/password=See_Thycotic/g' ${FNAME}

grep -c See_Thycotic ${FNAME}
if [ "$?" -ne "0" ] ; then
    echo Failed to redact password in ${FNAME}
    exit 1
fi
echo Password was redacted in ${FNAME} before commit
运行此命令时:

git commit smbclient.conf -m "changed something"
我看到这条消息(如预期的那样):

问题在于,文件是在内容被
预提交
脚本更改之前提交的。如果然后运行
git status
,它会告诉我
modified:smbclient.conf

1)如何在提交之前更改此文件,然后将其提交?

2)仅提交smbclient.conf文件而不提交其他文件时,是否可以运行预提交脚本?1) 如果
sed
更新了
$FNAME
文件,则应该让
pre-commit
钩子执行
git添加$FNAME

2) 不可以。不可能定义只对特定文件执行的预提交挂钩

执行此操作的正确方法可能是让脚本在每次提交时运行,但让它从执行以下操作开始:

if[[“$(git diff--仅限名称--暂存--$FNAME)”==“”]\if在此提交中未更新$FNAME文件
然后
退出0Ω停止此钩子的执行,并考虑钩子执行成功。
fi
#这里是预提交钩子脚本的其余部分

从所附的
预提交
钩子中,您似乎忘记了对更新的文件运行
git add
。@Alderath:它已经被添加并提交。在提交之前,我只需要在文件上运行
sed
。即使在
git commit
之前执行了
git add
,您也需要
git add
pre commit
钩子中由
sed
进行的更新。
1
Password was redacted in smbclient.conf before commit