#svn #git
#svn #git
Вопрос:
Есть ли способ взаимодействовать с репозиторием git, используя набор команд svn?
Контекст: большинство членов нашей команды хотят перейти на git из svn для всех наших новых проектов, но есть несколько несогласных.
Я знаю, что можно получить доступ к репозиторию svn с помощью git, но я ищу противоположную функциональность.
Ответ №1:
Вы можете попробовать SubGit. Установите его на свой сервер, и он предоставит связанный репозиторий SVN таким образом, что любая фиксация в репозитории SVN приведет к Git push и наоборот. Трансляция безопасна для параллельного использования и довольно прозрачна: теги SVN преобразуются в теги Git, ветви — в branches, svn:ignore — в .gitignores и так далее.
Инструкция такова:
$ svnadmin create svn.repo
$ subgit configure svn.repo
$ #edit svn.repo/conf/subgit.conf to specify path to your bare Git repository
$ subgit install svn.repo
Вот и все. Перевод запускается перехватами, которые будут добавлены как в репозитории SVN, так и в репозитории Git.
Ответ №2:
Принципиально нет — не без ужасных допущений и упрощений, которые гарантированно вернутся, чтобы укусить вас. Переход от нераспределенной к распределенной VCS и эффективное ее использование требует от вас изменения вашего мышления. http://hginit.com/00.html есть несколько замечаний по переходу с svn на hg, которые были бы аналогично уместны в данном случае.
Комментарии:
1. Этот «совет» не является ответом, и все же вы приняли его как ответ. Если вы искали проверку, то название вопроса было обманчивым.
Ответ №3:
Что я делал, так это использовал svn в качестве авторитетного источника, но все разработчики git подключаются к gitorious во время совместной работы над проектами. Когда задачи завершены, кто-то, кто работает над сопряженной задачей, например, выполняет перебазирование по мере необходимости и передает subversion с git svn
.
Это не идеальное решение, но оно позволяет вам работать локально под git, по крайней мере, с другими разработчиками git.
Что вам действительно нужно сделать, так это устранить препятствия для git. Похоже, это единственное реальное устойчивое долгосрочное решение.
Комментарии:
1. Тем не менее, я все еще не решил проблему с задержками svn на своей стороне. Я живу с git svn, и это как минимум в 10000000 раз лучше, чем просто svn.
Ответ №4:
Если не всех устраивает переход, вы можете рассмотреть возможность использования SVN-сервера и попросить всех, кто хочет использовать git, использовать git-svn. У Git очень крутая кривая обучения. Таким образом, даже у людей, которым нравится использовать Git, могут возникнуть проблемы с его использованием, а в проекте это может снизить вашу производительность. Лучше, чтобы все изучали git через git-svn, поскольку при необходимости есть альтернативный способ работы — через SVN. Если у людей есть опыт работы с git, переход может оказаться очень плодотворным. В противном случае может возникнуть множество краткосрочных и среднесрочных проблем. Я сталкивался с этим и рассказываю о своем опыте.
В противном случае, TortoiseGit в Windows должен быть знаком людям, использующим TortoiseSVN. Кроме того, вы можете использовать псевдонимы некоторых команд в git на основе аналогичных команд SVN, чтобы они выполняли похожие действия. Like svn revert
— это не то же самое, что git revert
, но git reset --hard
является своего рода эквивалентом. Большую часть времени трудно найти эквиваленты, но для некоторых из них вы можете
Комментарии:
1. Однако в этом случае у людей не будет стимула использовать git вместо этого, и люди, использующие git, скорее всего, будут разочарованы ограничениями git-svn…
2. @Mark Longair — полностью согласен с вами, но обновил свой ответ, чтобы дать дополнительные пояснения.
Ответ №5:
Если вы используете Windows, вы можете попробовать TortoiseGit — у него похожий интерфейс с TortoiseSVN. Но это сходство с графическим интерфейсом, а не с консольными командами.
Комментарии:
1. Неплохая идея, но я был бы очень осторожен с этим. Я помню, как читал что-то о команде, где люди допустили много критических ошибок, потому что это выглядело как нечто эквивалентное svn, но на самом деле отличалось критическим образом. В частности, был случай, когда кто-то изменил файл A, переданный в origin / master, а затем кто-то другой изменил файл B, полученный из origin / master, и попытался объединить origin / master в master. В своем коммите «слияния» они сняли галочку с файла A, потому что не собирались вносить в него какие-либо изменения, фактически перезаписывая первые изменения.