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

Compare old and new file pushed to git repository with (preferably) python hook

如果之前有人问过这个问题,我很抱歉,但我仍然找不到明确的答案,无论我需要做的事情是否可行。现在我需要做的是:

我需要让人们克隆包含唯一(键,值)对的文件,修改这个文件(对值做任何事情,但只添加键)然后将它推回 git 回购.有没有办法我可以一起检查这两个文件(即将旧文件加载到内存以检查密钥是否被添加的列表修改?我认为 git 可能适合这个,因为我不会必须注意实施变更历史、差异等

我已经探索了 git 个钩子,但是我发现 none 个服务器端钩子似乎能够做到这一点(读取整个文件),因为预接收钩子只接收更改和 post-receive 无法阻止推送。

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

有什么提示或更好的想法吗?

您实际上可以在 pre-receive 挂钩中检查它。这个钩子的输入是一个形式为

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

可能看起来像这样

fa84d9ae4374c8675191e003565ad197e9584737 619afe11d5e85c192fb2bea066d214065c50b561 /refs/head/master

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

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

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

由于 pre-receive 挂钩只能拒绝所有 ref 更新或其中的 none,您也可以在 update 挂钩中实现它,每个 ref 调用一次,即已更新。