Я согласен с Ричардом, что это может проистекать из проблемы чувствительности / нечувствительности к регистру.Я решу эту проблему с помощью этого ответа.
Задача
Если коммит git содержит два файла, имена которых отличаются только регистром, извлеките этот коммит в рабочий каталогв нечувствительной к регистру файловой системе возникают проблемы.Если коммит содержит, например, myfile
и myFILE
, git создаст myfile
, а затем, когда он перейдет к созданию / обновлению myFILE
, файловая система даст ему дескриптор myfile
.
Это становится очевидным, если myfile и myFILE имеют разное содержимое в хранилище.При проверке файлов второй «выигрывает», а физический файл содержит содержимое второго файла.Когда вы делаете git status
, оба файла в индексе сравниваются с одним и тем же файлом в рабочем каталоге, а для потерянного файла содержимое не совпадает.
Проверка проблемы
Вы можете проверить хранилище в чувствительной к регистру системе, чтобы проанализировать и разрешить все, что там есть.В качестве альтернативы, git предоставляет достаточно инструментов, чтобы справиться с этим в вашей текущей системе.
Простой способ выяснить, действительно ли это проблема, состоит в том, чтобы сделать тривиальное изменение одного из перечисленных файлов.Затем выполнение git status
должно показать оба варианта имени файла, поскольку рабочая версия каталога не совпадает ни с одной из версий в индексе:
$ echo >> public/javascripts/app/fckeditor/fckpackager.xml
$ git status
Possible outcome:
# On branch master
# 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: ...
# modified: public/javascripts/app/fckeditor/fckpackager.xml
# modified: public/javascripts/app/fckeditor/FCKPACKAGER.xml
Или вы также можете использовать git ls-files
, чтобы увидеть, что виндекс:
$ git ls-files public/javascripts/app/fckeditor/fckpackager.xml
public/javascripts/app/fckeditor/fckpackager.xml
public/javascripts/app/fckeditor/FCKPACKAGER.xml
Если вы хотите точно увидеть, что находится в каждом файле, вы можете использовать git checkout-index
, чтобы извлечь файл из индекса и сохранить его где-нибудь (используя префикс для записи содержимого).для разделения файлов):
$ git checkout-index --prefix=v1/ public/javascripts/app/fckeditor/fckpackager.xml
$ git checkout-index --prefix=v2/ public/javascripts/app/fckeditor/FCKPACKAGER.xml
Разрешение
Как только вы выяснили, какой вариант каждого файла вы хотите удалить, вы можете удалить его из индекса, используяgit rm --cached
, который учитывает регистр заданных ему путей:
$ git rm --cached public/javascripts/app/fckeditor/FCKPACKAGER.xml
, затем фиксируйте, и при необходимости сделайте еще git reset --hard
Однако ваш комментарий о ведении журналаВ качестве другого пользователя и получение другого результата указывает, что может быть другая проблема.В таком случае я бы увидел, есть ли какие-либо различия в пользовательских файлах .gitconfig.