Git як ртутний клієнт? Чому немає git-hg?


74

Це питання турбує мене якийсь час. Я зробив домашнє завдання і перевірив stackoverflow і знайшов принаймні ці дві теми щодо свого запитання: Git для Mercurial, наприклад git-svn та Git, сумісність зі сховищем Mercurial

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

З моєї точки зору, git-svn - одна з головних особливостей, чому я вирішив використовувати git над mercurial також на роботі. Це дозволяє мені використовувати робочий процес, який мені подобається, і нікому іншому не потрібно турбуватися, якщо їм все одно. Я просто не бачу сенсу використовувати проміжне hg-репо для перетворення вперед-назад, як пропонується в одному з ланцюжків.

Так чи інакше, з прочитаного hg та git здаються дуже схожими в концептуальному дизайні. Існують відмінності під капотом , але жодне з них не повинно перешкоджати створенню git-клієнта для hg. Як мені здається, віддалене відстеження гілок та злиття восьминогів робить git ще потужнішим, ніж hg.

Отже, справжнє запитання, чи існує якась реальна причина, чому git-hg не існує (або, принаймні, дуже важко знайти)? Чи існує якась ворожість користувачів git (та розробників) до їхніх колег hg, що спричинило відсутність інструменту git-hg? Чи планує хтось із вас розробити щось подібне і вийти з ним на публіку? Я міг би зголоситися (хоча і з дуже слабкими C-навичками) взяти участь, щоб це зробити. Я просто не маю повних знань, щоб запустити це сам.

Чи може це бути інструментом назавжди припинити всі війни DVCS?


36
@pajton: або тому git, що набагато краще, ніж hg, правда?
Cascabel

4
git-hg справді існує (зараз). stackoverflow.com/questions/5225666/…
Matt Ball

Відповіді:


18

hg-git та презентація автора на Pycon, що пояснює його думку щодо ситуації. не впевнений, чи стикалися ви з ними під час гуглиння, але вони відповідали на мої запитання.


6
хтось отримав стенограму цього?
jk.

2
Чудова презентація! Інформативний та цікавий для перегляду. Я насправді раніше цього не бачив, оскільки я, як правило, уникаю перегляду будь-якого відео в Інтернеті. На жаль, я все ще не задоволений відповіддю. Якщо функціонал вже є, то чому б не взяти його до кінця? Мені доведеться спробувати hggit, але, можливо, я повинен передати електронний лист хлопцям, які займаються бітбукетами ...
Kai Inkinen

2
Ну, я ще не зміг спробувати hg-git, але якщо я правильно зрозумів, це все одно більше, ніж один крок процесу, щоб перейти від git до hg. Крім того, фраза про те, що деякі люди користуються голим каталогом git, звучала не так обнадійливо. Git-svn просто працює. Навіть до тієї міри, що SVN як git-сервер здається хорошим варіантом. Принаймні з презентації я зрозумів, що git-hg до цього ще кілька кроків. Зауважте, я не припускаю, що це не чудовий проект. Я просто відчуваю, що ще залишилось трохи роботи.
Kai Inkinen

5
Легко прослідкувати чи ні, звичайно, для відповіді на запитання не потрібна година розмови. Tl; dr було б непогано.
Mu Mind

3
tl; dr: Вам не потрібен git-hg, оскільки hg-git на "сервері" дозволяє клієнту натискати та тягнути з репозиторію hg без будь-яких розширень! Інструкції див. У відповіді Томаса Бройера нижче.
Nilzor

20

Я не пробував цього, але, схоже, є проект git-hg . Проект описує себе на сторінці та README як:

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

Набір сценаріїв для перевірки та відстеження маркетингового [sic] проекту.

Здається, це не працює двонаправлено (див. Трекер випусків ).


1
Здається, хтось ще це додав. Перевірте цю вилку .
Альберт

14
Я оригінальний автор git-hg. Це насправді просто набір оболонок оболонки навколо швидкого експорту, який я використовував для відстеження віддаленого репозиторію hg. Як вказував Альберт, хтось додав підтримку підштовхуванням, і я щойно об’єднав цю вилку сьогодні. З якоїсь причини я, мабуть, бракував сповіщень електронною поштою від GitHub, тому що кілька тижнів тому у мене було відкрито два запити на витяг, яких я ніколи не помічав до сьогодні.
Cosmin Stejerean,

1
Як я детально поясню тут , метод, який Git-Hg використовує для просування до Mercurial, не здається корисним на практиці. Я вже говорив про це Косміну; я просто розміщую цей коментар тут, щоб допомогти іншим, хто в підсумку знайшов шлях до цих інструментів за тими ж шляхами пошуку, що і я.
dubiousjim

@dubiousjim: Посилання, яке ви надали, нічого детально не пояснює. Застаріле посилання?
Nilzor


18

Для реалізації цього є ще один проект: 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, bazaar і навіть MediaWiki.

Потім клонування Mercurial-сховища за допомогою git виконується просто так:

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

ОНОВЛЕННЯ: На даний момент є третя, також "рідна", а саме та, яку написав Феліпе, про яку він згадує у своїй відповіді тут. Цей, схоже, незабаром може бути частиною каталогу git 'contrib': https://github.com/felipec/git-remote-hg Він працює, не вимагаючи виправлення самого git, хоча деякі патчі git (зараз переглядається) ) може застосовуватися для покращення загальної взаємодії з користувачем.

ОНОВЛЕННЯ 2: І зараз є ще один претендент, цей перебуває у досить активному стані і базується на коді Феліпе: https://github.com/buchuki/gitifyhg - це мені доволі добре працює, але є все ще кілька грубих плям.

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


1
На pycon 2013 автор gitifyhg прозвучав досить впевнено. У ньому сказано, що він не перевірений на вікнах, тому я пробую це зараз.
Епу,

gitifyhg насправді є форком git-remote-hg, і я не вважаю, що для цього потрібен hg-git (вони використовують модулі Mercurial python безпосередньо). Екіпаж, який працює над gitifyhg, здається, більш чуйно реагує на повідомлення про помилки, ніж хлопець, який спочатку розробив git-remote-hg, тому я перейшов до gitifyhg.
Пол Прайс

8

Очевидно, hg-git можна використовувати для роботи з git локально, з віддаленим ртутним репо: http://traviscline.com/blog/2010/04/27/using-hg-git-to-work-in-git-and -push-to-hg /

Не пропустіть коментарів і там.


Рішення felipec тепер інтегровано в Git, і воно чудово працює, тому йому слід віддавати перевагу
CharlesB

5

Хтось уже згадував два git-remote-hg, але ось новий:

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

Він має більше функцій і повинен працювати надійніше, ніж msysgit, але найголовніше; вам не потрібні ніякі залежності або власна збірка git. Просто скопіюйте у свій $ PATH , і все.

У ньому є великі тести, щоб перевірити, що результат точно такий же, як hg-git, тому він повинен працювати принаймні так само добре.


Як git-remote-hgобробляється невідповідність імпедансу між гілками hg та гілками git (докладніше див. Мою відповідь на stackoverflow.com/a/11223644/334451 )?
Мікко Ранталайнен

1
git-remote-hgімпортує як названі гілки, так і закладки з Mercurial, оскільки закладки однакові з гілками Git, закладка 'foo' отримує гілку 'foo' у Git. Однак `` бар '' з назвою гілка отримує гілку `` гілки / бар '' у Git. Якщо натиснути що-небудь, перебуваючи зверху на цій гілці, всі ці коміти отримують мітку "bar", тому вони потрапляють у названу гілку "bar". Крім того, існує режим сумісності hg-git, в якому ми робимо те саме, що і hg-git, і додаємо додатковий код в кінці коміту, який визначає іменовану гілку Mercurial. Тож жодна інформація взагалі не втрачається.
FelipeC

3

Існує новий проект, який реалізує саме це:

Це робить двосторонню річ гарно інтегрованою.


1
Класно. доведеться це перевірити. Хоча останнім часом починає відчуватися, що все більше проектів перетворюється на git, а ртуть стає менш цікавою. Можливо, це лише моя перспектива, але все ж ...
Кай Інкінен

Дякую за цей інструмент. Я опублікував докладне обговорення цього тут (див особливо сторінка «оцінки»).
dubiousjim

2
Рішення felipec тепер інтегровано в Git і працює чудово, тому йому слід віддавати перевагу
CharlesB

2

Я думаю, що насправді просто немає особливого стимулу для його створення. Ніхто не буде жахливо покалічений, коли доведеться використовувати одне над іншим; вони обидва DVCS. Звичайно, кожен, мабуть, має свої уподобання, але вони, як правило, просто всмоктують це і використовують інше, якщо потрібно. Я припускаю, що hg-git з’явився, тому що git дуже широко використовується, тоді як hg прийнято набагато менше проектів.

На противагу цьому, якщо проект використовує svn або cvs, будь-хто, хто пробував DVCS, зазнає шкоди - і вони захочуть цю утиліту git-svn / hg-svn. Є ще безліч проектів, що використовують cvs / svn, тому попит дуже великий.

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

Ви також маєте рацію, що немає великих технічних перешкод - hg-git є двонаправленим, тому чітко можна нанести інформацію між ними.


4
З мого досвіду git привертає багато уваги на місцях, але дотепер багато компаній, з якими я консультувався, вибирають ртутну замість git. Причина найчастіше полягає в тому, що ртуть легше зрозуміти для когось із фоном svn / cvs, що становить близько 99% усіх розробників. Це означає, що багато комерційних VCS перетворюються на ртутні, що фактично виключає git. Для всіх, хто використовує git, збереження сервера як SVN було б кращим завдяки git-svn. Розробка цього дійсно може бути гарним PR-трюком для git і, отже, цікавим для розробників git, чи не згодні ви?
Kai Inkinen

3
@aapeli: Цікаво. Я не проводив опитування, але на моєму робочому місці використовується git, і серед проектів вільного програмного забезпечення git здається набагато популярнішим. Дуже прикро (але не дивно), що компанії використовують легкість переходу з cvs / svn як головну причину - в ідеальному світі вони просто вибрали б той, який найкраще відповідає їхнім потребам, і очікували, що розробники навчаться його використовувати . І це правда, все, що стосується більш широкого прийняття git, було б добре для проекту, але переважна підтримка у світі вільних програм, мабуть, завжди буде достатнім успіхом для забезпечення майбутнього git.
Cascabel

4
Я б здогадався, що багато магазинів Windows можуть вибрати hg замість git через проблеми, що виникають із підтримкою Windows git
jk.

2
Принаймні рік тому, коли ми проводили подібну оцінку для компанії, яка займається Java, ми виявили, що все ще є багато речей, які поступаються git в порівнянні з ртутними. Деякі з найважливіших - відсутність або погана підтримка середовища IDE та CI. Основні інструменти, де netbeans, затемнення і гудзон. Вони мають прямий вплив на продуктивність. У цьому випадку Windows не була проблемою, як і в ряді інших подібних випадків, про які я вже чув. Принаймні зараз ситуація, напевно, покращилася.
Kai Inkinen

@aapeli: Я думаю, це має сенс. Я знаю, що у мене справді ідеалістичне ставлення до всіх цих речей. Я насправді не вважаю інтерфейси IDE важливими - якщо ви витратите час на вивчення команд, інтерфейс командного рядка чудово працює, і ви в результаті отримаєте кращі знання про те, як насправді працює git. Що стосується CI ... моє ставлення полягає в тому, що ви повинні вибрати VCS з потрібними можливостями, а потім написати плагін для вашого інструмента CI, якщо вам потрібно. Це не те, що вам потрібні якісь справді складні операції VCS, щоб клонувати касу, побудувати чисте тощо
Cascabel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.