Git预提交钩子未按预期工作
我已将我的repo配置为使用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
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