我有一个项目,在开发时,我必须将chmod文件的模式更改为777,但在主库中不应更改。
Git拿起了chmod-R777。并将所有文件标记为已更改。有没有办法让Git忽略对文件所做的模式更改?
我有一个项目,在开发时,我必须将chmod文件的模式更改为777,但在主库中不应更改。
Git拿起了chmod-R777。并将所有文件标记为已更改。有没有办法让Git忽略对文件所做的模式更改?
当前回答
如果要在配置文件中递归地(包括子模块)将filemode设置为false:find-name config | xargs sed-i-e's/filemode=true/filemode=false/'
其他回答
这对我有用:
find . -type f -exec chmod a-x {} \;
或相反,取决于您的操作系统
find . -type f -exec chmod a+x {} \;
如果您已经使用了chmod命令,请检查文件的差异,它显示以前的文件模式和当前的文件模式,例如:
新模式:755
旧模式:644
使用以下命令设置所有文件的旧模式
sudo chmod 644。
现在使用命令或手动在配置文件中将core.fileMode设置为false。
git config core.fileMode false
然后应用chmod命令更改所有文件的权限,例如
sudo chmod 755 .
并再次将core.fileMode设置为true。
git config core.fileMode true
对于最佳实践,不要始终保持core.fileMode为false。
这可能有效:git-config-core.fileMode false
If
git config --global core.filemode false
不适用于您,请手动执行:
cd into yourLovelyProject folder
cd到.git文件夹:
cd .git
编辑配置文件:
nano config
将true更改为false
[core]
repositoryformatversion = 0
filemode = true
->
[core]
repositoryformatversion = 0
filemode = false
保存,退出,转到上层文件夹:
cd ..
勒紧吉特
git init
你完蛋了!
Try:
git config core.fileMode false
从git-config(1):
core.fileMode(核心文件模式)告诉Git工作树中文件的可执行位是值得尊敬的。某些文件系统在标记为可执行的文件已签出,或签出.git clone(1)上具有可执行位的不可执行文件或gitinit(1)探测文件系统,看看它是否处理可执行位正确,此变量自动根据需要设置。然而,存储库可能位于处理文件模式正确,并且当创建,但以后可以从另一个失去文件模式的环境(例如,导出ext4通过CIFS装载,使用Git访问Cygwin创建的存储库对于Windows或Eclipse)。在这种情况下,可能需要将此变量设置为false。参见git更新索引(1)。默认值为true(未指定core.filemode时)在配置文件中)。
-c标志可用于为一次性命令设置此选项:
git -c core.fileMode=false diff
键入-c core.fileMode=false可能会很麻烦,因此您可以为所有git repo或仅为一个git rep设置此标志:
# this will set your the flag for your user for all git repos (modifies `$HOME/.gitconfig`)
# WARNING: this will be override by local config, fileMode value is automatically selected with latest version of git.
# This mean that if git detect your current filesystem is compatible it will set local core.fileMode to true when you clone or init a repository.
# Tool like cygwin emulation will be detected as compatible and so your local setting WILL BE SET to true no matter what you set in global setting.
git config --global core.fileMode false
# this will set the flag for one git repo (modifies `$current_git_repo/.git/config`)
git config core.fileMode false
此外,git clone和git init在repo配置中显式地将core.fileMode设置为true,正如git全局core.fileModefalse在clone上本地重写所述
警告
core.fileMode不是最佳实践,应谨慎使用。此设置仅覆盖模式的可执行位,而不覆盖读/写位。在许多情况下,您认为需要此设置,因为您做了类似chmod-R 777的操作,使所有文件都可执行。但在大多数项目中,出于安全原因,大多数文件不需要,也不应该是可执行的。
解决这种情况的正确方法是分别处理文件夹和文件权限,例如:
find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \; # Make files read/write
如果您这样做,您将永远不需要使用core.fileMode,除非在非常罕见的环境中。