如何让Git忽略文件模式(chmod)的变化?

How do I make Git ignore file mode (chmod) changes?

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

Git接收chmod -R 777 .并将所有文件标记为已更改。有没有办法让git忽略对文件所做的模式更改?


Try:

1
git config core.fileMode false

From GIT-CONGG(1):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
core.fileMode
    Tells Git if the executable bit of files in the working tree
    is to be honored.

    Some filesystems lose the executable bit when a file that is
    marked as executable is checked out, or checks out a
    non-executable file with executable bit on. git-clone(1)
    or git-init(1) probe the filesystem to see if it handles the
    executable bit correctly and this variable is automatically
    set as necessary.

    A repository, however, may be on a filesystem that handles
    the filemode correctly, and this variable is set to true when
    created, but later may be made accessible from another
    environment that loses the filemode (e.g. exporting ext4
    via CIFS mount, visiting a Cygwin created repository with Git
    for Windows or Eclipse). In such a case it may be necessary
    to set this variable to false. See git-update-index(1).

    The default is true (when core.filemode is not specified
    in the config file).

可使用旗帜为一次以上的指挥官设置此选项:

ZZU1

而旗帜会使它成为用户测井的缺陷行为。

1
git config --global core.fileMode false

报警

这不是最好的做法,应该小心使用。此设置仅限于模式可执行位,而不包括读取/写入位。在很多情况下,你认为你需要这个设置,因为你做了一些像EDOCX1这样的事情,使你所有的可执行文件。但在大多数项目中,文件不需要也不应为安全原因而执行。

The proper way to solve this kind of situation is to handle folder and file permission separately,with something like:

1
2
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


UNDO Mode Change in Working Tree:

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

奴隶性爱分类广告

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


如果你想把这个选项留给你所有的休息,使用--global选项。

1
git config --global core.fileMode false

如果这不适合你的话,可能用一个新版本的GIT,所以尝试--add

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

如果你没有这个选择,你的工作目录就不是一个反馈,你会得到

1
error: could not lock config file .git/config: No such file or directory


if

1
git config --global core.fileMode false

Does not work for you,do it manually:

1
cd into yourLovelyProject folder

CD Into Git Folder:

1
cd .git

编辑文件:

1
nano config

改变真相

1
2
3
[core]
        repositoryformatversion = 0
        filemode = true

->

1
2
3
[core]
        repositoryformatversion = 0
        filemode = false

Save,exit,go to upper folder:

1
cd ..

重新开始

1
git init

你真行!


Adding to Greg Hewgill answer(of using EDOCX1&2).config variable:

您可以使用GIT更新索引(GIT add的低水平版本)的选项,以更改索引中的执行许可,如果您使用GIT commit(而不是GIT commit-a),则从哪里取出。


你可以配置它

法国电力公司

如果上面没有为你工作,原因可能是你的本地配置超越了全球配置。

远程您的本地配置以实现全球配置的效果:

法国电力公司

另一方面,您可以将您的本地配置改变为右值:

法国电力公司


如果您使用了CHMOD命令,在检查文件的不同时,它会显示前置文件模式和当前文件模式,例如:

新模式:755

老时尚

使用下游命令设置所有文件的旧模式

法国电力公司

现在设置核心.filemode to false in confile either using command or manually.

1
git config core.fileMode false

然后应用Chmod命令改变所有文件的权限,例如

1
sudo chmod 755 .

再一次设置核心,为真实的模式。

1
git config core.fileMode true

For best practices don't keep core.filemode false always.


By defining the following alias(in ~/.gitconging)you can easily temporarily disable the filemode per git command:

1
nfm ="!f(){ git -c core.fileMode=false $@; };f"

当这个别名预定给GIT指挥部时,文件模式的改变不会以其他方式显示出来。For example:

1
git nfm status

如果你想设置Filemot to false in confiles recursively(including subbodules):法国电力公司


简单的解决办法

这个简单的评论在项目文件中(它不会改变你的原始更改).它只会改变你改变项目文件允许时所做的改变

Comment is below:

配置核心.filemode false

为什么所有不需要的文件都要修改:因为你改变了项目折叠许可评论Sudo Chmod-R 777./Yourprojectfolder

你什么时候才能改变你没有做的事?你在下面找到了不同的文件

MGX1〔0〕


This works for me:

1
find . -type f -exec chmod a-x {} \;

或反向,取决于你的操作系统

1
find . -type f -exec chmod a+x {} \;