git сообщает мне, что мои файлы изменены, но я не вижу разницы

Я только что установил последнюю версию Git (1.9.5), и внезапно он сообщает мне, что мое рабочее дерево не чистое (изменения не поэтапно), но я не вижу никаких изменений ни в одном из моих файлов ни в одном инструменте сравнения. (Я пробовал встроенные Tortoise и Visual Studio). Когда я запускаю git status, он говорит:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   inc/i_lab_orders.asp
        modified:   lab_order_list.asp
        modified:   slib/lab_order_lib.asp

Однако инструмент diff в Git GUI сообщает мне, что все строки изменены, но я не вижу никакой разницы. То же самое с diff для git bash.

Запуск git reset --hard совершенно не помогает - команда выполняется без проблем, но в итоге у меня остались те же "измененные" файлы.

ОБНОВЛЕНИЕ: core.autocrlf ложно, core.fileMode также ложно. Я также заметил, что файлы, которые, как сообщается, были изменены, - это именно те файлы, которые были зафиксированы при последней фиксации.

Я на винде.


person ulu    schedule 26.02.2015    source источник
comment
Я предполагаю, что это как-то связано с autocrlf.   -  person Dietrich Epp    schedule 26.02.2015
comment
All lines are changed - хороший индикатор проблем с окончанием строки   -  person eckes    schedule 26.02.2015


Ответы (3)


Добро пожаловать в ад. Приятного вам пребывания :-)

Разница, которую вы не видите, - это окончание строки. Вкратце, вы сказали Git преобразовать все окончания строк в Windows или Unix, и в репо есть файл, который имеет разные окончания строк в репо.

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

Решение: убедитесь, что Git настроен правильно для каждого разработчика, который может push, зафиксируйте файл один раз с правильными окончаниями и получите глупую шляпу для тех, кто создает файлы с неправильными окончаниями строк.

Связанный:

person Aaron Digulla    schedule 26.02.2015

Изменение также может быть изменением файла, но вы можете сказать, что git игнорирует что-то вроде этого.

git config core.fileMode false

Я рекомендую вам использовать gitk

На убунту это просто

sudo apt-get install gitk
person Adam    schedule 26.02.2015

Исправлено путем ручного удаления папки .git \ rebase-merge-failed. Спасибо всем за попытку мне помочь.

ОБНОВЛЕНИЕ. Я также подозреваю, что причина заключалась в том, что в моем файле .gitattributes было text=auto.

person ulu    schedule 03.03.2015