Mercurial | |
---|---|
Type | distribueret versionskontrolsystem [d] |
Udvikler | Matt Mackall |
Skrevet i | Python , C og Rust |
Operativ system | på tværs af platforme |
Første udgave | 19. april 2005 [1] |
nyeste version |
|
Licens | GNU GPL 2+ [4] |
Internet side | mercurial-scm.org |
Mediefiler på Wikimedia Commons |
Mercurial (fra engelsk - "mercury, mobile"), også kendt som Hg (fra betegnelsen af det kemiske grundstof mercury ) er et distribueret versionskontrolsystem på tværs af platforme designet til at arbejde effektivt med meget store kodelagre . Først og fremmest er det et konsolprogram .
Mercurial kom ud af den samme konflikt, der førte til skabelsen af Git . Forfatteren af det nye system var Matt Mackall .
Mercurials system er skrevet i Python , selvom ydeevnefølsomme dele (såsom dets egen implementering af diff ) er implementeret som udvidelsesmoduler i C [5] . Rust bruges også til at forbedre ydeevnen . [6] Mercurial blev oprindeligt skrevet til Linux , senere porteret til Windows , Mac OS X og de fleste Unix- systemer. Mercurials repositories administreres med et kommandolinjeværktøj hg, men der er også GUI'er.
Sammen med de traditionelle funktioner i versionskontrolsystemer understøtter Mercurial fuldstændigt decentralt arbejde (der er intet koncept for hovedkodelageret), forgrening (det er muligt at vedligeholde flere grene af et projekt og kopiere ændringer mellem grene), flettedepoter (som opnår "fordelingen" af arbejdet). Understøtter kommunikation mellem repositories via HTTP / HTTPS , SSH og manuelt ved hjælp af pakkede ændringssæt.
Hjælpeprogrammet hghar en kompakt grænseflade, og Mercurial anses for at være lettere at lære end for eksempel git [7] .
Mercurial er et distribueret (decentraliseret) versionskontrolsystem. Det betyder, at arbejdsgangen typisk ser sådan ud:
Det vil sige, at alt det daglige arbejde foregår i det lokale depot, og når behovet opstår, sendes resultaterne af deres arbejde til et eller flere andre depoter. Du kan reducere antallet af trin, når du arbejder med eksterne repositories ved at konfigurere Mercurial til automatisk at skubbe ændringer til andre repositories, når der foretages en commit [8] .
Konsolprogrammet er implementeret på en sådan måde, at navnet på enhver kommando kan forkortes, så længe dens navn forbliver utvetydigt. Plus nogle kommandoer har aliaser. hg commitFor eksempel kan du skrive hg commi, hg commeller i stedet hg com, men hvis du skriver hg c, så vil Mercurial nægte at udføre denne kommando, idet han siger, at " kommando 'c' er tvetydig " og giver en liste over kommandoer, der falder ind under denne forkortelse. Det kan ikke bruges hg cosom en stenografi for hg commit, fordi det er et alias for kommandoen, hg update,men stenografien er tilgængelig hg ci.
Når kommandoen hg commitpåkaldes, er ændringerne begået. Samtidig gemmer programmet et sæt ændringer ( engelsk changeset eller revision) til repository. Fysisk sker de samme ændringer som dine, men de gemmes i servicefiler, og ikke til en kopi (mere i Bag kulisserne ).
Som regel vises alle ændringssæt, der er blevet begået, som et stort tilsluttet netværk (graf), hvor hvert ændringssæt er knyttet til et eller to andre.
Du kan finde ID'erne for de overordnede ændringssæt, som de forpligtede ændringssæt er knyttet til ved hjælp af kommandoen hg log --debug. Hvert ændringssæt vil have to forældre (hvilket tillader forgrening inden for depotet, se hg -v help branch). Værdien "-1:0000000000000000000000000000000000000000000" betyder ingen forælder. For eksempel vil det allerførste ændringssæt i depotet have denne værdi indstillet til begge forældre, mens efterfølgende ændringssæt vil have denne værdi sat til den anden forælder (medmindre forgrening blev brugt til dem i lageret), og den første forælder vil have ID fra det forrige ændringssæt.
Det er også nyttigt at tænke på arbejdsbiblioteket som det samme sæt ændringer (som endnu ikke er commited, men snart også kan commited). Arbejdsbiblioteket er også forbundet med et eller to overordnede ændringssæt, som kan findes med kommandoen hg parents. Når ændringerne er begået, bliver disse forældre forældre til det nye (allerede forpligtede) ændringssæt.
Revisioner genkendes af følgende funktioner [9] :
Revisionsnummeret er et heltal, der repræsenterer den rækkefølge, som ændringssæt blev tilføjet til lageret. Revisionsnummeret starter ved nul, tildeles automatisk til et ændringssæt og kan bruges til at identificere ændringssæt. Revisionsnummeret for det samme ændringssæt kan være forskelligt i hver repository klon. I outputtet af kommandoen hg logkan revisionsnummeret ses før kolon (f.eks. "4: e1be1898f374").
Ændringssæt IDÆndringssæt-id'et er en SHA-1-hash bestående af tal og bogstaverne "a, b, c, d, e, f", for eksempel "e1be1898f3747386c41c8a5c5776e87373f6d3d3". Et ændringssæt-id tildeles automatisk til hvert ændringssæt, beregnet ud fra indholdet af det ændringssæt, og svarer derfor til det samme ændringssæt i alle lagre. Sandsynligheden for en kollision, når den samme SHA-1-hash genereres for to forskellige ændringssæt, er ekstremt lille.
Mercurial kræver ikke den fulde identifikatorstreng, når den bruges i kommandoer, den behøver kun den indledende del af den, der unikt identificerer det ønskede ændringssæt (ellers vil Mercurial rapportere en tvetydighed). I kommandooutputtet hg logkan ændringssæt-id'et ses efter kolon (f.eks. "4:e1be1898f374"). Uden en parameter udsender --debugkommandoen hg logikke den fulde, men en forkortet (på 12 tegn) ændringssætidentifikator.
TagsUd over revisionsnummeret og ændringssæt-id'et giver Mercurial mulighed for at give hvert ændringssæt et eller flere vilkårlige symbolske navne, kaldet tags (eller tags ). Etiketter tildeles ved hjælp af kommandoen hg tag, og du kan se alle tilføjede etiketter ved hjælp af kommandoen hg tags. Etiketnavnet kan ikke indeholde nogle tegn (for eksempel ": "), som Mercurial vil rapportere, når kommandoen udføres, hvis det er nødvendigt hg tag.
Hvor et ændringssæt-ID kan angives i kommandoer, kan etiketnavnet erstattes.
FilialnavnHver gren har sit eget navn. Det er angivet, hvornår grenen oprettes og ændres aldrig igen.
I modsætning til git antager Mercurial en mere stringent operationsmodel, hvoraf de mest bemærkelsesværdige aspekter er [11] [12] :
Mercurial kommer med CGI-scripts for at give en webgrænseflade til lagrene [13] .
Der er en grafisk skal TortoiseHg [14] , der fungerer både under Windows (med Explorer-integration) og under Linux (som en separat applikation [15] eller med Gnome/Nautilus- integration [16] ). Der er en hgtui - konsolklient under udvikling til Linux og Windows (ved hjælp af cygwin).
Atlassian promoverer også sin SourceTree- klient , som giver adgang til både hg og svn og git.
En række udviklingsmiljøer har Mercurial-funktioner, såsom Microsoft Visual Studio [17] [18] , IntelliJ IDEA [19] [20] [21] , Eclipse [22] , Qt Creator (siden version 2.0) [23] , PIDA [24] , NetBeans [25] . Det er muligt at arbejde med Mercurial inde fra Emacs ved hjælp af den universelle VC-pakke, der følger med Emacs.
Eksperimentel støtte til Mercurial er tilgængelig i Trac [26] . Redmine- projektet [27] vedligeholder også Mercurial-depoterne.
Ved at bruge Tailor-værktøjet [28] eller konverteringsudvidelsen [29] er det muligt at konvertere [30] arkiver af andre versionskontrolsystemer, inklusive CVS , Subversion , Git , Perforce , Darcs , GNU Arch , Bazaar .
Et betydeligt antal gratis softwareudviklingsprojekter bruger Mercurial som deres primære versionskontrolsystem [31] . Blandt dem:
Mercurial spejle af de vigtigste lagre i andre projekter [33] er understøttet , såsom GCC , Vim , Emacs og Linux-kernen .
Blandt de projekter, der brugte Mercurial i lang tid, men skiftede til Git i 2019-2021, er Adium , CLISP , Illumos , Coin3D , OpenJDK , SDL [34] .
![]() | |
---|---|
Tematiske steder |
Versionskontrolsystemer ( kategori ) | |
---|---|
Kun lokalt | |
Klient-server | |
Uddelt | |