How do I make Git ignore file mode (chmod) changes?
I have a project in which I have to change the mode of files with chmod
to 777 while developing, but which should not change in the main repo.
Git picks up on chmod -R 777 .
and marks all files as changed. Is there a way to make Git ignore mode changes that have been made to files?
Try:
git config core.fileMode false
From 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.
The -c
flag can be used to set this option for one-off commands:
git -c core.fileMode=false diff
And the --global
flag will make it be the default behavior for the logged in user.
git config --global core.fileMode false
Warning
core.fileMode
is not the best practice and should be used carefully. This setting only covers the executable bit of mode and never the read/write bits. In many cases you think you need this setting because you did something like chmod -R 777
, making all your files executable. But in most projects most files don't need and should not be executable for security reasons .
The proper way to solve this kind of situation is to handle folder and file permission separately, with something like:
find . -type d -exec chmod a+rwx {} ; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} ; # Make files read/write
If you do that, you'll never need to use core.fileMode
, except in very rare environment.
undo mode change in working tree:
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
Or in 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
If you want to set this option for all of your repos, use the --global
option.
git config --global core.filemode false
If this does not work you are probably using a newer version of git so try the --add
option.
git config --add --global core.filemode false
If you run it without the --global option and your working directory is not a repo, you'll get
error: could not lock config file .git/config: No such file or directory
链接地址: http://www.djcxy.com/p/782.html
上一篇: 通过。了解Python super()