Git服务器钩子:获取正在推送的文件的内容?

Ibo*_*lit 8 git githooks

我正在尝试在我的团队中执行一些编码规则.为此,我编写了许多客户端钩子,它们可以正常工作,但是现在我希望在开发人员将修改推送到中央存储库时运行相同的检查.但它们不起作用.

这是我想要做的:

我想逐行遍历推送的文件,检查编码约定违规,如果我找到任何,拒绝推送,也显示行号+违规.

在我的预提交客户端钩子中,我能够通过调用git diff --cached --name-status --diff-filter=AM获取修改文件的列表,以及git cat-file -p :filename在第一次调用中检索的每个文件来获取文件的整个文本.

当我尝试在服务器端update钩子中执行相同操作时,我得到一个空字符串(对于文件列表).

我也试过调用git show --pretty="format:" --name-only newrev(其中newrev是我作为更新钩子的参数得到的SHA git diff-tree -r --name-only --no-commit-id <tree-ish>,以及我在网上找到的其他一些东西,但是我无法清楚地了解发生了什么以及我应该调用什么.

你能帮助我吗?

Cha*_*esB 5

您必须对脚本进行更改,因为服务器端没有工作副本,并且git diff --cached使用临时区域(或索引),而当服务器收到推送时,您的索引为空。

只需使用git diff --name-status <sha-old> <sha-new>相反,与sha-oldsha-new被发送到挂钩作为参数裁判,你会得到相同的输出运行git diff --cached在提交之前。

至于检查文件内容,您可以使用 git show sha-new:/path/to/file