Я и мои коллеги всегда боролись с этой проблемой. Это довольно хорошо документировано (некоторые ссылки в конце страницы), но пока я не смог это исправить. Мы используем код С#, используя visual studio 2013.
Всякий раз, когда мы объединяем две ветки, у нас есть множество "изменений", в которых файл полностью заменяется одинаковым. Из того, что я мог читать в Интернете, я почти уверен, что это связано с проблемой окончания строки.
Следующий ответ - тот, который помог мне больше всего. В первый раз, когда я выполнил шаги, он мог найти только один файл, который будет нормализован, а именно файл.gitattributes. Но затем я заменил этот файл на файл ниже в качестве первого шага, и файлы, которые, как ожидается, будут нормализованы, были найдены. Все это было сделано в моем местном отделении.
# Set the default behaviour, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare the text files you want to always be normalised and converted
# to native line endings on checkout.
*.cs text
*.json text
*.html text
*.csproj text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
Я прошел следующие шаги, и после ввода команды я получил ожидаемые сообщения (ниже): "git add -u"
сообщение:
предупреждение: CRLF будет заменен на LF в (...)
Однако, когда я переключился на главную ветвь и обновился из своего локального ветки, несколько файлов были заменены. Я попытался создать тот же файл.gitattributes в главной ветке и повторить шаги, но файлы, которые должны были быть нормализованы, не были найдены после команды "git status", и слияние всегда выполнялось по-прежнему, заменяя несколько файлов идентичными.
Что я делаю неправильно?
Проблема заключалась в том, что я не синхронизовал (раздвинул) мою ветвь кода с файлом gitattributes в репозиторий, я просто сделал это. Поскольку я работал на местном уровне, я думал, что этого достаточно. Но это не так, и слияние получало предыдущую версию кода без файла gitattributes. Эта проблема была очень наивной, но поскольку доступная документация, которую я цитировал выше, не помогла, я опубликую свой собственный учебник ниже, что может помочь будущим github noobs совершить ту же ошибку. Мой учебник в основном основан на этой теме.
Для этого урока позвольте предположить существование рабочей ветки и ведущей ветки. Идея состоит в том, чтобы вставить файл gitattributes в рабочую ветвь, загрузить код для главной ветки и обновить этот код с рабочей веткой.
# Add the following content to a file on the root of the repository in the
# working branch, and name it .gitattributes
----------------------------------------------------------------------------
# Set the default behaviour, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare the text files you want to always be normalised and converted
# to native line endings on checkout.
*.cs text
*.json text
*.html text
*.csproj text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
----------------------------------------------------------------------------
# From the root of the repository in the working branch remove everything from the index
# (don't forget the '.')
git rm --cached -r .
# Re-add all the deleted files to the index
# (You should get lots of messages like:
# warning: CRLF will be replaced by LF in <file>.)
git diff --cached --name-only -z | xargs -0 git add
# Commit
git commit -m "Fixed the line ending issue"
# Sync the code
# Switch to the master branch
# Update (merge) from the working branch