是否可以更改文件并提交git pre-receive / pre-push hook?

时间:2017-07-25 06:26:44

标签: git version-control githooks

我正在考虑实施预先接收/预推送挂钩(不知道应该使用哪一个)

用例

我有一个JSON存储库,任何人都可以在repo中更改文件(即提交)。但是在推送时,我想计算针对上游的差异(即添加/删除/修改的文件)并将其作为另一个JSON文件存储在存储库中,并继续推送添加的新JSON。

这可能吗?

2 个答案:

答案 0 :(得分:0)

预先接收是服务器端钩子。根据您的要求,您最好使用预提交或预推钩。钩子可以改变某个文件。

例如对于预提交hooke,您可以使用以下脚本将string添加到filename并在提交更改时提交更改:

#!/bin/sh

echo "string" >> filename
git add filename

答案 1 :(得分:0)

您需要的这些信息是可以计算的。版本之间的git diff可以为您提供所需的信息。将其保存在文件中可能会导致事情失去同步的风险。我更喜欢这是根据需要直接从存储库生成而不是从缓存中读出。所以,我不确定你为什么要这样做。但是,如果我确实需要它,我可以通过以下方式之一来解决这个问题。

  1. 一个提交后挂钩,它会在推送之前在客户端进行此更改。这有一个缺点,人们会在他们的代码中看到他们没有做出的提交。

  2. 提供一个脚本来执行此操作并禁止推送(使用服务端挂钩),直到用户运行脚本并在存储库中生成此信息。这使它成为一个小手册,但用户知道他或她做了什么,并且掌控着。

  3. 在提交之后(可能是批量生成)在服务器上运行脚本,这将生成此信息并将其存储在一个单独的存储库中。