git:允许通过基于特定条件推送到远程存储库来允许提交中的特定文件

时间:2013-08-08 08:09:07

标签: git git-push git-commit

我遇到这种情况,我的预接收挂钩脚本只需要允许名称以Tag_

开头的提交中的那些文件

例如,我有一个包含3个文件的提交,

Tag_a
Tagb
Tag_c

现在,我的预接收脚本应仅允许Tag_aTag_b,但不允许Tagb

我在Stack Overflow上的某处读到如果我们拒绝一个文件并允许推送其他文件,那么提交的哈希(sha1)值可能会改变。

所以我的问题是,有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

不要偷偷摸摸。只要拒绝整个提交,用户应该--amend承诺排除不允许的文件并尝试再次推送。

答案 1 :(得分:0)

pre-receiveupdate挂钩只能接受或拒绝整个引用名称。这是一个全有或全无的交易。您可以检查建议的树,但是您必须弄清楚ref-name所指向的前一个位置的变化。

例如,如果您收到refs/heads/zogd4df144c36f26c7887e5f8a74812f06a3b0338ec移动到5e013711f5d6eb3f643ef562d49a131852aa4aa1的内容,则需要查看在这些点之间添加(或删除)的所有提交,并查看每次提交中正在进行的树更改。然后,您可以确定分支名称可以更改,或者它不正常,基本上就是这样。新提交可能将旧的提交作为其(单个)父级,或者它可能具有另一个新提交作为其父级,而后者又具有第三次新提交等等(并且任何新提交可以是与多个父级的合并。 )