Какая сила git теряется при использовании git -svn и общей линии subversion?
Я оцениваю различные варианты отвлечения нашей команды от CVS. У нас есть еще одна большая команда на другом сайте с использованием Subversion, и некоторые из наших разработчиков работают с сервером Subversion. Поэтому Subversion является очевидным выбором для нашей команды. Однако:
- Операции, связанные с Subversion
сервер может быть медленным кофе
(хотя у нас хорошая связь
между сайтами).
- Многие из нас продали
по идее распределенной версии
управления и использования Mercurial или git
(а затем объединить и зафиксировать CVS и получить изменения от
git-svn выглядит интересным, но что я ' Я хотел бы знать, насколько сила DVCS, такая как git, теряется за счет наличия нескольких централизованных ветвей в Subversion. В частности, мне все равно хотелось бы сохранить такой рабочий процесс с Mercurial, например:
- Можем ли мы вытащить репозитории других членов команды и объединиться и, таким образом, сотрудничать с ветвями функций, прежде чем отправиться на наш основной стабильный багажник на Subversion?
- Можем ли мы ожидать, что при использовании git будет возможно множество обманов, или мы должны быть осторожны, чтобы избежать путаницы git -svn?
- Можем ли мы использовать git, чтобы ускорить проверку из Subversion, вытащив его через соединение с другого сайта один раз, а затем вытащив его в отдельные репозитории один раз.
- Если кто-то совершает Subversion, можем ли мы организовать, чтобы другие пользователи git через git -svn все еще видели полную историю развития?
- Можем ли мы в принципе не дождаться интерактивных операций на сервере Subversion, несмотря на то, что у него есть полмира латентности?
Многие из нас привыкли к идее основной довольно стабильной общей ветки с простой линейной историей, к которой каждый может нажать, и поэтому они регулярно сливаются с кончиком. Мне непонятно, как хорошо поддерживать этот рабочий поток с помощью git (или Mercurial или Bazaar).
Ответы
Ответ 1
Ты много проигрываешь, и это похоже на второй класс, но ты действительно обладаешь прекрасным разветвлением.
Я узнал git, используя его для работы над проектом, который был размещен в подрывной деятельности. git позволил мне сделать все мои локальные разработки и сделать довольно много прогресса в проекте, продолжая отслеживать основную ветку и даже делиться своей работой с другими.
В конце концов, мы закончили толкать весь проект до git из-за всей информации, которая была потеряна при переходе на субверсию.
Что вы теряете:
- Слияние - сортировка.
- Собственная регистрация авторства изменений.
Я говорю "своего рода" WRT # 1, потому что, если вы держите одно дерево вместе, оно будет отслеживать слияния и прочее, которые вы делали с git, и применяли к subversion, но как только вы пытаетесь клонировать это репо или кто-то делает git -svn клон, вы теряете это, и слияния снова становятся очень болезненными.
Материал авторства много для меня, потому что я считаю очень важным удостовериться, что люди получают кредит за работу, которую они выполняют.
Ответ 2
Как уже упоминалось, git-svn
имеет определенные ограничения по сравнению с чистым Git опытом:
-
Командное сотрудничество тяжелое:
Если один разработчик подталкивает изменения в репозиторий SVN с помощью git-svn
, другой выбирает несколько разные изменения; извлеченные суммы были дважды конвертированы - от Git до SVN и от SVN обратно до Git. В результате трудно сотрудничать распределенным образом.
-
Потерянные метаданные:
.gitignore и .gitattributes файлы теряются, когда git-svn
отправляет изменения в SVN, то есть git-svn
не преобразует эти метаданные в соответствующие свойства Subversion. Другие разработчики не получают изменения метаданных при извлечении.
-
Потерянные данные отслеживания слияния:
Если один объединяет две ветки с git
, а затем толкает фиксацию слияния с git-svn
, репозиторий Subversion не получает никаких данных о объединенной истории автоматически.
-
Слабая поддержка ветвления:
Нужно создать ветку в репозитории Subversion, извлечь ее с помощью git-svn
и только затем dcommit изменения этой ветки. Если вы создаете регулярную ветвь Git и пытаетесь ее вернуть обратно в репозиторий SVN, git-svn
не создает новую ветку, а вместо этого отправляет ее вместо существующего.
SubGit является альтернативой git-svn
со следующими функциями:
-
SubGit работает на стороне сервера как набор перехватчиков, он синхронизирует SVN и репозитории Git, сохраняя обе стороны доступными для записи;
-
Можно использовать любой клиент Git для работы с репозиторием Git с поддержкой SubGit; поддерживается любой рабочий процесс Git;
-
SubGit исправляет все проблемы git-svn
, перечисленные выше.
SubGit - это коммерческое программное обеспечение со многими бесплатными опциями. Для получения дополнительной информации см. documentation и сравнение с git - СВН.
Отказ от ответственности: я один из разработчиков SubGit.
Ответ 3
Для того, что я видел, вы можете использовать git между восстановлением репозитория с помощью git -svn (чтобы вы могли иметь публичный репозиторий git, который был бы "зеркалом" репозитория svn, который вы говорить, но репозиторий git может быть размещен на вашем сайте).
Таким образом, проверка/клон/push/pull для пользователей git будет быстрой. Тогда, я думаю, вы можете добавить перехватчики в репозиторий git для синхронизации с реестром svn через git -svn, но вам придется иметь дело с конфликтом, пока не будете использовать разные ветки.
Что мы делаем здесь, так это то, что у каждого разработчика есть ветвь с его именем в нем, и он должен слиться с главной ветвью (поэтому он обрабатывает конфликт) до того, как администратор объединит свою ветку с мастером без каких-либо конфликтов, так как dev уже обрабатывают его.
Надеюсь на эту помощь.