我如何让Git忽略文件模式(chmod)更改?

我有一个项目,在开发过程中,我必须使用chmod将文件的模式更改为777,但在主要的回购中不应更改。

Git采用了chmod -R 777 . 并将所有文件标记为已更改。 有没有办法让Git忽略对文件进行的模式更改?


尝试:

git config core.fileMode false

从git-config(1):

core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

-c标志可用于为一次性命令设置此选项:

git -c core.fileMode=false diff

--global标志将使其成为登录用户的默认行为。

git config --global core.fileMode false

警告

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 ,除非在非常罕见的环境中。


在工作树中撤消模式更改:

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'n' chmod -x

或者在mingw-git中

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'n' chmod -x

如果要为所有回购设置此选项,请使用--global选项。

git config --global core.filemode false

如果这不起作用,你可能使用更新版本的git,所以试试--add选项。

git config --add --global core.filemode false

如果你没有使用--global选项运行它,并且你的工作目录不是回购站,你会得到

error: could not lock config file .git/config: No such file or directory
链接地址: http://www.djcxy.com/p/781.html

上一篇: How do I make Git ignore file mode (chmod) changes?

下一篇: Need an unordered list without any bullets