繁体   English   中英

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

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

很抱歉,是否曾经有人问过我,但是我仍然找不到一个明确的答案,我是否需要做些什么。 现在我需要做的是:

我需要让人们克隆包含唯一(键,值)对的文件,修改此文件(对值做任何事情,但只添加键),然后将其推回git repo。 有没有一种方法可以同时检查两个文件(即,将旧文件加载到内存中以检查密钥是否没有使用添加的内容修改列表?)我认为git可能适合此操作,因为我不必打扰关于实施变更,差异等的历史记录

我已经研究过git钩子,但是我发现服务器端的钩子似乎都无法做到这一点(读取整个文件),因为pre-receive钩子仅接收更改,而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更新或不拒绝所有ref更新,因此您也可以在update钩子中实现此操作,每个update ref都会被调用一次。

暂无
暂无

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

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