Я использую GIT на Mac. Достаточно сказано. У меня есть инструменты, у меня есть опыт. И я хочу продолжать его использовать. Здесь нет войн ...
Проблема всегда в совместимости. Большинство людей используют SVN, что отлично подходит для меня. Git SVN работает "из коробки" и является решением без излишеств. Люди могут продолжать счастливо использовать SVN, и я не теряю ни свой рабочий процесс, ни свои инструменты.
Теперь ... Некоторые ребята приходят вместе с Mercurial. Хорошо для них: у них есть свои причины. Но я не могу найти GIT HG "из коробки". Я не хочу переключаться на HG, но мне все еще нужно взаимодействовать с их хранилищем.
Кто-нибудь из вас знает простое решение для этого?
Ответы:
Обновление от июня 2012 года. В настоящее время, по-видимому, существуют следующие методы взаимодействия Git / Hg, когда разработчик хочет работать со стороны git:
Установите Mercurial и расширение hg-git . Вы можете сделать последнее с помощью вашего менеджера пакетов или с помощью
easy_install hg-git
. Затем убедитесь, что в вашем ~ / .hgrc есть следующее:Здесь вы также можете увидеть некоторые ссылки, в которых говорится об указании
bookmarks
расширения, но оно было встроено в Mercurial начиная с версии 1.8. Вот несколько советов по установке hg-git в Windows .Получив hg-git, вы можете использовать команды, примерно такие, как Abderrahim Kitouni, опубликованные выше . Этот метод был доработан и улучшен с 2009 года, и есть дружественная оболочка: git-hg-again . При этом каталог верхнего уровня используется как рабочий каталог для Mercurial и Git одновременно. Он создает закладку Mercurial, которая синхронизируется с кончиком
default
(неназванной) ветви в хранилище Mercurial, и обновляет локальную ветку Git из этой закладки.git-remote-hg - это другая оболочка, также основанная на
hg-git
расширенииMercurial. Это дополнительно используетgit-remote-helpers
протоколы (отсюда и его название). Он использует каталог верхнего уровня только для рабочего каталога Git; он хранит свой Mercurial репозиторий голым. Он также поддерживает второй пустой Git-репозиторий, чтобы сделать синхронизацию между Git и Mercurial более безопасной и более идиоматически похожей на git.ГИТ-Hg скрипт (ранее поддерживается здесь ) использует другой метод, основанный на
hg-fast-export
от быстрого экспорта проекта . Как и в методе 2, здесь также есть пустой репозиторий Mercurial и дополнительный пустой репозиторий Git.Для извлечения этот инструмент игнорирует закладки Mercurial и вместо этого импортирует каждую именованную ветку Mercurial в ветку Git, а ветку Mercurial по умолчанию (без имени) - в master.
В некоторых комментариях этот инструмент рассматривается только как hg-> git, но в нем утверждается, что он объединен с поддержкой git-> hg push 7 декабря 2011 года. Однако, как я объясню в обзоре этих инструментов , способ, которым этот инструмент пытается реализовать поддержка толчка не кажется работоспособной.
Есть также другой проект под названием git-remote-hg . В отличие от версии, указанной выше, эта версия не зависит от hg-git, а напрямую обращается к API Mercurial Python. На данный момент для его использования также требуется исправленная версия git. Я еще не пробовал это.
Наконец, Tailor - это проект, который постепенно преобразует различные VCS. Похоже, что развитие этого не будет продолжено агрессивно.
Первые три из этих подходов выглядели достаточно легкими, чтобы убедить меня провести расследование. Мне нужно было каким-то образом настроить их, чтобы они работали на моей установке, и я нашел несколько способов настроить их дальше, чтобы улучшить их, а затем я еще больше их подправил, чтобы они вели себя как друг с другом, чтобы я мог оценить их более эффективно. Тогда я подумал, что другим тоже могут понравиться эти настройки, чтобы сделать ту же оценку. Поэтому я сделал пакет с исходным кодом , который позволит вам установить мои версии любого из первых трех инструментов. Следует также позаботиться об установке необходимых
hg-fast-export
деталей. (Вам нужно установитьhg-git
самостоятельно.)Я призываю вас попробовать их и решить для себя, что работает лучше всего. Я буду рад услышать о случаях, когда эти инструменты ломаются. Я постараюсь сохранить их синхронизацию с изменениями в основной ветке разработки и убедиться, что авторы основной ветки разработки осведомлены о твиках, которые я считаю полезными.
Как я упоминал выше, оценивая эти инструменты, я пришел к выводу, что его
git-hg
можно использовать только для извлечения из Mercurial, а не для толкания.Кроме того, вот несколько полезных руководств по сравнению / переводу между Git и Mercurial, в некоторых случаях предназначенных для пользователей, которые уже знают Git:
источник
Есть новый git-remote-hg, который предоставляет встроенную поддержку:
Поддержка мостов в Git для Mercurial и Bazaar
Просто скопируйте git-remote-hg в ваш $ PATH, сделайте его исполняемым, и все, никаких зависимостей (кроме Mercurial):
Вы должны иметь возможность выдвигать и извлекать из него данные, как если бы это был собственный репозиторий Git.
Когда вы нажимаете на новые ветви Git, для них создаются закладки Mercurial.
См. Git-remote-hg wiki для получения дополнительной информации.
источник
git-remote-hg
(т.е. без.py
суффикса).#!/usr/bin/env python2
.Вы должны быть в состоянии использовать HG-GIT .
отредактируйте
~/.hgrc
и добавьте:создайте закладку, так что у вас будет
master
в Git:отредактируйте
.hg/hgrc
в репозитории и добавьте:Теперь вы можете создать репозиторий git:
и вы можете использовать полученный каталог как клон git. вытащить из ртути будет:
и толкая к ртути:
(Да, вам нужно использовать hg с этим рабочим процессом, но ваш взлом будет все в git)
PS Если у вас есть проблемы с этим рабочим процессом, пожалуйста, сообщите об ошибке.
источник
git status
команду $ git status fatal: эта операция должна выполняться в рабочем дереве Это после того, как я выполнил командуhg gexport
в только что клонированном репозитории hg. Как можно обойти голые репозитории? Обновление . Судя по всему, предложение Рок Берта работает. СпасибоВы можете попробовать
hg2git
, который является скриптом Python и является частью быстрого экспорта, который вы можете найти по адресу http://repo.or.cz/w/fast-export.git .Вам нужно будет установить Mercurial.
источник
hg-fast-export
работал нормальноhg-fast-export
скрипт отправляетhg2git
. Я не проследил все это, хотя. Обратите внимание, что эти инструменты позволяют переходить только из Hg-> Git, а не наоборот.Поскольку hg-git - это двусторонний мост, он также позволит вам переместить наборы изменений из Git в Mercurial.
источник
Hg-Git Mercurial Plugin . Сам не пробовал, но, возможно, стоит проверить.
источник
Я имел большой успех с
git-hg
от https://github.com/cosmin/git-hg (требует работы установкиhg
, тоже). Он поддерживает fetch, pull иpushи более стабилен для меня, чемhg-git
(аналогичные функцииhg
для git).См. Https://github.com/cosmin/git-hg#usage для примеров использования. Пользовательский интерфейс очень похож на
git-svn
.git-hg
Требует дополнительного дискового пространства для каждого клонированного рт.ст. репо. Реализация использует полный ртутный клон, дополнительный клон git и реальное репозиторий git. Требуемое дисковое пространство примерно в 3 раза больше обычного использования GIT. Дополнительные копии хранятся под.git
каталогом вашего рабочего каталога (или места, на котороеGIT_DIR
обычно указывает ).Примечание . Основная проблема, которую
git-hg
нужно решить, заключается в том, что между функциямиgit
иhg
функциями нет сопоставления 1: 1 . Самой большой проблемой является несоответствие между сопротивлением GIT ветвей и ¯hG безымянных ветвей и ¯hG имени филиалов и ¯hG закладки (все из этих очень похожи на ветви дляgit
пользователей). Связанная проблема заключается в том, чтоhg
попытка сохранить оригинальное имя именованной ветви в истории версий, в отличие от git, где имя ветви добавляется только в сообщение фиксации шаблона по умолчанию.Любой инструмент, который утверждает, что создает совместимый мост между
git
иhg
должен объяснить, как он будет работать с этим согласованием импедансов. Затем вы можете решить, соответствует ли выбранное решение вашим потребностям.Решение, которое
git-hg
используется, состоит в том, чтобы отбросить все закладки hg и преобразовать именованные ветви в ветви git. Кроме того, он устанавливает ветку git master на неименованную ветку hg по умолчанию.источник
git-hg
это возможно только для извлечения из Hg, а не для подталкивания (см. Объяснение, на которое я ссылаюсь в моем ответе). Вы нашли способ успешно использовать его в обоих направлениях? Что касается дополнительного пространства, все техники, с которыми я знаком, включают в себя рабочий каталог + одну копию git db / metadata + одну копию hg db / metadata. Добавление второй копии git db / metadata требует большего использования диска, да, но, сравнительно говоря, это не так плохо, как может показаться.git-hg
это не подходит для толкания. Я изменил свой ответ, чтобы было понятнее, чтоpush
он недостаточно стабилен.Попробовал хггит. Работает для меня, так как мне приходится справляться с работой гитаристов и мастеров. Особенно для обзоров это здорово.
Незначительная проблема / предупреждение на эту тему:
Я попытался клонировать стабильный репозиторий ядра Linux с помощью hg. Эти репозитории поддерживаются в git и обычно содержат большое количество файлов.
Это было очень медленно. Мне потребовалось 2 дня, чтобы полностью клонировать и обновить рабочую копию.
источник
hggit
илиhg
слишком медленной, чтобы ее можно было использовать с проектами размера ядра в целом?Я попытался Космин в GIT-ртутных и abourget - х ГИТ-HG-снова , как на рт.ст. репо Mutt в , кажется , что более поздние Уважает порядок слияния хорошо, бывший немного случайным. Вы можете увидеть на скриншотах ниже.
Граф истории слияния mutt, импортируемый git-hg cosmin :
График истории слияния mutt, импортированного abitget git-hg-again :
Граф истории всех событий, построенный hgk в репозитории mutt hg:
Как видно из вышесказанного, второй график от abourget git-hg-again очень близок к исходному графу hgk и фактически отражает реальный рабочий процесс дурака.
Один недостаток git-hg-again, который я обнаружил, заключается в том, что он не добавляет пульт «hg», а импортирует все его ссылки как локальные теги, у git-hg есть замечательный «hg» пульт, представляющий репозиторий «hg» в восходящем направлении.
источник
gitk
) должен уметь одинаково отображать обе истории. Единственное, чего явно не хватает - это веткиhg/stable
в версии от abourget. Я предполагаю, что это вещь между именованными ветками, неименованными ветками и закладками в Mercurial.Двухсторонняя синхронизация hg-git (и git-git, hg-hg) также возможна с помощью службы Git-hg Mirror . Он использует hg-git (среди прочих) за кулисами, и его код также с открытым исходным кодом.
Отказ от ответственности : я из компании, которая стоит за этим.
источник