比较使用(最好)python hook推送到git存储库的新旧文件

时间:2015-01-30 11:56:27

标签: python git

如果之前有人询问过,我很抱歉,但是我仍然无法找到一个明确的答案,不管我需要做什么是可能的。现在我需要做什么:

我需要让人们克隆文件,其中包含唯一(键,值)对,修改此文件(对值执行任何操作,但只添加键),然后将其推回到git repo。有没有办法我可以一起检查两个文件(即将旧文件加载到内存中以检查密钥是否已经修改了添加了什么的列表?我认为git可能适合这个,因为我赢了&t必须注意实施变化历史,差异等。

我已经探索过git hooks,但是我找到的服务器端钩子似乎都没有能够做到这一点(读取整个文件),因为预接收钩子只接收更改并且post-receive can not t阻止推动。

我有一个想法:将文件拆分为两个,一个只用密钥(并且预接收检查没有修改的行,只有新的)和另一个整个对,可以进行任何修改。但是,我不知道如何确保两个文件中密钥的完整性。

有任何提示或更好的想法吗?

1 个答案:

答案 0 :(得分:2)

您实际上可以在pre-receive挂钩中查看此内容。此挂钩的输入是

形式的行列表
<old-sha1> <new-sha1> <ref name>

可能看起来像这样

fa84d9ae4374c8675191e003565ad197e9584737 619afe11d5e85c192fb2bea066d214065c50b561 /refs/head/master

对于您要检查的每个参考,您可以使用

获取该文件的两个版本的内容
git cat-file blob <sha1>:path/to/file

这允许您计算和比较密钥集,并根据需要通过返回非零错误代码来拒绝更新。

由于pre-receive挂钩只能拒绝所有ref更新或者都不能拒绝,所以你也可以在update钩子中实现这个,每次更新时会调用一次。