Какая сила 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 уже обрабатывают его.

Надеюсь на эту помощь.