繁体   English   中英

如何在Git钩子脚本中访问要提交的文件的内容和名称?

[英]How do I access the contents and names of files being committed from within a Git hook script?

我对如何正确实现git hook感到有些困惑,而且我无法弄清楚如何从脚本中访问所需的任何类型的信息。 我几乎没有脚本编写/使用Python的经验。

我只想访问要在预提交挂钩中提交的文件名(以及文件的内容),以便检查它们是否符合命名约定。 我看到过这样的帖子,例如一个Git服务器钩子:获取要推送的文件的内容? ,张贴者提到他如何通过调用git diff --cached --name-status --diff-filter=AM获得文件列表。

很抱歉,这是一个愚蠢的问题,但是如何在脚本中调用此行并将其设置为等于某行? 我将这一行识别为Git命令,但是我很困惑如何将其转换为代码。 在python中看起来像什么?

这是我目前用于预提交模板的全部内容。 它只是在Python中进行测试打印及其打印。

#!/usr/bin/env python

import sys

print("\nError details\n")
git diff-index --name-status HEAD | grep '^[MA]'

这是我所知道的最可靠的方法。 它打印出带有M或A前缀的名称,后跟一些空格,后跟名称,以指示文件是“已修改”还是“添加”。

不过,还有一些额外的魔术。 我建议:

git stash --keep-index
git diff-index --name-status HEAD | grep '^[MA]'
git reset --hard
git stash pop --quiet --index

这将为您提供暂存区域中的名称列表(通过存储自上一个git add命令以来的所有更改),然后立即恢复工作空间。 由于您要提交的是暂存区而不是工作区,因此这可能就是您想要的。

我有一个程序可以在https://github.com/elfsternberg/pre-commit-stash上完成所有这些操作

它是用Hy编写的,Hy是Python的一种方言,大多数人几乎不了解甚至无法阅读。 不过,Hy确实带有hy2py编译器,因此,如果您确实需要它,此脚本将向您展示它是如何完成的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM