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

Linux 为什么git要创建只读(444)文件?,linux,git,Linux,Git,使用共享repo(core.sharedepository=group),我们在git创建只读(权限444)文件时遇到了一些问题。无论我处理哪个git配置项,当我们推送时,服务器端似乎总是会创建一些只读元数据。这些文件的格式为.git/(或裸repo中的objects/) 您真的不需要再次写入这些文件(无论您执行什么git操作)?它们可能是提交增量的代表,因此确实不应该更改,但我希望有人能够澄清这一点 对于好奇的人,相关的行看起来是git中内置的/index pack.c的856和867。这些文

使用共享repo(core.sharedepository=group),我们在git创建只读(权限444)文件时遇到了一些问题。无论我处理哪个git配置项,当我们推送时,服务器端似乎总是会创建一些只读元数据。这些文件的格式为.git/(或裸repo中的objects/)

您真的不需要再次写入这些文件(无论您执行什么git操作)?它们可能是提交增量的代表,因此确实不应该更改,但我希望有人能够澄清这一点


对于好奇的人,相关的行看起来是git中内置的/index pack.c的856和867。

这些文件是对象数据库的一部分,实际上是只读的。无论您使用Git做什么,您都不能在特定对象创建后更改其内容


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

ENV中的umask是否正确设置?谢谢,Greg。我希望能得到一些有关文档的参考资料。这在git文档中的任何地方都有报道吗?@Matthew:git wiki中有一个参考:您可以通过搜索“git object database immutable”找到其他参考。@Greg:如果git object文件是只读的(444),那么
$git gc
如何删除未引用的对象?特别是如果第三方正在运行
$git gc
。我编写了一个脚本,它检查组中的每个人都可以编辑文件并使用git存储库(执行诸如
git提交--amend
、重写git历史记录等操作)。此脚本将775设置为文件(以及.git/config中的文件,例如索引文件和百万对象)。@Hotschke:在Unix上,删除文件的能力取决于对文件目录的权限,而不是文件本身。谢谢。我错过了unix权限的这一部分,可能只是创建或删除了git对象,而没有修改。