2013-02-13 59 views
3

有没有什么为什么强制用户不要更改.gitignore文件。我的意思是让我们说有人会改变或删除这个文件并推送这个改变。防止用户更改.gitignore文件?

+0

如果你在本地文件系统层面讲,有可能是设置'chmod'到Git的工作目录中的文件的方式,但在git仓库的水平,可能没有任何办法做到那。 – ConcurrentHashMap 2013-02-13 14:11:32

+0

那么我使用gitolite来管理对回购的访问。 – 2013-02-13 14:16:40

+0

当您使用Gitolite管理回购站时,我不会推荐挂钩。看到我的答案。 – VonC 2013-02-13 14:28:45

回答

2

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

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 
4

随着,预接收钩被称为VREFSVirtual Refs,也listed here):不设置一个直接在由gitolite管理回购通过在VREF目录添加VREF预接收钩,做到这一点gitolite-admin回购,而Gitolite会将其推广到回购。

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

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

repo foo 
     RW+        = @senior_devs 
     RW        = @junior_devs 

     - VREF/NAME/Makefile   = @junior_devs 
+0

这很酷,它的作用就像一个魅力:P Thx非常。我还有一个问题有点偏离主题,您能否建议我使用GIT与QA团队和代码审查人员在开发,测试,分期和生产服务器环境中进行良好的工作流程? – 2013-02-15 10:55:50

+0

@MarceliPo git-flow是当前的标准,并且是一个很好的起点(http://stackoverflow.com/a/12927985/6309) – VonC 2013-02-15 14:20:13

+0

@MarceliPo,如果这回答了你的问题,你可以把它标记为正确的回答,以便其他访问者知道,并且VonC会得到适当的归属? :) – Swivel 2013-10-10 16:34:22