Git is not ignoring file mode changes (chmod), why?

11,230

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

Share:
11,230

Related videos on Youtube

ReynierPM
Author by

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, 2022

Comments

  • ReynierPM
    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?