Mercurial útmutató létrehozása ágak - tech jegyzetek

Nemrégiben ültem IRC-csatornák és #mercurial #bitbucket freenode és észrevette, hogy gyakran felmerül a kérdés „, mint a teremtés az elágazások Mercurial eltér git?»

Néhány évvel ezelőtt a Twitteren azt vitatni Nick (Nick Quaranto) elágazás modell Mercurial és git'e, amelyek végül egy gyors megjegyzés a legfontosabb különbségeket. Megmutattam ezt a megjegyzést, beleértve a git felhasználók, és úgy tűnik, hogy tetszett. Úgy döntöttem, hogy kiemelje a kérdést részletesebben.

Megjegyzés: ez a poszt nem az a célja, hogy használati útmutatót a parancsok Mercurial. Ez az útmutató ismerteti csak a koncepció, hogy fekszik a használata Mercurial ágak. Ha keres egy leírást a konkrét parancsok, olvassa el a kiváló útmutató nevezett hg könyv (és ha úgy tetszik, akkor is vásárolni a papír változat, és látja a legnagyobb a történelem nyomtatás Feil).

Először is, nézzük meg egy példa az adattár, amit már elő:

Mercurial útmutató létrehozása ágak - tech jegyzetek

A tároló a könyvtárban

/ Src / teszt-projekt. Ez tartalmazza changeset'a 3: 0, 1 és 2.

Megjegyzés git felhasználó mindegyike változáskészlet a Mercurial rendelkezik egy azonosítóval, mint egy hash, mint a git. Ezen kívül minden Mercurial changeset'y hogy több kényelmet és szobák. Ez a szám nem globális adattár minden klón, és határozza meg az egyes helyi lerakat függően a sorozat korábbi pull / push.

Alapértelmezésben Mercurial csak egy ága az úgynevezett «alapértelmezett», de még visszatérünk erre a kérdésre később. Azért említem ág «alapértelmezett» most, mert A fenti ábra egy megfelelő marker.

Szaggatott határ a diagramok azt jelenti, hogy valójában egy ilyen marker az adattárban nincs tárgy. Ez a név azonosítja changeset'a helyett hosszú hash vagy szobák - Mercurial kiszámítja a revízió száma menet közben.

Miközben figyelmen kívül marker «alapértelmezett». Én konkrétan különválasztják neki szürke, mert E megbeszélés nem számít.

Elágazás klónozással

A leglassabb, de megbízható módja annak, hogy egy új ága a Mercurial - az, hogy egy klón:
$ cd

/ src
$ Hg klón teszt-projekt teszt-projekt-feature-ág

Most van 2 példányban a tárolóból. Próbáljuk, hogy a változások az egyes:

Mercurial útmutató létrehozása ágak - tech jegyzetek

Tehát van két példányban az adattár, amelyek mindegyike tartalmaz changeset'y idején klónozás. Ezen kívül mi vállalják, hogy az egyes másolatok függetlenül. Aztán, ha például, hogy a push a teszt-projekt a teszt-projekt-feature-ág, a changeset «Fix kritikus hiba» esnek a megfelelő példányt.

Megjegyzés git felhasználók emlékezzen azt mondta, hogy changeset'ov számozás Mercurial helyi? Ez a példa világosan mutatja: két különböző changeset'a két adattárak a szám 3. Ez az, amiért a számok jobban működnek, mindössze egy adattár, és szinkronizálja a pull / lökés, és amikor más emberek, akkor érdemes használni a hash - azok egyediek.

méltóság

Klónozás - ez egy nagyon biztonságos módon létrehozni ágak. Két tárolók teljesen függetlenek egymástól, és szinkronizálható a pull / push. Nincs veszély törni valamit az egyik ágon, míg fut egy másik.

Vegye ki az ág, ha már nincs szükség, ez a megközelítés nagyon egyszerű: rm -rf teszt-projekt-feature-ág. Nincs szükség babrálnia az adattár, megszüntetve valamit a történelemből.

hiányosságokat

Létrehozása ágak helyi klónok lassabb, mint más módszerekkel. De ha az operációs rendszer támogatja hardlink, Mercurial használja őket, és ebben az esetben a klónozás nem kell nagyon sokkal lassabb.

Azonban elágazás keresztül klónozás jelentősen képes lassítani a fejlesztés a csapat. Ha kiadói két ág két külön tároló (például stabil és verzió-2), ami azt jelenti, hogy a többi résztvevő kell letölteni az adattár magát mind egyénileg, ha azt szeretné, hogy mindkét ága. Ez időigényes lehet nagy tárolók, és a keskeny kommunikációs csatornát.

De van egy módja annak, hogy elkerüljék a plusz forgalmat, azt is leírták, és Guido Ostkamp timeless_mbp a #mercurial csatornán. Az ötlet az, hogy a klón csak egy ága a szerver, majd tegye a pull mindenki más már meglévő. Ezt követően meg kell osztani minden ágát le az egyik helyi adattár több helyi ága a klónok. Így az azonos changeset'y nem kell pumpálni többször.

Ez a példa azt feltételezi, hogy tudod, hogy a felülvizsgálati számok (hash) felsők minden ága. A legvalószínűbb, hogy nem, így van egy előre keresik a naplóban.

A második tény, amely azt sugallja, ezt a példát: az ágak letöltött egy feje. Amennyiben egy fióktelep vagy néhány fej, mindegyiket meg kell adnia a módosításokat a klón parancsot a távolság az ágak az egyes könyvtárak.

Egyes projektek, van egy probléma utak bizonyos fájlokat. Ha létrehozott egy klón ág lesz, hogy a könyvtárat minden alkalommal szeretnénk váltani működik másik ága. Normális esetben a merev ragaszkodás a pályák a kódot nem gyakori, de előfordul.

Személy szerint én nem szeretem ezt a módszert. Azonban, néhány különösen a fejlesztés a modellt használják Mercurial ágak klónok.

Összehasonlítás git

Ebben a megközelítésben a git is alkalmazható. Technikailag ez ugyanaz, mint létrehozni egy villával GitHub. Azonban, ha azt mondjuk, „a villa” és „ág”, azt jelenti, mindegy néhány különböző fogalmak.

Elágazás a könyvjelzők

A következő módon - az, hogy egy könyvjelzőt. Például:

/ Src / test-projekt
$ Hg könyvjelző fő
$ Hg könyvjelző funkció

Most két bookmark'a két jövőbeli ága a jelenlegi changeset'e.

Hogy megy az egyik ág, akkor hg frissítés funkció - frissíti az aktuális könyvtárat a csúcs changeset'a fióktelepe funkció és védjegyek témára, mint a munka. Ha nem elkövetni, Mercurial fog mozogni az aktuális könyvjelző (jellemző), hogy az újonnan létrehozott changeset.

További részletek részletesen bookmark'ami olvasható a megfelelő nyilatkozat oldalt.

Itt van, hogyan fog kinézni az adattárban használatakor bookmark'ov:

Mercurial útmutató létrehozása ágak - tech jegyzetek

A diagram nagyon egyszerű: az ágak elválasztása végeztük changeset'e 2. számú, majd adtunk egy új changeset'u minden ága.

Most figyelni, hogy a markerek. «Alapértelmezett» van ezen a pályán, de továbbra is figyelmen kívül hagyja.

Két további címkére bookmark'i. Észrevettük, hogy nem készült a szaggatott vonal? Minden bookmark'i egy valódi tárgyat a lemez helyett egy virtuális referencia!

Nevük is használható mutatókat a számos egyedi ellenőrzések, amikor dolgozik Mercurial.

méltóság

Bookmark'i kapsz egy gyors és egyszerű módja annak, hogy a nevét az ágak.

Akkor távolítsa el őket, ha már nincs szükség. Például, ha a munka egy új egy teljes funkcionalitással és egyesült változásokat a fő ág, már nem kell tárolni a könyvjelzőt «funkciót».

hiányosságokat

Mercurial 1.6 verzióra bookmark'i nem szinkronban tárolók (pull / push). Azt át kellett kézzel fájlok formájában.

Összehasonlítás git

Elágazás segítségével bookmark'ov nagyon hasonlít a közös ág git. Bookmark'i milyen Mercurial git refs: elemzi a mutatót a changeset, ami mozog minden új commit'om c.

Egészen a közelmúltig az egyetlen jelentős különbség (akár Mercurial 1.6) volt a tetű refs szinkronban adattárak keresztül pull / push, mint bookmark'i Mercurial nem.

Elágazás segítségével Named ágak

A harmadik módja, hogy hozzon létre egy ágat a Mercurial használata úgynevezett elemzi ágak (a továbbiakban: a „fióktelep” hívom fogalmának szétválasztása kódot a programozási folyamatot, és a szó ág - különleges technológia Mercurial -. Kb tolmács.).

Létrehozásához nevű ág:
$ cd

/ Src / test-projekt
$ Hg ág jellemző

Minden új changeset fog tartozni a megnevezett ág, mint őse. Ha módosítani nevű ág későbbi changeset'ov, akkor kell használni a parancsot hg ág újra

Itt van, hogyan fog kinézni a adattár named ágak:

Mercurial útmutató létrehozása ágak - tech jegyzetek

Az egyik fontos különbség, hogy ennek a módszernek, hogy branch'a neve van rögzítve közvetlenül a metaadat changeset'a (látható változáskészlet 4 az ábrán).

Alapértelmezésben egy névvel nevezett ága «alapértelmezett», de az ő neve van elrejtve a levezetés a napló, hacsak kifejezetten kérni kell az ilyen vagy olyan módon parancsparaméter -v (-verbose).

Itt az ideje, hogy ismertesse a mágikus ezen címkék pontozott határ a chart. A név branch'a utalunk az úgynevezett tip changeset a megnevezett ága. Ebben a példában:

  • Futás a hg frissítés alapértelmezett. frissíteni fogjuk a munka könyvtárat a changeset 3, ami egy tipp a «alapértelmezett» ág.
  • Futás a hg frissítés funkciót. frissíteni fogjuk a munka könyvtárat a changeset 4, ami egy hegy egy «funkció» ág.

Egyik ezek a címkék ábrázolt fantom az ábrán fizikailag nem létezik a lemezen (szemben a könyvjelző korábban tárgyalt). Ha telefonál nevében a megnevezett ág Mercurial kiszámítja a revízió száma menet közben.

méltóság

A legnagyobb előnye, hogy segítségével elemzi ágak, hogy minden változáskészlet a boltokban metaadat információkat elemzi ág, de nagyon kényelmes, különösen ha graphlog.

hiányosságokat

Sokan nem szeretik a rendetlenséget metaadatneveket branch'ey, különösen a kis ágak, amelyek gyorsan összeolvadt a fő ága.

A múltban volt egy probléma, amit Mercurial ág lehetetlen volt „közeli”. Ez azt jelenti, hogy az idő múlásával, a lista nevű ág is jelentősen növekednek. Verziótól kezdődően Mercurial 1.2 megjelent -close-ág opciót a parancs hg elkövetni.

Összehasonlítás git

Amennyire én tudom, nincs elemzi ágak git ekvivalens Mercurial. Információ az ágak soha nem tárolja a metaadatokat changeset'a.

névtelen ágak

Az utóbbi módszer létrehozása ágak Mercurial azon, amit majd nézd meg a leggyorsabb és legegyszerűbb: frissítés a felülvizsgálat és elkövetni. Nem kell gondolni a nevét vagy bármilyen további lépést, egyszerűen frissíti és elkövetni!

Mechanics ez: amikor frissíti egy adott változat, amely felülvizsgálat van jelölve, mint a szülő a dolgozó könyvtárban. Ha csinálsz a elkövetni, akkor létre abban a pillanatban changeset válik leszármazottja nagyon ellenőrzés a szülő a munkaképes könyvtárban.

Ne elkövetni „Fix kritikus bag”, akkor menj vissza (update) felülvizsgálatára 2 és a másik elkövetni „Új funkció”:

Mercurial útmutató létrehozása ágak - tech jegyzetek

Hogyan kell váltani ezek között az ágak? Ehhez a pointer ágak kell használni a szám a legutóbbi felülvizsgálat az ág: hg frissítés -Check (-Check lehet csökkenteni -c).

Megjegyzés: -Check opció jelent meg a Mercurial 1.3, de ez nem működött. Valóban ez működni verzió 1.3.1. Ha a régebbi verzióját Mercurial ajánlott a frissítés.

Parancsokat, mint hg log és hg graphlog az összes changeset'y a tárolóban, így nem kell félni, hogy elveszíti számos névtelen ág. Ezen kívül van egy csapat, hg fejek, amely megmutatja az összes, a fej (valójában ez egy névtelen ág).

méltóság

Ez a legegyszerűbb módja annak, hogy hozzon létre ágak. Akkor már nem kell aggódnia a nevét az ágak, vagy a lezárás / eltávolítása.

Ez a módszer ideális a gyors javítások, amely két vagy három changeset'ov egy ága.

hiányosságokat

A második következmény az anonimitás az ágakat kell bekapcsolni a változat számát vagy hash, amely először meg kell találni a hg log vagy hg graphlog (vagy hg fejek - egy megjegyzést a fordító.). Ha gyakran kell váltani az ágak között, akkor lehet, hogy nehézségeket.

Összehasonlítás git

Hasonló módon a git nem működik. Persze, lehet, hogy a frissítés, és kötelezettséget bárhol, de ha nem hoz létre abban a pillanatban (named) ref, majd átvált egy másik ága, nehéz lesz, hogy menjen vissza a „névtelen”. Az egyetlen módja, hogy megtalálják azt - az, hogy a grep az eredményeket a napló.

Elfogadom, néha nem akarja, hogy dolgozzon ki egy nevet az ág, ha egy rövid ág pillanatnyi bug-fix. De git meg kell adni egy nevet az új ág. A Mercurial nem szükséges.

Egy másik különbség Mercurial és git

Van még egy nagy különbség Mercurial és git ágak kérdést:

Mercurial teszi push / pull összes alapértelmezett ágat. Git, éppen ellenkezőleg, nem nyomja / húzza csak az aktuális ág.

Ez nagyon fontos, ha git felhasználó és szeretne dolgozni Mercurial. Ha szeretne szinkronizálni (pull / push) csak egyik ága a Mercurial, akkor kell használni -rev opciót (-r rövid), és adja meg a csúcs felülvizsgálata (vagy utalás arra a csúcs felülvizsgálat formájában elemzi fióktelep vagy könyvjelző):

$ Hg nyomja -rev BRANCHNAME
$ Hg nyomja -rev bookmarkname
$ Hg tolja -rev 4

Ha megad egy felülvizsgálat, Mercurial teszi a pull / nyomja az ellenőrzés és az összes ősök nem a cél tárolóból.

Frissítés: ha használja a modell a „elágazás klónozással”, majd húzza / nyomja nem lesz képes küldeni az összes ágat ág klónokat izoláltuk és adattárak található különböző könyvtárakban.

következtetés

Remélem, ez a kézikönyv hasznos volt. Ha azt veszi észre valamit, amit nem fogadott, különösen a leírást a viselkedését git (én nem használja a git, csak akkor, ha szükség van rá), vagy ha bármilyen kérdése van - írj!

A szakasz „Anonymous ágak” fix „Fix kritikus bag” a „Fix kritikus hiba”, hogy egybeessen a képet.

Szintén egy kicsit ki a témát, de Git nem nagy baj, hogy hozzáférjenek a „névtelen ág”, mint a szokásos Git repository végzik az úgynevezett «Reflog» - globális változás napló, ahol láthatjuk az összes vállalkozik, beleértve a commit tett állapotban «álló fej» (analóg névtelen ágak Hg). Ezen felül, a változást követően a fióktelep tipp vonal történetét, amely elkötelezett az átmenet, elérhető néven ORIG_HEAD.

Köszönöm a cikket: nem használom Hg, de érdekel a kérdés, és tegye egy csomó világosabb.