我从备份中恢复了一个git存储库,但它没有正确的文件权限。在.git中的所有文件和目录上设置owner +rw是否足够,还是更微妙?是否有实用程序来检查或重置.git文件权限?
nbewdwxp1#
目录应具有755权限;文件应具有644权限。这是一个非常好的经验法则,除非您希望您的组成员对您的存储库进行更改。在我的一个存储库中,.git/objects/*下的文件对每个人都有444(只读)权限,其他文件的权限为644。在.git存储库之上的顶级目录中运行此脚本将修复权限:
.git/objects/*
.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目录下创建名称中带有空格的文件。
find
-print0
xargs -0
grep -v
git
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/5113030(git子模块更新失败,错误为'fatal:在存储库中检测到可疑的所有权'...)
2条答案
按热度按时间nbewdwxp1#
目录应具有755权限;文件应具有644权限。
这是一个非常好的经验法则,除非您希望您的组成员对您的存储库进行更改。
在我的一个存储库中,
.git/objects/*
下的文件对每个人都有444(只读)权限,其他文件的权限为644。在
.git
存储库之上的顶级目录中运行此脚本将修复权限:我在前两个
find
命令中使用了-print0
,在文件名中使用了xargs -0
,以允许文件名中出现空格,但是第三个命令中的grep -v
很难用-print0
管理,所以我在所有命令中省略了空格安全符号,因为git
不会在.git
目录下创建名称中带有空格的文件。ix0qys7i2#
除了@Jonathan Leffler的答案,值得一提的是
.git
及其父目录的所有权。相关:
确保有效的所有权()
https://stackoverflow.com/a/74209644/5113030(git子模块更新失败,错误为'fatal:在存储库中检测到可疑的所有权'...)