How do I remove files saying "old mode 100755 new mode 100644" from unstaged changes in Git?
Solution 1:
That looks like unix file permissions modes to me (755
=rwxr-xr-x
, 644
=rw-r--r--
) - the old mode included the +x (executable) flag, the new mode doesn't.
This msysgit issue's replies suggests setting core.filemode to false in order to get rid of the issue:
git config core.filemode false
Solution 2:
Setting core.filemode
to false does work, but make sure the settings in ~/.gitconfig
aren't being overridden by those in .git/config
.
Solution 3:
I've encountered this problem when copying a git repo with working files from an old hard drive a couple times. The problem stems from the fact that the owner and permissions changed from the old drive/machine to the new one. The long and short of it is, run the following commands to straighten things out (thanks to this superuser answer):
sudo chmod -R -x . # remove the executable bit from all files
The former command will actually resolve the differences that git diff reported, but will revoke your ability to list the directories, so ls ./
fails with ls: .: Permission denied
. To fix that:
sudo chmod -R +X . # add the executable bit only for directories
The bad news is that if you do have any files you want to keep executable, such as .sh
scripts, you'll need to revert those. You can do that with the following command for each file:
chmod +x ./build.sh # where build.sh is the file you want to make executable again
Solution 4:
This usually happens when the repo is cloned between Windows and Linux/Unix machines.
Just tell git to ignore filemode change. Here are several ways to do so:
-
Config ONLY for current repo:
git config core.filemode false
-
Config globally:
git config --global core.filemode false
-
Add in ~/.gitconfig:
[core] filemode = false
Just select one of them.