Несовместимые окончания строк с использованием git-svn с коммитами из обеих VCS
У меня есть удаленный репозиторий SVN и локальный репозиторий git. Используя git-svn, я связал git с SVN и успешно использую git svn rebase
, git svn dcommit
тянуть и толкать в удаленном хранилище SVN.
Однако, когда другие люди проверяют мои ранее отредактированные файлы с SVN
и попробуйте открыть их в VS2010, они получат диалоговое окно с сообщением о том, что окончания строк несовместимы.
Я прочитал несколько вещей о core.safecrlf
опция в git config, но исправит ли это мою проблему? У меня есть еще несколько человек, которые регистрируются, но у нас у всех запущены окна - я подумал, что окончания строк будут одинаковыми?
Будет установка core.safecrlf
сохранить одинаковые типы концов строк при оформлении заказа и при фиксации?
3 ответа
Я занимался этой же проблемой в последнее время. По умолчанию Git в Windows устанавливает core.autocrlf = true. Что происходит, так это то, что ваши файлы извлекаются из репозитория SVN с окончаниями строк CRLF, но фиксируются с окончаниями строк в стиле Unix (LF). Когда вы вносите эти изменения, я полагаю, что файлы отправляются на сервер SVN с окончаниями строк в стиле Unix. Теперь, когда кто-то проверяет эти файлы, используя SVN, преобразование конца строки не выполняется.
Вы можете установить core.autocrlf = false, чтобы преобразование не выполнялось. Если вы все работаете в Windows, у вас не должно возникнуть никаких проблем. Если вы делитесь репозиторием SVN с пользователями * nix, вполне вероятно, что у вас начнутся несоответствия. Это причина для опции autocrlf. Репозитории должны оставаться согласованными, и поскольку Linux не любит хорошо играть с CRLF, для этого autocrlf должно быть установлено значение true.
Проблема с окончаниями строк - это хорошо известная головная боль git-svn. Я бы порекомендовал использовать SmartGit для работы с вашим репозиторием. Я уважаю значение svn:eol-style для использования правильного EOL в Git (переводя его в соответствующее значение.gitattirbutes). Вы также можете контролировать значение svn:eol-style при отправке в SVN с помощью соответствующих изменений.gitattirbutes.
Если у вас есть доступ к серверу, возможен другой подход: просто установите SubGit на свой SVN-сервер. Затем на сервере будет создан связанный репозиторий Git, так что каждый толчок к нему будет автоматически транслироваться в SVN и наоборот. Он также переводит svn:eol-style в.gitattirbutes.
Поэтому я бы порекомендовал одно из этих решений, но не git-svn, который (как я знаю) мучительно медленный в Windows.
Вот статья GitHub, которая описывает ваш выбор для обработки символов конца строки в Git:
https://help.github.com/articles/dealing-with-line-endings
По сути, Git помогает конвертировать EOL на разных ОС. SVN имеет аналогичную функциональность. Вам нужно будет убедиться, что они установлены в согласованном порядке.