$GIT_DIR的内容应具有哪些文件权限?

xoefb8l8  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(99)

我从备份中恢复了一个git存储库,但它没有正确的文件权限。在.git中的所有文件和目录上设置owner +rw是否足够,还是更微妙?
是否有实用程序来检查或重置.git文件权限?

nbewdwxp

nbewdwxp1#

目录应具有755权限;文件应具有644权限。
这是一个非常好的经验法则,除非您希望您的组成员对您的存储库进行更改。
在我的一个存储库中,.git/objects/*下的文件对每个人都有444(只读)权限,其他文件的权限为644。
.git存储库之上的顶级目录中运行此脚本将修复权限:

find .git -type d | xargs chmod 755
 find .git/objects -type f | xargs chmod 444
 find .git -type f | grep -v /objects/ | xargs chmod 644

我在前两个find命令中使用了-print0,在文件名中使用了xargs -0,以允许文件名中出现空格,但是第三个命令中的grep -v很难用-print0管理,所以我在所有命令中省略了空格安全符号,因为git不会在.git目录下创建名称中带有空格的文件。

ix0qys7i

ix0qys7i2#

除了@Jonathan Leffler的答案,值得一提的是.git及其父目录的所有权。

sudo chown -v "$( id -u; ):$( id -g; )" .;
sudo chown -v "$( id -u; ):$( id -g; )" -R .git;
find '.git' -type d -exec chmod -v 775 {} \;;
find '.git/objects' -type f -exec chmod -v 444 {} \;;
find '.git/hooks' -mindepth 1 -maxdepth 1 -type f -exec chmod -v 775 {} \;;
find '.git' -type f ! -path '.git/objects/*' ! -path '.git/hooks/*' -exec chmod -v 664 {} \;;

相关:
确保有效的所有权()
https://stackoverflow.com/a/74209644/5113030git子模块更新失败,错误为'fatal:在存储库中检测到可疑的所有权'...)

相关问题