Git suderinamumas su „Mercurial Repository“

Naudoju „GIT“ „Mac“. Pakankamai pasakė. Turiu įrankių, turiu patirties. Ir aš noriu toliau jį naudoti. Nėra karų ...

Problema visada susijusi su sąveika. Dauguma žmonių naudoja SVN, kuris man yra puikus. GIT SVN veikia iš dėžutės, ir šis sprendimas nėra švelnus. Žmonės gali tęsti naudojimąsi SVN ir aš neprarasiu darbo ar mano įrankių.

Dabar ... Kai kurie vaikinai ateina kartu su Mercurial. Geras jiems: jie turi savo priežastis. Bet aš negaliu rasti jokių git hg iš dėžutės. Nenoriu pereiti prie HG, bet vis tiek turiu bendrauti su jų saugykla.

Ar kas nors iš jūsų žino paprastą sprendimą?

179
19 мая '09 в 18:26 2009-05-19 18:26 Hugo Sereno Ferreira prašoma gegužės 19 d., 09 val. 18:26 2009-05-19 18:26
@ 10 atsakymų

Atnaujinta nuo 2012 m. Birželio mėn. Šiuo metu, atrodo, egzistuoja šie Git / Hg sąveikos metodai, kai kūrėjas nori dirbti su git:

  • Įdiekite „Mercurial“ ir „ hggit“ plėtinį . Pastarąjį galite naudoti naudodami paketų tvarkyklę arba naudodami easy_install hg-git . Tada įsitikinkite, kad ~ ~ .hgrc:

     [extensions] hggit = 

    Čia galite matyti kai kurias nuorodas, kuriose nurodoma, kad čia yra bookmarks plėtinys, bet tai buvo įtraukta į Mercurial versiją iš 1.8 versijos. Toliau pateikiami patarimai, kaip įdiegti „hggit“ sistemoje „Windows“ .

    Kai turėsite tokį žaidimą, galite naudoti tokias komandas kaip Abderrahim Kitouni, paskelbtas aukščiau . Šis metodas buvo patobulintas ir pakeistas nuo 2009 m., Nors yra draugiškas apvalkalas: git -hg-again . Tuo pačiu metu jis naudoja lygiagretųjį katalogą kaip „Mercurial“ ir „git“ darbo katalogą. Jis sukuria „Mercurial“ žymę, kuri sinchronizuoja su default (nenurodyto) filialo „Mercurial“ saugykloje pabaiga ir atnaujina vietinę git šaką iš šios žymės.

  • git -remote-hg yra dar vienas apvalkalas, taip pat pagrįstas gyvsidabrio hg-git plėtra. Be to, jame naudojami git-remote-helpers (taigi ir jo pavadinimas). Jis naudoja tik lygiagretų katalogą git darbo katalogui; ji išlaiko savo gyvsidabrio saugyklą. Jis taip pat palaiko antrą atvirą „git“ saugyklą, kad būtų galima sinchronizuoti tarp „Git“ ir „Mercurial“ saugesnių ir idiomatiniu požiūriu.

  • „Git-hg“ scenarijus (anksčiau palaikomas čia ) naudoja kitą metodą, pagrįstą „ hg-fast-exporteksporto . Panašiai kaip ir 2 metodas, jis taip pat išsaugo tuščią „Mercurial“ saugyklą ir papildomą nešvarų talpyklą.

    Braižymui šis įrankis ignoruoja „Mercurial“ žymes ir vietoj to importuoja kiekvieną pavadintą „Mercurial“ filialą į git šaką ir pagal nutylėjimą (be pavadinimo) Mercurial filialas yra importuojamas į šeimininką.

    Kai kuriose pastabose šis įrankis laikomas tik hg → git, bet teigia, kad jis sujungtas su git → hg push palaikymu 2011 m. Gruodžio 7 d. Tačiau, kaip paaiškinau šių įrankių apžvalgoje, atrodo , kad tai, kaip ši priemonė bando įgyvendinti stumiamąją paramą, yra neveiksminga.

  • Taip pat yra dar vienas projektas, vadinamas git -remote-hg . Skirtingai nuo pirmiau pateiktos versijos, šis nėra remiamasi „hggit“, bet tiesiogiai pasiekia „Mercurial Python“ API. Šiuo metu naudojant ją reikia patikslintos „git“ versijos. Aš to dar nebandžiau.

  • Galiausiai Tailor yra projektas, kuris palaipsniui transformuoja įvairius VCS rinkinius. Atrodo, kad jos plėtra nebus agresyvi.

Pirmieji trys iš šių metodų atrodė pakankamai paprasti, kad įtikintų mane tyrinėti. Turėjau kažkaip susikurti juos, kad galėčiau paleisti savo sąranką, ir pamačiau kelis būdus, kaip pagerinti savo darbą, juos tobulinti, ir tada aš juos dar labiau patyriau, kad jie elgtųsi kaip vienas su kitu, kad galėčiau juos veiksmingiau įvertinti. Tada aš maniau, kad kiti norėtų, kad šie nustatymai būtų atlikti taip pat. Todėl sukūriau šaltinio paketą, kuris leidžia įdiegti bet kurios iš pirmųjų trijų įrankių versijas. Jis taip pat turėtų pasirūpinti būtinų hg-fast-export dalių hg-fast-export . (Jums reikia įdiegti „ hg-git border=0 patys.)

Raginu jus išbandyti ir nuspręsti, kas geriausiai veikia. Džiaugiuosi girdėdamas apie atvejus, kai šios priemonės nutrūksta. Aš stengsiuosi juos išlaikyti sinchronizuojant su ankstesniais pokyčiais ir taip, kad stebėjimo autoriai žinotų apie naudingus triukus.

Kaip jau minėjau, vertindamas šias priemones, prieita prie išvados, kad „ git-hg gali būti naudojama tik „Mercurial“ ištraukimui, o ne paspaudimui.

Be to, rasite keletą naudingų žemėlapių / vertimo vadovų tarp „Git“ ir „Mercurial“, kai kuriais atvejais nukreipiantys į vartotojus, kurie jau žino „Git“:

54
24 июня '12 в 18:31 2012-06-24 18:31 atsakymą pateikė dubiousjim birželio 24 d., 12 val. 18:31 val. 2012-06-24 18:31

Yra naujas git -remote-hg, kuris suteikia integruotą paramą:

Git tilto palaikymas Mercurial ir Bazaar

Tiesiog nukopijuokite „ git-remote-hg“ prie „$ PATH“, kad jis būtų vykdomas ir nepriklausomas nuo jo (išskyrus „Mercurial“):

 git clone hg::https://www.mercurial-scm.org/repo/hg/ 
border=0

Turėtumėte turėti galimybę spustelėti ir ištraukti iš jos, tarsi ji būtų gimtoji „Git“ saugykla.

Kai spustelėsite naujus „Git“ filialus, jiems bus sukurtos „Mercurial“ žymos.

Daugiau informacijos rasite „ git -remote-hg wiki“ .

107
13 нояб. Atsakymą pateikė FelipeC lapkričio 13 d. 2012-11-13 05:52 '12 at 5:52 am 2012-11-13 05:52

Galite naudoti hg-git .

 hg clone <hg repository> 

redaguoti ~/.hgrc ir pridėkite:

 [extensions] hgext.bookmarks = hggit = 

Sukurkite žymę, kad galėtumėte turėti gitą:

 cd <repository> hg bookmark -r default master 

pakeiskite .hg/hgrc saugykloje ir pridėkite:

 [git] intree = true 

Dabar galite sukurti „git“ saugyklą:

 hg gexport 

ir galite naudoti gautą katalogą kaip git kloną. ekstruzijos iš gyvsidabrio bus:

 hg pull hg gexport 

ir spustelėję gyvatvorę:

 hg gimport hg push 

(Taip, jums reikia naudoti hg naudodami šią darbo eigą, tačiau jūsų įsilaužimas bus git)

PS Jei turite problemų dėl šio dokumento srauto, parašykite klaidą.

105
07 июля '09 в 0:06 2009-07-07 00:06 atsakymą pateikė Abderrahimas Kitouni liepos 07 d., 09:06 2009-07-07 00:06

Galite pabandyti hg2git , kuris yra „python“ scenarijus, ir yra greito eksporto dalis, kurią galite rasti šiuo adresu: http://repo.or.cz/w/fast-export.git .

Jums reikės įdiegti gyvsidabrį.

15
19 мая '09 в 18:39 2009-05-19 18:39 sykoros atsakymas gegužės 19 d. 09:18 val. 2009-05-19 18:39

Kadangi hg-git yra dviejų lygių tiltas, jis taip pat leis atlikti pakeitimus iš „Git“ į „Mercurial“.

9
21 мая '09 в 0:34 2009-05-21 00:34 atsakymą pateikė Martin Geisler, gegužės 09 d., 0:34, 2009-05-21 00:34

Hg- Git Mercurial įskiepis . Aš ne bandžiau patys, bet tai gali būti verta patikrinti.

6
19 мая '09 в 18:32 2009-05-19 18:32 atsakymas pateikiamas ralphtheninja gegužės 19 d., 09 val. 18:32 2009-05-19 18:32

Turėjau didelę sėkmę su „ git-hghttps://github.com/cosmin/git-hg (taip pat reikalingas darbinis „ hg įrenginys). Jis palaiko mėginių ėmimą, traukimą ir stumimą ir yra stabilesnis už hg-git (panašios funkcijos nuo hg iki git).

Naudojimo pavyzdžius žr. Https://github.com/cosmin/git-hg#usage . Vartotojo sąsaja yra labai panaši į „ git-svn .

git-hg atveju kiekvienai klonuotai hg-repo reikės papildomos vietos diske. Įgyvendinimas naudoja pilną gyvsidabrio kloną, papildomą gitų kloną ir faktinį git repo. Reikalingas vietos diske yra maždaug 3 kartus didesnis už įprastą „git“ naudojimą. Papildomos kopijos yra saugomos darbo katalogo .git kataloge (arba vieta, kurią nurodė GIT_DIR , kaip įprasta).

Pastaba Pagrindinė problema, kurią git-hg bando išspręsti, yra tai, kad nėra 1: 1 žemėlapio tarp git ir hg funkcijų. Didžiausia problema yra impedanso nesutapimas tarp git ir hg šakų su nenurodytomis šakomis ir hg su šakų ir skirtukų hg pavadinimais (jie visi atrodo labai panašūs į git naudotojus). Susijusi problema yra ta, kad hg bando išsaugoti originalaus pavadinimo šakos pavadinimą versijos istorijoje, o ne git, kur pagal nutylėjimą šakos pavadinimas pridedamas tik prie šablono įsipareigojimo pranešimo.

Bet kuris įrankis, kuris teigia, kad sukuria sąveikų tiltą tarp git ir hg turėtų paaiškinti, kaip jis veiks su šiuo atsparumu. . Tada galite nuspręsti, ar pasirinktas sprendimas tinka jūsų poreikiams.

Sprendimas, kurį naudoja git-hg yra atsisakyti visų „hg“ žymių ir konvertuoti pavadintus filialus į git šakas. Be to, jis nustato pagrindinį neaktyvaus hg filialo git filialą pagal numatytuosius nustatymus.

6
27 июня '12 в 12:59 2012-06-27 12:59 Atsakymą pateikė Mikko Rantalainen birželio 12 d. 12:59 2012-06-27 12:59

Išbandyta. Jis veikia man, nes turiu susidoroti su git 'ir hg'ers darbu. Ypač tai yra puikus.

Nedidelė problema / įspėjimas apie šią temą:

Bandžiau klonuoti stabilų „Linux“ branduolio saugyklą naudojant „hg“. Šios saugyklos tvarkomos git ir paprastai jose yra daug failų.

Tai buvo labai lėta. Man teko 2 dienas, kad galėčiau visiškai klonuoti ir atnaujinti darbo kopiją.

3
04 авг. atsakymas duotas 04 rug. 2011-08-04 09:45 '11 ne 9:45 am 2011-08-04 09:45

Bandžiau „ cosmin git -hg“ ir „ abourget git -hg-again“, kaip antai „ mutt hg repo“ , atrodo, kad vėlesnėje eilutėje sujungimo tvarka yra gera, pirmoji yra šiek tiek atsitiktinė. Galite matyti žemiau esančiuose ekranuose.

„Mutt“ sujungimo istorijos grafikas, importuojamas „ cosmin git -hg“ :

2019

1
01 янв. Atsakymą pateikia „ Techlive Zheng“ sausio 1 d 2014-01-01 20:51 '14 ne 20:51 2014-01-01 20:51

Tai yra seni klausimai, bet manau, kad verta paminėti: dvipusio „hggit“ (ir „git-git“, „hg-hg“) sinchronizavimas galimas naudojant „ Git -hg Mirror“ paslaugą . Jis naudoja hg-git (be kita ko) užkulisiuose, o jo kodas taip pat yra atviro kodo.

Atsakomybės apribojimas: aš esu iš kompanijos už jos.

0
30 апр. Atsakymas pateikiamas „ Piedone“ 30 d. 2017-04-30 19:36 '17, 7:36 pm 2017-04-30 19:36

Kiti klausimai apie žymas „ arba „ Užduoti klausimą“