Git:有没有办法防止*大多数*用户编辑文件?

4
在我们的Git代码库中,有大约十个非常重要的文件。这些文件被许多其他文件所引用,因此如果它们被移动,会导致一些问题。但由于开发环境的设置方式,这种问题不会立即被检测到,所以会出现以下情况:1)开发人员移动了一个重要文件,2)他们提交了更改,3)几天后,系统管理员才开始处理问题。
为了防止这种情况的发生,我们非常希望找到一种方法来限制Git代码库,使得只有特定的用户可以修改这些文件。然而,我已经尝试在Stack Overflow上搜索,目前找到的唯一解决方案是使用pre-commit hooks(或者使用我们无法使用的工具,因为我们使用的是GitHub而不是我们自己的Git安装)。
像这样强制执行限制某些用户对Git中的特定文件进行更改的唯一方法是使用pre-commit hooks(这很麻烦,需要每个人都使用,并且很容易被禁用),还是有其他方法可以实现?

将它们放在一个单独的存储库中,并将其用作子模块。 - ScottMcGready
3
确保构建过程依赖于这些文件(可以通过添加某些“make”目标来检查它们)。然后使用git提交钩子。 - Basile Starynkevitch
你可以使用像 Github 这样的工具,它提供了更多的选项,例如拉取请求等,以便更好地控制访问。但是在基本级别上,对于团队推送到的远程仓库(repo),你可以使用类似 chmod -R a-w /path/to/repo.git 的文件系统级别权限来实现目标,即使得文件只读(对于所有或某些用户)。 - Jason Hughes
有一个规则,不允许直接提交到主分支(例如master),必须通过拉取请求进行。然后需要进行代码审查、测试运行等操作(可能包括此类自动检查),确保合并到主分支之前一切都顺利。 - Croad Langshan
如果你使用GitLab,你可以强制执行权限,就像这样 - Jason Hughes
2个回答

5
你们的开发团队规模有多大?听起来最简单的解决方案是:
  1. 明确告知开发团队不要更改这些文件。
  2. 如@Basile Starynkevitch所提到的,在构建时进行检查,以便快速捕获更改。
  3. 如果需要,使用git预提交钩子。是的,很容易绕过,但为了这样做,他们必须明确违反了已经向他们传达的内容。
  4. 当有人忘记并更改了这些文件时,提醒而不是指责团队。

备选方案
将这些文件放在一个单独的git存储库中,并给大部分团队只读权限。


2
在 Github 中没有针对每个文件的权限设置。然而,一些其他系统如 gitolite 等似乎支持此功能。
您可能可以通过使用 自定义钩子 并自动还原有问题的提交来制定自定义解决方案,但我不建议这样做。
确保开发人员不破坏存储库是构建农场/持续集成(参见 Travis)的角色,而不是 Git。
最好的解决方案是设置一个测试套件来检查这种情况,并确保开发人员在向审核请求发送之前运行它,同时您的 CI 系统也在运行它以确保您不会合并任何非功能性的内容。这样,您几乎可以确保不再遇到此问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接