Как удалить файлы, говорящие "старый режим 100755 новый режим 100644" из неустановленных изменений в Git?

по какой-то причине, когда я изначально сделал pull из репозитория для моего проекта git, У меня есть тонна файлов в моей рабочей копии, которые не имеют заметных изменений, но продолжают появляться в моем unstaged changes зона.

Я использую Git Gui в Windows xp, и когда я иду, чтобы посмотреть на файл, чтобы увидеть, что изменилось. Все, что я вижу, это:--3-->

old mode 100755  
new mode 100644  

кто-нибудь знает, что это значит?

Как я могу получить эти файлы из моего списка неиндексированных изменений? (Очень раздражает, чтобы пройти через 100 файлов, просто чтобы выбрать файлы, которые я недавно отредактировал и хочу зафиксировать).

7 ответов


это похоже на режимы разрешений файлов unix для меня (755=rwxr-xr-x, 644=rw-r--r--) - старый режим включал флаг +x (исполняемый файл), новый режим-нет.

ответы на этот вопрос msysgit предлагает установить ядро.filemode в false, чтобы избавиться от проблемы:

git config core.filemode false

настройки ядра.filemode в false работает. Но вы убедитесь, что настройки в ~/.gitconfig не будут переопределены теми, кто внутри .git / config.


я столкнулся с этой проблемой при копировании репозитория git с рабочими файлами со старого жесткого диска пару раз. Проблема связана с тем, что владелец и разрешения изменились со старого диска/машины на новый. Короче говоря, выполните следующие команды, чтобы выправить ситуацию (благодаря этому ответ суперпользователя):

sudo chmod -R -x . # remove the executable bit from all files

бывшая команда фактически разрешит различия, о которых сообщил git diff, но отменит ваш возможность перечислить каталоги, так что ls ./ выдает ls: .: Permission denied. Чтобы исправить это:

sudo chmod -R +X . # add the executable bit only for directories

плохая новость заключается в том, что если у вас есть какие-либо файлы, которые вы хотите сохранить исполняемый файл, например .sh скрипты, вам нужно будет вернуть их. Вы можете сделать это с помощью следующей команды для каждого файла:

chmod +x ./build.sh # where build.sh is the file you want to make executable again

вы можете попробовать git reset --жесткая головка сброс РЕПО в ожидаемое состояние по умолчанию.


похоже, вы изменили некоторые разрешения каталога. Я сделал следующие шаги, чтобы восстановить его.

$  git diff > backup-diff.txt                ### in case you have some other code changes 

$  git checkout .

это происходит, когда вы вытаскиваете и все файлы исполняются в удаленном репозитории. Сделав их исполняемыми снова, все снова вернется в нормальное состояние.

chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder

вы должны:

chmod -x <file> // Removes execute bit

вместо этого для файлов, которые не были установлены как исполняемые и которые были изменены из-за вышеуказанной операции. Есть лучший способ сделать это, но это просто очень быстрый и грязный исправить.


у меня был только один хлопотный файл с измененными разрешениями. Чтобы откатить его по отдельности, я просто удалил его вручную с помощью rm <file> а затем сделал проверку, чтобы вытащить новую копию.

к счастью, я еще не поставил его.

Если бы я был, я мог бы бежать git reset -- <file> перед git checkout -- <file>