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

ID : 275

viewed : 53

Tags : gitignorechmodgit

Top 5 Answer for How do I make Git ignore file mode (chmod) changes?

vote vote

91

Try:

git config core.fileMode false 

From git-config(1):

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). 

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 

Changes of the global setting won't be applied to existing repositories. Additionally, git clone and git init explicitly set core.fileMode to true in the repo config as discussed in Git global core.fileMode false overridden locally on clone

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.

vote vote

88

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 
vote vote

78

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 
vote vote

63

If

git config --global core.filemode false 

does not work for you, do it manually:

cd into yourLovelyProject folder 

cd into .git folder:

cd .git 

edit the config file:

nano config 

change true to false

[core]         repositoryformatversion = 0         filemode = true 

->

[core]         repositoryformatversion = 0         filemode = false 

save, exit, go to upper folder:

cd .. 

reinit the git

git init 

you are done!

vote vote

58

Adding to Greg Hewgill answer (of using core.fileMode config variable):

You can use --chmod=(-|+)x option of git update-index (low-level version of "git add") to change execute permissions in the index, from where it would be picked up if you use "git commit" (and not "git commit -a").

Top 3 video Explaining How do I make Git ignore file mode (chmod) changes?

Related QUESTION?