为什么git创建只读(444)文件?

12 linux git

使用共享仓库(core.sharedRepository = group),我们遇到了一些git创建只读(权限444)文件的问题.无论我转向哪个git配置项,我们推送时似乎总是在服务器端创建一些只读的元数据.这些文件位于.git /(或裸仓库中的对象/)中.

你真的永远不需要再次写这些文件(无论你执行什么git操作)?它们可能代表提交增量,所以真的不应该改变,但我希望有人可以澄清这一点.

对于好奇,相关的行看起来是git中的builtin/index-pack.c的856和867.

Gre*_*ill 16

这些文件是对象数据库的一部分,它实际上是只读的.无论你使用Git做什么,一旦创建了特定对象,你就无法改变它们的内容.

请注意,如果您撤回提交并在其位置创建一个新提交,您将创建一个带有标识符和内容的对象.Git最终将执行其垃圾收集以删除旧的,未引用的对象.

  • @Greg:如果 git 对象文件是只读的(444),`$ git gc` 如何删除未引用的对象?特别是如果第三方正在运行`$ git gc`。我已经编写了一个脚本来检查组中的每个人都可以编辑文件并使用 git 存储库(执行诸如`git commit --amend`、重写 git 历史记录......)。此脚本将 775 设置为文件(还有 .git/config 中的文件,例如索引文件和百万对象)。 (2认同)
  • @Hotschke:在Unix上,*删除*文件的能力取决于文件目录的权限,而不是文件本身. (2认同)