По какой-то причине, когда я изначально извлекал данные из моего репозитория для моего git-проекта, я получил тонну файлов в моей рабочей копии, в которых не было внесено никаких заметных изменений, но они постоянно появляются в моем unstaged changes
регионе.
Я использую Git Gui на Windows XP, и когда я иду, чтобы посмотреть файл, чтобы увидеть, что изменилось. Все, что я вижу, это:
old mode 100755
new mode 100644
Кто-нибудь знает что это значит?
Как я могу получить эти файлы из моего списка неповрежденных изменений? (Очень раздражает, что приходится просматривать сотни файлов, просто чтобы выбрать файлы, которые я недавно отредактировал и хочу зафиксировать).
git update-index --chmod=(+|-)x <path>
.git config --global ...
эту опцию в глобальном конфигурационном файле.Установка
core.filemode
в false работает, но убедитесь, что настройки в~/.gitconfig
не переопределяются в.git/config
.источник
~/.gitconfig
файлу!git config --list --show-origin | sls filemode
или в линуксеgit config --list --show-origin | grep filemode
. Это покажет вам, где вам нужно внести коррективы.Я столкнулся с этой проблемой, когда пару раз копировал git-репозиторий с рабочими файлами со старого жесткого диска. Проблема связана с тем, что владелец и права доступа изменились со старого диска / машины на новый. Короче говоря, выполните следующие команды, чтобы исправить ситуацию ( благодаря этому ответу суперпользователя ):
Первая команда на самом деле разрешит различия, о которых сообщал git diff, но лишит вас возможности перечислять каталоги, поэтому
ls ./
не работает сls: .: Permission denied
. Чтобы это исправить:Плохая новость заключается в том, что если у вас есть какие-либо файлы, которые вы хотите сохранить исполняемыми, например,
.sh
скрипты, вам придется их отменить. Вы можете сделать это с помощью следующей команды для каждого файла:источник
git config core.filemode
установлено значениеtrue
, иначе изменения разрешений не будут обнаружены. Мне также нужно было обновлять индекс git после каждого изменения, чтобы поднять его.Обычно происходит, когда репо клонируется между компьютерами Windows и Linux / Unix.
Просто скажите git игнорировать изменение файлового режима, вот несколько способов:
Конфигурация ТОЛЬКО для текущего репо:
Конфиг глобально:
Добавьте в ~ / .gitconfig:
Просто выберите один из них.
источник
Кажется, вы изменили некоторые разрешения каталога. Я сделал следующие шаги, чтобы восстановить его.
источник
Вы можете попробовать git reset --hard HEAD, чтобы вернуть репо в ожидаемое состояние по умолчанию.
источник
git reset --hard HEAD
работал отлично для меня. спасибоЯ столкнулся с той же проблемой. И это спасет мою жизнь: https://gist.github.com/jtdp/5443498
источник
Это происходит, когда вы извлекаете и все файлы были исполняемыми в удаленном хранилище. Если снова сделать их исполняемыми, все снова станет нормальным.
Вам может потребоваться сделать:
вместо этого для файлов, которые не были определены как исполняемые и которые были изменены из-за вышеуказанной операции. Есть лучший способ сделать это, но это очень быстрое и грязное исправление.
источник
Вы можете использовать следующую команду, чтобы изменить режим файла обратно.
git add --chmod=+x -- filename
Тогда зафиксируй ветку.источник
У меня был только один проблемный файл с измененными разрешениями. Чтобы откатить его по отдельности, я просто удалил его вручную
rm <file>
а затем сделал проверку, чтобы вытащить свежую копию.К счастью, я еще не поставил это.
Если бы я имел, я мог бы бежать
git reset -- <file>
до запускаgit checkout -- <file>
источник
Я только столкнулся с этой проблемой, рассеивая мою ветку с хозяином. Git вернул одну ошибку 'mode', когда я ожидал, что моя ветвь будет идентична master. Я исправил, удалив файл, а затем снова включил мастер.
Сначала я запустил diff:
Это вернулось:
Затем я запустил следующее, чтобы исправить:
После этого
git diff
не вернулось различий между my-branch и master.источник