Как удалить файлы, говорящие "старый режим 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 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>