core.fileMode 不是最佳做法,应谨慎使用 . 此设置仅涵盖模式的可执行位,而不包括读/写位 . 在许多情况下,您认为您需要此设置,因为您执行了类似 chmod -R 777 的操作,使您的所有文件都可执行 . 但在大多数项目中 most files don't need and should not be executable for security reasons .
解决此类情况的正确方法是分别处理文件夹和文件权限,例如:
find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \; # Make files read/write
11 回答
尝试:
来自git-config(1):
某个文件系统在文件丢失时丢失可执行位
标记为可执行文件已签出,或签出
具有可执行位的非可执行文件 . git的克隆(1)
或者git-init(1)探测文件系统以查看它是否处理
可执行位正确,这个变量是自动的
根据需要设定 .
但是,存储库可能位于处理的文件系统上
filemode正确,并且此变量在设置为true时
已创建,但稍后可能可以从另一个访问
丢失文件模式的环境(例如导出ext4
通过CIFS mount,使用Git访问Cygwin创建的存储库
适用于Windows或Eclipse) . 在这种情况下,可能是必要的
将此变量设置为false . 请参阅git-update-index(1) .
默认值为true(未指定core.filemode时)
在配置文件中) .
-c
标志可用于为一次性命令设置此选项:--global
标志将使其成为登录用户的默认行为 .警告
core.fileMode
不是最佳做法,应谨慎使用 . 此设置仅涵盖模式的可执行位,而不包括读/写位 . 在许多情况下,您认为您需要此设置,因为您执行了类似chmod -R 777
的操作,使您的所有文件都可执行 . 但在大多数项目中 most files don't need and should not be executable for security reasons .解决此类情况的正确方法是分别处理文件夹和文件权限,例如:
如果你这样做,你将永远不需要使用
core.fileMode
,除非在非常罕见的环境中 .工作树中的undo模式更改:
或者在mingw-git中
如果要为所有存储库设置此选项,请使用
--global
选项 .如果这不起作用,您可能正在使用更新版本的git,请尝试使用
--add
选项 .如果你在没有--global选项的情况下运行它,并且你的工作目录不是repo,你就会得到
如果
不适合你,手动完成:
cd进入.git文件夹:
编辑配置文件:
将true更改为false
保存,退出,转到上层文件夹:
重新启动git
你完成了!
添加到Greg Hewgill answer(使用
core.fileMode
配置变量):您可以使用git update-index的
--chmod=(-|+)x
选项("git add"的低级版本)来更改索引中的执行权限,如果您使用"git commit"(而不是"git commit -a"),则从中获取该权限 .您可以全局配置它:
git config --global core.filemode false
如果上述方法不适合您,原因可能是您的本地配置会覆盖全局配置 .
删除本地配置以使全局配置生效:
git config --unset core.filemode
或者,您可以将本地配置更改为正确的值:
git config core.filemode false
如果您已经使用了 chmod 命令,则检查文件的差异,它显示以前的文件模式和当前文件模式,例如:
新模式:755
旧模式:644
使用以下命令设置所有文件的旧模式
sudo chmod 644 .
现在使用命令或手动将core.fileMode设置为配置文件中的false .
然后应用chmod命令来更改所有文件的权限,例如
并再次将core.fileMode设置为true .
对于最佳实践,请不要始终将core.fileMode保留为false .
如果要在递归的配置文件中将filemode设置为false(包括子模块):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
通过定义以下别名(在〜/ .gitconfig中),您可以轻松地临时禁用fileMode per git命令:
当此别名以git命令作为前缀时,文件模式更改将不会显示将显示它们的命令 . 例如:
Simple solution:
在项目文件夹中点击 Simple commend ( it won`t remove your original changes) ...它只会 remove changes 当您更改 done 时 done
推荐如下:
git config core.fileMode false
Why this all unnecessary file get modified: 因为您已通过推荐更改了项目文件夹权限 sudo chmod -R 777 ./yourProjectFolder
你什么时候检查你做了什么?你在使用 git diff filename 时发现如下
这对我有用:
或反向,具体取决于您的操作系统