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

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

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

这是我想做的:

我想逐行遍历推入的文件,检查是否违反了编码约定,如果发现任何违规,则拒绝推入,还显示行号和违规。

在我的预提交客户端挂钩中,我可以通过调用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>以及我在网上找到的其他一些东西,但我无法清楚了解什么正在进行,我应该怎么称呼。

你能帮我吗?

我正在尝试在团队中执行一些编码规则。为此,我编写了许多客户端钩子,这些钩子可以正常工作,但是现在我希望在开发人员推动它们时执行相同的检查...

git githooks
1个回答
5
投票

您必须对脚本进行更改,因为服务器端没有工作副本,git diff --cached与暂存区(或索引)一起使用,而服务器收到推送时索引为空。

© www.soinside.com 2019 - 2024. All rights reserved.