Git как меркуриальный клиент? Почему нет git -hg?

Это вопрос, который меня беспокоил какое-то время. Я выполнил свою домашнюю работу и проверил stackoverflow и нашел по крайней мере эти две темы по моему вопросу: Git для Mercurial, например git -svn и Git совместимость с репозиторием Mercurial

Я сделал серьезный поиск в Google, но до сих пор не повезло. Я также прочитал книгу Git Internals, а Mercurial Definitive Behind the Scenes, чтобы попытаться понять это. Я все еще немного озадачен, почему я не смог найти подходящий тип инструмента git -hg.

С моей точки зрения git -svn - одна из главных особенностей, почему я решил использовать git над меркуриальными и на работе. Это позволяет мне использовать рабочий процесс, который мне нравится, и никому еще не нужно беспокоиться, если им все равно. Я просто не вижу смысла использовать промежуточное hg-репо для преобразования назад и вперед, как это было предложено в одной из цепей.

Так или иначе, из того, что я читал, hg и git кажутся очень похожими в концептуальном дизайне. Существуют различия под капотом, но ни один из них не должен препятствовать созданию клиента git для hg. Как мне кажется, удаленные ветки отслеживания и совпадения осьминогов делают git еще более мощным, чем hg.

Итак, реальный вопрос, есть ли реальная причина, почему git -hg не существует (или, по крайней мере, очень трудно найти)? Есть ли какая-либо враждебность от пользователей git (и разработчиков) по отношению к их hg-коллегам, что вызвало нехватку инструмента git -hg? У кого-нибудь из вас есть какие-то планы по разработке чего-то подобного и обнародуйте его? Я мог бы добровольно (хотя и с очень слабыми навыками C) участвовать, чтобы это сделать. Я просто не обладаю полным знанием, чтобы начать это сам.

Может ли это стать инструментом для прекращения всех войн DVCS навсегда?

Ответ 1

hg-git и автор Представление Pycon объясняя его взятие на ситуацию. Не обязательно, если вы натолкнулись на них во время поиска в Интернете, но они ответили на мои вопросы.

Ответ 2

Я не пробовал это, но, похоже, проект git-hg. Проект описывает себя на странице и README как:

A git -hg утилита для проверки и отслеживание меркуриального репо.

Множество скрипты для проверки и отслеживания проект mercrial [sic].

Кажется, что он работает двунаправленно (см. трекер ошибок).

Ответ 3

Есть еще один проект, чтобы реализовать это: git -remote-hg. Фактически два из них, родные (см. https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg), а другой - на основе hg- git (см. https://github.com/rfk/git-remote-hg). Первый намного быстрее, чем последний, но все еще не завершен и находится в стадии разработки.

На самом деле существуют git удаленные помощники (как эти инструменты называются) для других систем, которые уже существуют или находятся в разработке; это включает поддержку Subversion, CVS, базара и даже MediaWiki.

Клонирование репозитория Mercurial через git затем выполняется следующим образом:

git clone hg::https://hg.example.com/some-mercurial-repo

ОБНОВЛЕНИЕ: К настоящему времени есть третий, также "родной", а именно тот, который Фелипе упоминает в своем ответе здесь. Кажется, это скоро может быть частью git 'contrib' dir: https://github.com/felipec/git-remote-hg Он работает, не требуя исправлений для самого git, хотя некоторые исправления для git (в настоящее время рассматриваются) могут быть применены для улучшения общего пользовательского опыта.

ОБНОВЛЕНИЕ 2: И теперь есть еще один соперник, этот находится под довольно активным развитием и основан на кодексе felipe: https://github.com/buchuki/gitifyhg - До сих пор это работает хорошо, но все еще есть некоторые грубые места.

ОБНОВЛЕНИЕ 3: и gitifyhg, и Felipe git -remote-hg в настоящее время активно не поддерживаются. На данный момент я сделал форму кода Фелипе с некоторыми исправлениями, в том числе и некоторыми, чтобы он работал с последними версиями Mercurial. Вы можете получить его из https://github.com/fingolfin/git-remote-hg. Наконец, therere является еще одним недавним соперником git-cinnabar, используя полностью другой подход внутри (хотя, если вас это не волнует, использование его более или менее такое же, как для других реализаций git -remote-hg). Я еще не пробовал это сам, но вы можете найти его на https://github.com/glandium/git-cinnabar

Ответ 5

Кто-то уже упомянул два git -remote-hg, но здесь новый:

Поддержка моста в git для меркуриального и базара

Он имеет больше возможностей и должен работать более надежно, чем у msysgit, но самое главное; вам не нужны никакие зависимости или пользовательская компоновка git. Просто скопируйте его в $PATH, и что он.

У него есть обширные тесты, чтобы проверить, что вывод точно такой же, как hg- git, поэтому он должен работать как минимум.

Ответ 6

Существует новый проект, который выполняет именно это:

Он отлично сочетается с двумя способами.

Ответ 7

Я думаю, что на самом деле просто не так много стимулов для его создания. Никто не будет ужасно искалечен тем, что должен использовать один над другим; они оба DVCS. Конечно, у каждого, вероятно, есть свои предпочтения, но они, как правило, просто высасывают его и используют другое, если это необходимо. Я предполагаю, что hg- git возник из-за того, что git очень широко используется, а гораздо меньше проектов - hg.

В принципе, если проект использует svn или cvs, любой, у кого есть вкус DVCS, будет больно - и они захотят использовать эту утилиту git -svn/hg-svn. Есть много проектов, использующих cvs/svn еще, поэтому много спроса.

Вероятно, вы правы, что было бы полезно, однако, предположить, что один из двух не будет медленно выигрывать над другим (git действительно имеет гораздо большую пользовательскую базу, я считаю).

Вы также правы, что нет больших технических препятствий - hg- git является двунаправленным, поэтому можно четко отобразить информацию между ними.