git - 将文件提交到 git 但之后不允许更改
问题描述
我有一些 IDE 运行配置文件,我想提交到我的 git 存储库,以便我们的团队可以共享它们。不幸的是,它们稍后可能会被修改以包含私有或安全系统属性。因此,我也想禁止他们在提交后进行更改。最初提交的文件将不包含任何私人、安全或敏感信息。
是否可以将文件永久提交到存储库,并永久禁止修改它们?我知道在本地克隆上执行此操作的临时方法(例如取消跟踪文件),但我希望始终将它们放在远程,只需指示 git 永远不要跟踪任何更改,即使对于新克隆也是如此。
解决方案
是否可以将文件永久提交到存储库,并永久禁止修改它们?
有点。
以下是一些“某种”实现您想要的选项:
- 设置开发人员在本地使用的提交挂钩,以防止意外提交该文件。
- 结合分支保护在 GitHub 中为该特定文件设置代码所有者规则,以便在修改该文件时只有特定人员才能允许完成 PR。
你不能强迫#1。您可以强制使用 #2,但这不会阻止开发人员不小心将敏感数据推送到共享存储库中。但它至少会阻止它在没有某些人批准的情况下被合并。也许这些的某种组合是最好的。
选择?
另一种方法是尝试完全避免这种情况。实现它的一种方法是拥有一个未跟踪的覆盖/转换文件,并且可以在 .gitignore 文件中。然后你可以拥有:
my-file-base # checked in and tracked like a normal file
my-file-override # Listed in .gitignore
并且读取该文件的“东西”可以检查是否存在,my-file-override
如果它存在,它可以my-file-base
使用覆盖进行修改,和/或添加新的东西。每个开发人员都可以根据需要进行设置。
边注:
请注意,来自Git 文档的关于update-index
:
用户经常尝试使用假设不变和跳过工作树位来告诉 Git 忽略对跟踪文件的更改。这不像预期的那样工作,因为 Git 在执行某些操作时可能仍会根据索引检查工作树文件。一般来说,Git 不提供忽略跟踪文件更改的方法,因此建议使用替代解决方案。
推荐阅读
- python - 如何创建具有共享权重的两个层,其中一个是另一个的转置?
- wordpress - 站点问题调试设置为 true
- extjs - Ext.js - 是否可以通过开放工具和 ext.js 7 使用 es6 类语法
- python - 识别在 selenium python 中使用 AngularJS 开发的元素
- jquery - 添加到 SVG 地图
- graphql - 如何使用 IoC 访问 HotChocolate (GraphQL) 请求的查询
- python - "notebook==6.0.2 cannot be installed on this environment" on python 3.5 environment
- sql - SQL查询遍历记录列表并插入缺失
- ruby-on-rails - 更新运输重量和包装以更准确,因为我当前的重量和包装不反映现实
- internet-explorer-11 - Google Tag Manager Preview 在 IE11 中不起作用