Не могу исправить проблему с окончаниями строк в git

2

Я и мои коллеги всегда боролись с этой проблемой. Это довольно хорошо документировано (некоторые ссылки в конце страницы), но пока я не смог это исправить. Мы используем код С#, используя 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", и слияние всегда выполнялось по-прежнему, заменяя несколько файлов идентичными.

Что я делаю неправильно?

Переполнение стека

Официальное решение github

  • 0
    Вы пытались обновить свои локальные параметры конфигурации git
  • 1
    да. Я попытался с помощью этой команды: "git config --global core.autocrlf true" в обеих ветвях до слияния, но результат был одинаковым
Показать ещё 2 комментария
Теги:
visual-studio
github

1 ответ

2

Проблема заключалась в том, что я не синхронизовал (раздвинул) мою ветвь кода с файлом 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню