阻止用户更改.gitignore文件?

时间:2013-02-13 14:09:03

标签: git gitolite

有什么原因迫使用户不要更改.gitignore文件。我的意思是让我们说有人会更改或删除此文件并推送此更改。

3 个答案:

答案 0 :(得分:4)

使用Gitolite,预接收挂钩被称为VREFSVirtual Refs,还有listed here):不要直接在由其管理的repos中设置预接收挂钩gitolite,通过在VREF repo的gitolite-admin目录中添加VREF来实现,Gitolite会将其传播到repos。

restricting pushes by dir/file name”部分说明了如何通过更改目录和文件名来限制推送 这是一个你不需要添加到VREF目录的VREF,实际上(它是由Gitolite管理的更新钩子的一部分。对于辅助更新钩子,see here)。

因此修改gitolite.conf仓库中的gitolite-admin,并将该管理仓库推回到gitolite服务器就足够了。

repo foo
        RW+                             =   @senior_devs
        RW                              =   @junior_devs

        -   VREF/NAME/Makefile          =   @junior_devs

答案 1 :(得分:3)

Git是分散的。一旦有人克隆了回购,它就完全由他们控制,包括.gitignore文件。

可以做的是阻止用户使用检查指定文件类型的Git hook将某些文件推送到您的服务器,并拒绝用户推送。

阅读pre-receive hooks。并编写一个搜索给定文件类型的脚本。

检查你的回购.git/hooks会有一个示例文件列表,告诉你如何处理它。另请阅读this article以避免容易犯错。

修改

我不擅长shell脚本,但是这里有一个小脚本,它禁止.php和.css文件并在中止之前告诉用户。它位于.git/hooks/pre-receive。请记住使其可执行(chmod +x),否则它将无效。

#!/bin/sh
while read oldrev newrev refname
do
  if [[ `git diff-tree --no-commit-id --name-only -r $newrev | grep -e 'css\|php'` != "" ]]
  do
    echo "Cannot push this"
    exit 1;
  fi
end

答案 2 :(得分:2)

您可以在服务器端设置预接收挂钩,如果.gitignore被修改则拒绝推送。