当您说您没有编辑权限时-您到底是什么意思?
注意:我在使用 CHMOD 修复问题后运行了这些终端命令
这意味着输出没有帮助。所有这些权限显示:
kirkstrobeck:atheycreek kirkstrobeck$ ls -lad ~ . .git
drwxrwxrwx 8 kirkstrobeck staff 272 May 24 18:20 .
drwxrwxrwx 16 kirkstrobeck staff 544 May 25 10:58 .git
drwxr-xr-x+ 92 kirkstrobeck staff 3128 May 24 15:17 /Users/kirkstrobeck
是您确实对列出的所有内容都具有编辑权限-如果您以前chmod -R 777 .
在该文件夹上运行过,这是可以预料的。
更相关的权限是您尝试编辑的内容的文件和文件夹的权限。通过一个特定的命令示例,它生成的错误和相关文件的权限 - 将得到一个具体的答案,如果没有这个,一些有根据的猜测工作:
写 perms 不是 git 问题
Git 根本不存储文件夹,只存储文件的可执行权限。您可以通过以下方式向自己展示这一点:
[andy@work:/tmp/so/original]$ git init
[andy@work:/tmp/so/original]$ touch 0700
[andy@work:/tmp/so/original]$ touch 0600
[andy@work:/tmp/so/original]$ touch 0500
[andy@work:/tmp/so/original]$ touch 0400
[andy@work:/tmp/so/original]$ chmod 0700 0700
[andy@work:/tmp/so/original]$ chmod 0600 0600
[andy@work:/tmp/so/original]$ chmod 0500 0500
[andy@work:/tmp/so/original]$ chmod 0400 0400
[andy@work:/tmp/so/original]$ git add *
[andy@work:/tmp/so/original]$ git commit -va
[master (root-commit) a304e1b] adding files with the named permissions
0 files changed
create mode 100644 0400
create mode 100755 0500
create mode 100644 0600
create mode 100755 0700
[andy@work:/tmp/so/original(master)]$ ls -la
total 12
drwxr-xr-x 3 andy users 4096 May 28 14:51 .
drwxr-xr-x 3 andy users 4096 May 28 14:48 ..
-r-------- 1 andy users 0 May 28 14:48 0400
-r-x------ 1 andy users 0 May 28 14:48 0500
-rw------- 1 andy users 0 May 28 14:48 0600
-rwx------ 1 andy users 0 May 28 14:48 0700
drwxr-xr-x 8 andy users 4096 May 28 14:51 .git
上面显示(带有ls -la
)文件权限,表示为数字(文件名)和读、写、可执行权限(在左侧)。只有 0500 和 0700 这两个文件有可执行权限。
[andy@work:/tmp/so/checkout]$ git init
Initialized empty Git repository in /tmp/so/checkout/.git/
[andy@work:/tmp/so/checkout]$ git pull ../original/
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../original
* branch HEAD -> FETCH_HEAD
[andy@work:/tmp/so/checkout(master)]$ ls -la
total 12
drwxr-xr-x 3 andy users 4096 May 28 14:52 .
drwxr-xr-x 4 andy users 4096 May 28 14:52 ..
-rw-r--r-- 1 andy users 0 May 28 14:52 0400
-rwxr-xr-x 1 andy users 0 May 28 14:52 0500
-rw-r--r-- 1 andy users 0 May 28 14:52 0600
-rwxr-xr-x 1 andy users 0 May 28 14:52 0700
drwxr-xr-x 8 andy users 4096 May 28 14:52 .git
[andy@work:/tmp/so/checkout(master)]$
上面表明检出具有默认文件权限(由 指示的那些umask
),如果提交为可执行文件,则添加可执行文件。
了解以上内容应该可以帮助您专注于真正的问题所在。
修复文件权限
如果您的结帐有错误的权限,您可以使用如下命令修复它们:
# make sure all files are owned by you
sudo chmod -R andy:users .
# reset to default permissions
sudo find . -type d -exec chmod 0755 {} \; -or -type f -exec chmod 0644 {} \;
仔细检查您收到的任何错误消息中提到的文件;该文件的权限现在是 0644,它所在的文件夹是 0755。
更正文件权限后,您应该一切顺利。
请注意,您需要对文件夹具有可执行权限才能查找和操作内容。如果您在文件夹上没有可执行权限,则在其中执行几乎任何操作都会出现权限错误。但是,同样,git 根本不存储文件夹,如果这是问题所在,它与 git 无关。
如果这对您的存储库进行了任何更改,您可以提交它们:
git commit -am "Resetting file permissions to their default values"
这只会提交对文件的可执行属性的更改,并且只是一个清理步骤 - 不会修复任何会导致其他人查看 repo 的权限问题。
忽略文件权限
如果您希望您的结帐完全忽略您应用于结帐的权限,您可以使用:
git config core.fileMode false
这样,git 不会将您应用于结帐的文件权限更改视为提交更改 - 但鉴于可用信息,这不太可能相关。