Подтвердить что ты не робот

Почему следующая команда непоследовательна в моем репозитории?

В моем репозитории, который имеет смешанные окончания строк. Я использую Mac OS X и git 1.8.3.1

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

С этой целью я проверил последнее изменение:

git checkout origin/develop
git reset --hard
git rm -rf .
git rm --cached -rf .
rm .git/index
git checkout HEAD .gitattributes
git reset --hard
git status

Теперь git rm --cached -rf . вызовет ошибку, но я очень параноик с приведенной выше командой. (На моей машине эти команды были на одной строке, игнорируя коды выхода)

Я повторяю команду много раз. (Т.е. ВВЕРХ, ВВОД, ВВЕРХ, ВВЕРХ, ВВОД,...)

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

Однако, примерно раз в десять раз, я нахожу, что получаю три файла (которые, кажется, правильно перенормированы). В оставшиеся времена нет перенормировки.

Выход такого файла, который перенормирован (Ie, is 'modified'), равен:

$ file source/RemoveDuplications.cs
source/RemoveDuplications.cs: UTF-8 Unicode (with BOM) C++ program text, with CRLF line terminators

В моем файле атрибутов git содержится довольно много записей, но соответствующий находится здесь:

* text=auto
*.cs text eol=crlf

Что здесь может быть не так?

4b9b3361

Ответ 1

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

git rm --cached -r .  # remove everything from the index
git reset --hard      # replace files w/ corrected line endings
git add .             # stage all changes
git commit -m "Normalize line endings"

Если это не работает для вас, я повторно проверил значения core.autocrlf и .gitattributes. Вам может понадобиться очистить их, reset вашу оболочку, снова проверить репо, а затем reset, чтобы получить нужное поведение.

Вот некоторые другие ресурсы, которые могут помочь:

Ответ 2

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