Совместимость Git с репозиторием Mercurial


Я использую GIT на Mac. Достаточно сказано. У меня есть инструменты, у меня есть опыт. И я хочу продолжать его использовать. Здесь нет войн...

проблема всегда заключается в совместимости. Большинство людей используют SVN, что отлично подходит для меня. Git SVN работает из коробки, и это решение без излишеств. Люди могут продолжать счастливо использовать SVN, и я не теряю свой рабочий процесс и свои инструменты.

сейчас... Некоторые ребята приходят вместе с ртутным. Хорошо для них: у них есть свои причины. но я не могу найти ГИТ рт. ст. из-из-коробки. Я не хочу переключаться на HG, но мне все еще нужно взаимодействовать с их репозиторием.

кто-нибудь знает простое решение для этого?

10 191

10 ответов:

обновление с июня 2012 года. В настоящее время, по-видимому, существуют следующие методы взаимодействия Git/Hg, когда разработчик хочет работать со стороны git:

  1. установите 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 из этой закладки.

  2. 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 Космина:

enter image description here

график истории слияния mutt, импортированный abourget по ГИТ-ХГ-опять:

enter image description here

график фактической истории, построенный hgk на репозитории HG mutt:

enter image description here

Как вы можете видеть из приведенного выше, второй график git-hg abourget-снова очень близко к исходному графу hgk и фактически отражает реальный рабочий процесс mutt.

один недостаток git-hg-снова я обнаружил, что он не добавляет удаленный "hg", а импортирует все свои ссылки как локальные теги в Git-HG имеет прекрасный 'НД' удаленные представляет вышестоящим НД РЕПО.

двусторонняя синхронизация hg-git (и git-git, hg-hg) также возможна с сервисом Git-Hg зеркало. Он использует hg-git (среди прочих) за кулисами, и его код также является открытым исходным кодом.


отказ от ответственности: Я из компании, которая стоит за этим.