Mercurial | |
---|---|
Sorts | distribuerat versionskontrollsystem [d] |
Utvecklaren | Matt Mackall |
Skrivet i | Python , C och Rust |
Operativ system | plattformsoberoende |
Första upplagan | 19 april 2005 [1] |
senaste versionen | |
Licens | GNU GPL 2+ [4] |
Hemsida | mercurial-scm.org |
Mediafiler på Wikimedia Commons |
Mercurial (från engelska - "mercury, mobile"), även känd som Hg (från beteckningen av det kemiska elementet kvicksilver ) är ett plattformsoberoende distribuerat versionskontrollsystem designat för att fungera effektivt med mycket stora kodlager . Först och främst är det ett konsolprogram .
Mercurial kom ur samma konflikt som ledde till skapandet av Git . Författaren till det nya systemet var Matt Mackall .
Mercurials system är skrivet i Python , även om prestandakänsliga delar (som dess egen implementering av diff ) implementeras som tilläggsmoduler i C [5] . Rost används också för att förbättra prestandan . [6] Mercurial skrevs ursprungligen för Linux , senare portad till Windows , Mac OS X och de flesta Unix- system. Mercurials förråd hanteras med ett kommandoradsverktyg hg, men det finns också GUI.
Tillsammans med de traditionella funktionerna i versionskontrollsystem stöder Mercurial helt decentraliserat arbete (det finns inget koncept för huvudkodförrådet), förgrening (det är möjligt att upprätthålla flera grenar av ett projekt och kopiera ändringar mellan grenar), sammanslagning av arkiv (som uppnår "fördelningen" av arbetet). Stöder kommunikation mellan arkiv via HTTP / HTTPS , SSH och manuellt med paketerade ändringsuppsättningar.
Verktyget hghar ett kompakt gränssnitt, och Mercurial anses vara lättare att lära sig än till exempel git [7] .
Mercurial är ett distribuerat (decentraliserat) versionskontrollsystem. Det betyder att arbetsflödet vanligtvis ser ut så här:
Det vill säga att allt dagligt arbete sker i det lokala förvaret och när behov uppstår skickas resultatet av deras arbete till ett eller flera andra förvar. Du kan minska antalet steg när du arbetar med fjärrlager genom att konfigurera Mercurial för att automatiskt skicka ändringar till andra förråd när en commit görs [8] .
Konsolprogrammet är implementerat på ett sådant sätt att namnet på vilket kommando som helst kan förkortas så länge dess namn förblir entydigt. Plus att vissa kommandon har alias. hg commitTill exempel kan du skriva hg commi, hg commeller istället hg com, men om du skriver hg c, så kommer Mercurial att vägra att utföra detta kommando och säger att " kommandot 'c' är tvetydigt " och ger en lista över kommandon som faller under denna förkortning. Det kan inte användas hg cosom en stenografi för hg commiteftersom det är ett alias för kommandot, hg update,men stenografin är tillgänglig hg ci.
När kommandot hg commitanropas, genomförs ändringarna. Samtidigt sparar programmet en uppsättning ändringar ( engelska changeset eller revision) i förvaret. Fysiskt sker samma ändringar som dina, men de sparas i servicefiler, och inte till en kopia (mer i Behind the scenes ).
Som regel visas alla ändringsuppsättningar som har begåtts som ett stort uppkopplat nätverk (graf), där varje ändringsuppsättning är associerad med en eller två andra.
Du kan hitta ID:n för de överordnade ändringsuppsättningarna som de bekräftade ändringsuppsättningarna är associerade med med hjälp av kommandot hg log --debug. Varje ändringsuppsättning kommer att ha två föräldrar (vilket tillåter förgrening inom förvaret, se hg -v help branch). Värdet "-1:00000000000000000000000000000000000000000000" betyder ingen förälder. Till exempel kommer den allra första ändringsuppsättningen i förvaret att ha detta värde inställt för båda föräldrarna, medan efterföljande ändringar kommer att ha detta värde inställt för den andra föräldern (såvida inte förgrening användes för dem i förvaret), och den första föräldern kommer att ha ID från föregående ändringsuppsättning.
Det är också användbart att tänka på arbetskatalogen som samma uppsättning förändringar (som ännu inte är committed, men som snart också kan committeras). Arbetskatalogen är också associerad med en eller två överordnade ändringar, som kan hittas med kommandot hg parents. Efter att ändringarna har genomförts kommer dessa föräldrar att bli föräldrar för den nya (redan beslutade) förändringsuppsättningen.
Revisioner känns igen av följande funktioner [9] :
Revisionsnumret är ett heltal som representerar den ordning i vilken ändringar lades till i arkivet. Revisionsnumret börjar på noll, tilldelas automatiskt en förändringsuppsättning och kan användas för att identifiera förändringsuppsättningar. Revisionsnumret för samma ändringsuppsättning kan vara olika i varje förvarsklon. I utgången av kommandot hg logkan revisionsnumret ses före kolon (till exempel "4: e1be1898f374").
Ändringsuppsättnings-IDÄndringsuppsättningens ID är en SHA-1-hash som består av siffror och bokstäverna "a, b, c, d, e, f", till exempel "e1be1898f3747386c41c8a5c5776e87373f6d3d3". Ett ändringsuppsättnings-ID tilldelas automatiskt till varje ändringsuppsättning, beräknat från innehållet i den ändringsuppsättningen, och motsvarar därför samma ändringsuppsättning i alla arkiv. Sannolikheten för en kollision, när samma SHA-1-hash genereras för två olika ändringsuppsättningar, är extremt liten.
Mercurial kräver inte hela identifierarsträngen när den används i kommandon, den behöver bara den första delen av den som unikt identifierar den önskade ändringsuppsättningen (annars kommer Mercurial att rapportera en tvetydighet). I kommandoutgången hg logkan ändringsuppsättnings-ID:t ses efter kolon (till exempel "4:e1be1898f374"). Utan en parameter matar --debugkommandot hg loginte ut hela, utan en förkortad (med 12 tecken) ändringsuppsättningsidentifierare.
TaggarFörutom revisionsnumret och ändringsuppsättnings-ID ger Mercurial möjligheten att ge varje ändringsuppsättning ett eller flera godtyckliga symboliska namn, kallade taggar (eller taggar ). Etiketter tilldelas med kommandot hg tag, och du kan se alla tillagda etiketter med kommandot hg tags. Etikettnamnet kan inte innehålla vissa tecken (till exempel ": "), som Mercurial kommer att rapportera när kommandot utförs vid behov hg tag.
Där ett ändringsuppsättnings-ID kan anges i kommandon, kan etikettnamnet ersättas.
FilialnamnVarje gren har sitt eget namn. Det anges när grenen skapas och ändras aldrig igen.
Till skillnad från git antar Mercurial en mer rigorös funktionsmodell, vars mest anmärkningsvärda aspekter är [11] [12] :
Mercurial kommer med CGI-skript för att tillhandahålla ett webbgränssnitt till arkiven [13] .
Det finns ett grafiskt skal TortoiseHg [14] som fungerar både under Windows (med Explorer-integration) och under Linux (som en separat applikation [15] eller med Gnome/Nautilus- integration [16] ). Det finns en hgtui -konsolklient under utveckling för Linux och Windows (med cygwin).
Atlassian marknadsför också sin SourceTree- klient , som ger tillgång till både hg och svn och git.
Ett antal utvecklingsmiljöer har Mercurial-funktioner, såsom Microsoft Visual Studio [17] [18] , IntelliJ IDEA [19] [20] [21] , Eclipse [22] , Qt Creator (sedan version 2.0) [23] , PIDA [24] , NetBeans [25] . Det är möjligt att arbeta med Mercurial från Emacs med det universella VC-paketet som ingår i Emacs.
Experimentellt stöd för Mercurial finns tillgängligt i Trac [26] . Redmine - projektet [27] underhåller också Mercurial-förråden.
Med hjälp av Tailor-verktyget [28] eller konverteringstillägget [29] är det möjligt att konvertera [30] arkiv för andra versionskontrollsystem, inklusive CVS , Subversion , Git , Perforce , Darcs , GNU Arch , Bazaar .
Ett betydande antal friprogramvaruutvecklingsprojekt använder Mercurial som sitt primära versionskontrollsystem [31] . Bland dem:
Mercurial speglar av huvudarkiven för andra projekt [33] stöds , såsom GCC , Vim , Emacs och Linux-kärnan .
Bland projekten som använt Mercurial under lång tid, men bytte till Git 2019-2021, är Adium , CLISP , Illumos , Coin3D , OpenJDK , SDL [34] .
I sociala nätverk | |
---|---|
Tematiska platser |
Versionskontrollsystem ( kategori ) | |
---|---|
Endast lokalt | |
Klient-server | |
Distribuerad | |