Вопрос по svn, git, git-svn – Можно ли сделать git-svn для обработки CRLF как нативных клиентов Subversion?

9

У меня есть хранилище Subversion, размещенное в Linux, но доступ к которому я когда-либо осуществлял только через Windows-клиенты, поскольку он предназначен для источника большого приложения Windows.

Было бы здорово, если бы я мог работать с этим репозиторием, используя git-svn (предоставленный msysgit).

Я чертовски потратил время, пытаясь заставить репозиторий, чтобы он не застрял в концах оконных стилей.

Послеsvn clone проверка хранилища git с:

core.autocrlf = true shows modifications to any file which actually does use LF in the repository. core.autocrlf = input shows modifications to any file which actually does use LF in the repository. core.autocrlf = false shows modifications to everything.

Какой вариант здесь лучший? Должен ли я использоватьcore.autocrlf = true и совершитьLF вCRLF изменения для затронутых файлов?

Я очень близок к тому, чтобы добавить полотенце и просто поместить свою рабочую копию Subversion в репозиторий git. Это было бы плохим решением, но по крайней мере позволило бы местные отделения и тайники. Очевидно, станет огромной болью продолжать добавлять файлы, когда они добавляются в Subversion.

EDIT: Для тех, кому интересно.git-svn это королевская боль, если вы находитесь на Windows. Ответ Хасена ниже, вероятно, правильный, но я не могу последовать его совету, не вызвав гнев других разработчиков в моей команде.

Я, по сути, отказываюсь от этого вопроса, поскольку он не приведет к разумному результату. Надеемся, что следующее Google Summer of Code привлечет кого-то, кто захочет получить свою «надлежащую поддержку git-svn в Windows». проект. Увидетьhttp://git.or.cz/gitwiki/SoC2009Ideas#Propergit-svnsupportonWindows

Ну, я действительно сбит с толку. Я начал пытаться исправить это снова, но медленная скорость клона svn в Windows заставила меня начать делать это в Linux. Я перенес репо в Windows, затем отключил CRLF и сделал сброс --hard. Теперь у меня, кажется, есть работающий репозиторий git-svn, который ведет себя корректно ... Теперь, чтобы выяснить, какие шаги на самом деле необходимы, чтобы сделать эту работу все время ... Надеюсь, это действительно сработало, и я не столкнусь с проблемами при запуске используй это toholio

Ваш Ответ

6   ответов
1

git-filter-branch надrecode dos..ascii -f. (Это также помогло дляlatin1..utf8 конверсия тоже.)

Но разве это не разрушает историю git annotate? Я считаю, что у меня похожая проблема с OP, и ручное «исправление» файлов после клона просто означает, что я пишу всю историю этих файлов, делая ее бесполезной. Enno
0

Обычно вы хотите установить Core.autocrlf вариант так:

git config core.autocrlf true

Но в соответствии сЭта стать, похоже, он не очень хорошо работает с git-svn. Возможно, стоит попробовать вторую безопасную копию хранилища SVN, чтобы посмотреть, работает ли она.

0

разговоры здесь околоcore.autocrlf.

Я не думаю, что это помогает с проблемой git-svn. Внутри происходит что-то глупое, что делает проверку Windows полезно toholio
6

оставь их как есть. поставилautocrlf вfalse.

Любой полуприличный текстовый редактор в окнах должен уметь обрабатывать строки в стиле Unix.

core.autocrlf = false показывает изменения для всего.

Я думаю, что если ты это сделаешь после факта, это тебе не поможет.

Вам нужно удалить этот репозиторий, установить для autocrlf значение false итогд сделай клон.

Плохие полуприличные редакторы не включают в себя все, что нужно для создания проекта. Глупо, но на данный момент это неподвижный объект. Перед клоном я экспериментировал с разными настройками, включая клонирование на машине с Linux. Я все еще не мог привести вещи в состояние, когда ни git, ни инструменты сборки не заставляли слишком много вещей помечаться как измененные, когда затрагивались только окончания строк. Я дам вам голос, хотя, похоже, это будет работать для большинства людей. toholio
В этом случае преобразуйте все окончания строк в CRLF и передайте в главный репозиторий SVN. hasen
Видимо, этого нельзя допустить. Вздох toholio
Это действительно правильное решение для работы с git-svn, если svn-репозитории хранят файлы с CRLFs (разработка под windows). Asturio
1

после клона git-svn я применил unix2dos ко всем файлам, потому что, в моем случае, все файлы в репозитории SVN использовали CRLF. Итак, я думаю, вам следует попробовать преобразование CRLF-LF вручную сразу после git-svn.

Сейчас это мой лучший вариант. Я могу использовать вывод «git status», чтобы вывести список измененных файлов и запустить их через скрипт, чтобы «исправить» их. Установка "core.fileMode = false" и "git reset --hard" были необходимы, чтобы вернуть вещи такими, какими они должны были быть. Глупый, но, похоже, добился цели. toholio
На самом деле, это все еще расстраивает Git's diff. Я возвращаюсь к своему первоначальному менее привлекательному плану - просто поместить свою рабочую копию в репозиторий git. toholio
1

вот еще один способ справиться с ситуацией:

Используйте как svn, так и git; в том же рабочем каталоге.

В основном вы будете работать с git, извлекать данные из репозитория верхнего уровня, вносить локальные изменения, локальные ветви и т. Д .; все, что вы обычно делаете, когда работаете над локальным проектом git.

Затем, когда вы хотите зафиксировать в центральном репозитории SVN, используйте клиент SVN.

У меня был некоторый опыт в этом, только я бы не стал делатьsvn commit, но вместо этого создайте патч сsvn diff и отправьте его (так как у меня все равно не было доступа к коммиту).

В конце концов, я использовал полностью локальный репозиторий git и выполнял обновления (для главной ветки git) и выполнял коммиты в удаленном репозитории с использованием SVN. Я не получаю очень полезную местную историю, но я получаю ветки функций и другую приятность git таким образом. Надеюсь, в будущем у меня будет время попытаться исправить то, что на самом деле не так с git-svn. toholio
Это умная идея. Я поэкспериментирую с этим. toholio
* Я имел в виду, очевидно. toholio

Похожие вопросы