Git is not ignoring file mode changes (chmod), why?
Solution 1
Local config overrides global config settings
The diff output in the question indicates that the local git config has filemode
set to true. This is probably expected behavior since the default config created for a repo defines this:
-> git init
Initialized empty Git repository in /tmp/foo/.git/
-> cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
Changing the global config for filemode
does not affect this, and so in fact git config --global core.filemode false
doesn't do anything because this is always overridden locally.
Therefore, to change the filemode for this repo, change the local config:
$ git config core.filemode false
$ git config core.filemode
false
Given this question/answer there's a possibility it is supposed to work, although it didn't for me.
Solution 2
You can verify what the local setting is with this: git config --local --list
...and set a local value like this:
git config --local core.filemode false
Related videos on Youtube
ReynierPM
A passionate programmer and web developer with a background in front-end and back-end development, which is what he's been doing for over eight years. I had experience in web development using PHP (mostly), MySQL and JavaScript. I follows two major principles everyday work: beauty and simplicity. I believes everyone should learn something new every day. While I'm not working, I spends time coding personal projects, learning, watching screen casts, blogging, etc. Some specific areas of interest for me include cloud computing and anything related to web development among other like system and database administration.
Updated on September 15, 2022Comments
-
ReynierPM over 1 year
Before start I should say I already looked this post and this one as well but for some reason the solutions provided there aren't working for me. My repository is under
~/sources
so every command was run from that path. This is what I have done:Change the filemode to false:
$ git config --global core.filemode false
Check global configuration:
$ git config --list ... core.filemode=false core.repositoryformatversion=0 core.bare=false core.logallrefupdates=true ...
Reinitialize the repository:
$ git init Reinitialized existing Git repository in /home/rperez/sources/.git/
Check what needs to be added|committed:
$ git status
And I get a list having all the files from the repository.
I am using:
$ git --version git version 2.9.3
UPDATE: added git diff for two different files
$ git status ... modified: testing/test-valid-swasset-update.php ... Untracked files: (use "git add <file>..." to include in what will be committed) library/mpdf60/ttfontdata/dejavusanscondensedI.GDEFdata.php ...
git diff
output from the files above:$ git diff testing/test-valid-swasset-update.php diff --git a/testing/test-valid-swasset-update.php b/testing/test-valid-swasset-update.php old mode 100755 new mode 100644
What I am missing here?