Совместимость Git с репозиторием Mercurial
Я использую GIT на Mac. Достаточно сказано. У меня есть инструменты, у меня есть опыт. И я хочу продолжать его использовать. Здесь нет войн...
проблема всегда заключается в совместимости. Большинство людей используют SVN, что отлично подходит для меня. Git SVN работает из коробки, и это решение без излишеств. Люди могут продолжать счастливо использовать SVN, и я не теряю свой рабочий процесс и свои инструменты.
сейчас... Некоторые ребята приходят вместе с ртутным. Хорошо для них: у них есть свои причины. но я не могу найти ГИТ рт. ст. из-из-коробки. Я не хочу переключаться на HG, но мне все еще нужно взаимодействовать с их репозиторием.
кто-нибудь знает простое решение для этого?
10 ответов:
обновление с июня 2012 года. В настоящее время, по-видимому, существуют следующие методы взаимодействия Git/Hg, когда разработчик хочет работать со стороны git:
установите Mercurial и расширение hg-git. Последнее можно сделать с помощью диспетчера пакетов или с помощью
easy_install hg-git
. Затем убедитесь, что в ваш ~/.hgrc:[extensions] hggit =
вы можете увидеть некоторые ссылки, которые говорят о задание
bookmarks
расширение здесь тоже, но это было встроено в Mercurial с v 1.8. Вот такие некоторые советы по установке hg-git на Windows.после того, как у вас есть hg-git, вы можете использовать команды примерно как Абдеррахим Китуни выложил выше. Этот метод был уточнено и подправлено С 2009 года, хотя, и есть дружественная обертка:git-hg-снова. Это использует каталог верхнего уровня в качестве рабочего каталога для обоих Mercurial и Git одновременно. Он создает ртутную закладку, которая синхронизируется с кончиком
default
(безымянная) ветвь в репозитории Mercurial, и она обновляет локальную ветвь Git из этой закладки.git-remote-hg это другая обертка, также основанная на ртути
есть новый git-remote-hg, который обеспечивает встроенную поддержку:
поддержка моста в Git для Mercurial и Базара
просто скопировать git-remote-hg к вашему $PATH, сделайте его исполняемым, и все, никаких зависимостей (кроме Mercurial):
git clone hg::https://www.mercurial-scm.org/repo/hg/
вы должны быть в состоянии толкать и тянуть из него, как если бы это был родной репозиторий Git.
при нажатии новых ветвей Git, Mercurial закладки будут созданы для их.
посмотреть git-remote-hg wiki для получения дополнительной информации.
вы должны быть в состоянии использовать hg-git.
hg clone <hg repository>
edit
~/.hgrc
и добавить :[extensions] hgext.bookmarks = hggit =
создать закладку, так что вы будете иметь
master
в git:cd <repository> hg bookmark -r default master
edit
.hg/hgrc
в репозитории и добавить :[git] intree = true
теперь вы можете создать репозиторий Git :
hg gexport
и вы можете использовать полученный каталог в Git клон. вытягивание из ртути будет:
hg pull hg gexport
и толкая к ртути:
hg gimport hg push
(да, вам нужно использовать hg с этим рабочим процессом, но ваш взлом будет все в git)
P. S. Если у вас есть проблемы с этим процессом, пожалуйста, сообщите об ошибке.
вы можете попробовать
hg2git
, который является скриптом python и является частью быстрого экспорта, который вы можете найти в http://repo.or.cz/w/fast-export.git .вам нужно будет установить mercurial.
Так как hg-git-это два-путевой мост, он также позволит вам нажимать наборы изменений от Git до Mercurial.
Hg-Git Mercurial Plugin. Не пробовал сам, но, возможно, стоит проверить.
у меня был большой успех с
git-hg
от https://github.com/cosmin/git-hg (требуется рабочая установкаhg
тоже). Он поддерживает fetch, pull иpushи является более стабильным для меня, чемhg-git
(аналогичные функции изhg
to git).см.https://github.com/cosmin/git-hg#usage для примеров использования. Пользовательский интерфейс очень похож на
git-svn
.The
git-hg
требуется дополнительное дисковое пространство для каждого клонированные НД РЕПО. Реализация использует полный клон mercurial, дополнительный голый клон git и фактическое РЕПО git. Необходимое дисковое пространство примерно в 3 раза превышает нормальное использование только git. Дополнительные копии хранятся ниже.git
каталог вашего рабочего каталога (или расположение, указанноеGIT_DIR
как обычно).обратите внимание: основная проблема в том, что
git-hg
пытается решить, что нет 1:1 отображение междуgit
иhg
функции. Самая большая проблема несоответствие импеданса между ветвями git и НД безымянного отделения и НД имени отделения и закладки hg (все это очень похоже на ветви дляgit
пользователи). Проблема в том, чтоhg
пытается сохранить исходное имя ветви в истории версий, в отличие от git, где имя ветви добавляется только в сообщение фиксации шаблона по умолчанию.любой инструмент, который утверждает, что создать совместимый мост между
git
иhg
должен объяснить, как он будет иметь дело с этим импедансом матча. затем вы можете решить, соответствует ли выбранное решение вашим потребностям.решение
git-hg
использование-это отбросить все закладки hg и преобразовать именованные ветви в ветви git. Кроме того, он устанавливает ветвь git master по умолчанию безымянную ветвь hg.
попробовали hggit. Работает для меня, так как я должен справиться с работой из Git и любители НД. Особенно для отзывов это здорово.
небольшая проблема/предупреждение по этой теме:
Я попытался клонировать стабильный репозиторий ядра linux с помощью hg. Эти репозитории хранятся в Git и, как правило, имеют большое количество файлов в нем.
Это было очень медленно. Мне потребовалось 2 дня, чтобы полностью клонировать и обновить рабочую копию.
Я пробовал git-hg Космина и git-hg abourget-снова на дворняжку НД РЕПО, Кажется, что более поздний уважает порядок слияния хорошо, первый немного случайный. Вы можете видеть на скриншотах ниже.
график истории слияния mutt, импортированный git-hg Космина:
график истории слияния mutt, импортированный abourget по ГИТ-ХГ-опять:
график фактической истории, построенный hgk на репозитории HG mutt:
Как вы можете видеть из приведенного выше, второй график git-hg abourget-снова очень близко к исходному графу hgk и фактически отражает реальный рабочий процесс mutt.
один недостаток git-hg-снова я обнаружил, что он не добавляет удаленный "hg", а импортирует все свои ссылки как локальные теги в Git-HG имеет прекрасный 'НД' удаленные представляет вышестоящим НД РЕПО.
двусторонняя синхронизация hg-git (и git-git, hg-hg) также возможна с сервисом Git-Hg зеркало. Он использует hg-git (среди прочих) за кулисами, и его код также является открытым исходным кодом.
отказ от ответственности: Я из компании, которая стоит за этим.