Mercurial | |
---|---|
Typ | distribuovaný systém správy verzí [d] |
Vývojář | Matt Mackall |
Zapsáno v | Python , C a Rust |
Operační systém | multiplatformní |
První vydání | 19. dubna 2005 [1] |
Nejnovější verze | |
Licence | GNU GPL 2+ [4] |
webová stránka | mercurial-scm.org |
Mediální soubory na Wikimedia Commons |
Mercurial (z angličtiny - „mercury, mobile“), také známý jako Hg (od označení chemického prvku rtuť ) je multiplatformní distribuovaný systém pro správu verzí navržený pro efektivní práci s velmi velkými úložišti kódu . V první řadě je to konzolový program.
Mercurial vyšel ze stejného konfliktu, který vedl k vytvoření Gitu . Autorem nového systému byl Matt Mackall .
Systém Mercurialu je napsán v Pythonu , i když části citlivé na výkon (jako je jeho vlastní implementace diff ) jsou implementovány jako rozšiřující moduly v C [5] . Ke zlepšení výkonu se také používá rez . [6] Mercurial byl původně napsán pro Linux , později portován na Windows , Mac OS X a většinu unixových systémů. Repozitáře Mercurialu jsou spravovány pomocí nástroje příkazového řádku hg, ale existují také GUI.
Spolu s tradičními funkcemi systémů pro správu verzí Mercurial podporuje zcela decentralizovanou práci (neexistuje koncept hlavního úložiště kódu), větvení (je možné udržovat několik větví jednoho projektu a kopírovat změny mezi větvemi), slučování úložišť (což dosáhne „rozdělení“ práce). Podporuje komunikaci mezi repozitáři přes HTTP / HTTPS , SSH a ručně pomocí zabalených sad změn.
Nástroj hgmá kompaktní rozhraní a Mercurial je považován za jednodušší na naučení než například git [7] .
Mercurial je distribuovaný (decentralizovaný) systém správy verzí. To znamená, že pracovní postup obvykle vypadá takto:
To znamená, že veškerá každodenní práce probíhá v místním úložišti, a když je potřeba, výsledky jejich práce jsou odesílány do jednoho nebo více dalších úložišť. Počet kroků při práci se vzdálenými repozitáři můžete snížit tím, že nakonfigurujete Mercurial tak, aby automaticky předával změny do jiných úložišť, když je proveden odevzdání [8] .
Konzolový program je implementován tak, že název libovolného příkazu lze zkrátit, pokud jeho název zůstane jednoznačný. Navíc některé příkazy mají aliasy. hg commitMůžete například napsat hg commi, hg commnebo místo toho hg com, ale pokud napíšete hg c, pak Mercurial odmítne tento příkaz provést s tím, že „ příkaz 'c' je nejednoznačný “ a uvede seznam příkazů, které spadají pod tuto zkratku. Nemůže být použit hg cojako zkratka pro hg commit, protože je to alias pro příkaz, hg update,ale zkratka je k dispozici hg ci.
Když je příkaz hg commitvyvolán, změny jsou potvrzeny. Zároveň program uloží sadu změn ( anglicky changeset nebo revize) do úložiště. Fyzicky proběhnou stejné změny jako ty vaše, ale uloží se do servisních souborů, a ne do kopie (více v Behind the scenes ).
Všechny changesety, které byly potvrzeny, jsou zpravidla zobrazeny jako velká propojená síť (graf), kde je každý changeset spojen s jedním nebo dvěma dalšími.
ID nadřazených sad změn, se kterými jsou potvrzené sady změn spojeny, můžete najít pomocí příkazu hg log --debug. Každá sada změn bude mít dva rodiče (což umožňuje větvení v rámci úložiště, viz hg -v help branch). Hodnota "-1:0000000000000000000000000000000000000" znamená žádný rodič. Například úplně první changeset v úložišti bude mít tuto hodnotu nastavenou pro oba rodiče, zatímco následující changesety budou mít tuto hodnotu nastavenou pro druhého rodiče (pokud pro ně nebylo v úložišti použito větvení) a první rodič bude mít ID z předchozí sady změn.
Je také užitečné uvažovat o pracovním adresáři jako o stejné sadě změn (která ještě není potvrzena, ale může být brzy potvrzena také). Pracovní adresář je také spojen s jedním nebo dvěma nadřazenými sadami změn, které lze nalézt pomocí příkazu hg parents. Po potvrzení změn se tito rodiče stanou rodiči pro novou (již potvrzenou) sadu změn.
Revize jsou rozpoznány podle následujících vlastností [9] :
Číslo revize je celé číslo představující pořadí, ve kterém byly changesety přidány do úložiště. Číslo revize začíná nulou, je automaticky přiřazeno k sadě změn a lze jej použít k identifikaci sad změn. Číslo revize pro stejný changeset se může v každém klonu úložiště lišit. Ve výstupu příkazu hg logje číslo revize vidět před dvojtečkou (například "4: e1be1898f374").
ID sady změnID changesetu je hash SHA-1 skládající se z čísel a písmen „a, b, c, d, e, f“, například „e1be1898f3747386c41c8a5c5776e87373f6d3d3“. Každému changesetu je automaticky přiřazeno ID changesetu, které se vypočítá z obsahu daného changesetu, a proto odpovídá stejnému changesetu ve všech úložištích. Pravděpodobnost kolize, když je generován stejný hash SHA-1 pro dvě různé sady změn, je extrémně malá.
Mercurial při použití v příkazech nevyžaduje celý řetězec identifikátoru, potřebuje pouze jeho počáteční část, která jednoznačně identifikuje požadovaný changeset (jinak Mercurial oznámí nejednoznačnost). Ve výstupu příkazu hg loglze ID changesetu vidět za dvojtečkou (například "4:e1be1898f374"). Bez parametru --debugpříkaz hg lognevypíše úplný, ale zkrácený (12 znaků) identifikátor changesetu.
TagyKromě čísla revize a ID changesetu nabízí Mercurial možnost dát každému changesetu jedno nebo více libovolných symbolických jmen, nazývaných tagy (nebo tagy ). Štítky se přiřazují pomocí příkazu hg taga pomocí příkazu můžete zobrazit všechny přidané štítky hg tags. Název štítku nemůže obsahovat některé znaky (například ": "), které Mercurial v případě potřeby ohlásí při provádění příkazu hg tag.
Kdekoli lze v příkazech zadat ID changesetu, lze jej nahradit názvem štítku.
Název pobočkyKaždá pobočka má svůj název. Je specifikováno při vytvoření větve a nikdy se již nemění.
Na rozdíl od git , Mercurial předpokládá přesnější model fungování, jehož nejpozoruhodnější aspekty jsou [11] [12] :
Mercurial přichází s CGI skripty, které poskytují webové rozhraní pro repozitáře [13] .
Existuje grafický shell TortoiseHg [14] , který funguje jak pod Windows (s integrací Průzkumníka), tak pod Linuxem (jako samostatná aplikace [15] nebo s integrací Gnome/Nautilus [16] ). Ve vývoji je konzolový klient hgtui pro Linux a Windows (pomocí cygwin).
Atlassian také propaguje svého klienta SourceTree , který poskytuje přístup k hg i svn a git.
Řada vývojových prostředí má funkce Mercurial, například Microsoft Visual Studio [17] [18] , IntelliJ IDEA [19] [20] [21] , Eclipse [22] , Qt Creator (od verze 2.0) [23] , PIDA [24] , NetBeans [25] . S Mercurialem je možné pracovat z Emacsu pomocí univerzálního balíčku VC, který je součástí Emacsu.
Experimentální podpora pro Mercurial je dostupná v Trac [26] . Projekt Redmine [27] také udržuje úložiště Mercurial.
Pomocí utility Tailor [28] nebo konvertorového rozšíření [29] je možné konvertovat [30] repozitáře jiných systémů pro správu verzí, včetně CVS , Subversion , Git , Perforce , Darcs , GNU Arch , Bazaar .
Značný počet projektů vývoje svobodného softwaru používá Mercurial jako svůj primární systém pro správu verzí [31] . Mezi nimi:
Podporována jsou zrcadla Mercurial hlavních repozitářů jiných projektů [33] , jako je GCC , Vim , Emacs a linuxové jádro .
Mezi projekty, které dlouho používaly Mercurial, ale v letech 2019–2021 přešly na Git, jsou Adium , CLISP , Illumos , Coin3D , OpenJDK , SDL [34] .
![]() | |
---|---|
Tematické stránky |
Systémy řízení verzí ( kategorie ) | |
---|---|
Pouze místní | |
Klient-server | |
Distribuováno | |