For some reason, when I initially did a pull from the repository for a git project of mine,
I got a ton of files in my working copy that have no discernible changes made to them, but keep showing up in my unstaged changes
area.
I'm using Git Gui on Windows xp, and when I go to look at the file to see what has changed. All I see is:
old mode 100755
new mode 100644
Does anyone know what this means?
How can I get these files out of my list of unstaged changes? (Very annoying to have to go through 100's of files, just to pick out files I've recently edited and want to commit).
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):
The former command will actually resolve the differences that git diff reported, but will revoke your ability to list the directories, so
ls ./
fails withls: .: Permission denied
. To fix that: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:Usually happens when the repo is cloned between Windows and Linux/Unix machines.
Just tell git to ignore filemode change, here are several ways:
Config ONLY for current repo:
Config globally:
Add in ~/.gitconfig:
Just select one of them.
You can use the following command to change your file mode back.
git add --chmod=+x -- filename
Then commit to the branch.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:
This happens when you pull and all files were executable in the remote repository. Making them executable again will set everything back to normal again.
You might need to do:
instead, for files that was not set as executable and that was changed because of the above operation. There is a better way to do this but this is just a very quick and dirty fix.
Setting
core.filemode
to false does work, but make sure the settings in~/.gitconfig
aren't being overridden by those in.git/config
.