GIT - 预提交文件限制

时间:2011-10-20 18:17:04

标签: git commit

我仍然在寻找其他类似的问题,但我还没有找到我正在寻找的东西,希望得到一些帮助。

我需要一个包含多个目录的GIT仓库,每个目录都有不同扩展名的文件。例如:

A \< - 目录只有* .a文件

B \< - B目录只有* .b文件

C \< - C目录只有* .c,*。d和* .f文件

我知道我需要使用预提交钩子来检查验证,但我不确定最好的方法。直截了当的答案似乎是跳转到每个目录并确保只存在预期的扩展,但这可能会成为一个相当长/复杂的脚本,因为某些目录允许多个(有时10个或更多)文件扩展名。

如果知道更简单的方法,我很乐意听到任何建议。

1 个答案:

答案 0 :(得分:1)

您可能想要解析Git命令的输出。最明显的选择是:

git diff --cached --name-only --diff-filter=ACR

这将打印所有已添加(A),复制(C)和重命名(R)文件的列表。如果需要,您还可以检查已修改的文件(M),但只要您不让它们首先进入,就没有必要。 --name-only阻止您获得实际的差异,--cached告诉它查看索引(临时区域)而不是工作树,它可能包含未分级的更改。然后,您可以在每个打印的文件名上执行任何您喜欢的验证。

或者,您可以按目录进行diff目录,以便更轻松地进行验证,例如:

git diff --cached --name-only --diff-filter=ACR directory-A | grep -v '\.a$'

将生成名称​​不以“.a”结尾的所有文件的列表。将directory-A'\.a$'替换为变量,然后您可以迭代目录/正则表达式对列表。