Monotone
Monotone je distribuovaný verzovací systém s otevřeným zdrojovým textem.
Vývojář | Monotone team |
---|---|
První vydání | 6. dubna 2003 |
Aktuální verze | 1.1 (4. května 2014) |
Operační systém | Unix, Linux, BSD, macOS, Windows |
Vyvíjeno v | C++ |
Typ softwaru | Verzovací systém |
Licence | GNU General Public License |
Lokalizace | angličtina, italština, švédština, portugalština, němčina, španělština |
Web | www |
Některá data mohou pocházet z datové položky. |
Monotone sleduje revize souborů, seskupuje sady revizí do changesetů a sleduje historii včetně přejmenování. Preferuje integritu před výkonností.[1] Monotone je navržen jako distribuovaný systém a intenzivně využívá kryptografická primitiva pro sledování revizí (pomocí kryptografické hašovací funkce SHA-1) a pro autentizaci činností uživatelů (pomocí digitálních podpisů využívajících RSA).
Návrh
Na rozdíl od Apache Subversion používá Monotone distribuovaný přístup k verzování (stejně jako GNU arch a Git). Stejně jako Git a Mercurial používá Monotone používá SHA-1 haše pro identifikaci souborů a skupin souborů, místo obvyklých lineárních čísel revizí. Pro každého úživatele se udržuje jeho vlastní historie revizí, která je uložena v lokální databázi SQLite.
Integrita
Před rozsáhlými optimalizacemi ve verzi 0.27 bylo kvůli prvním zkušenostem Monotone často kritizováno pro jeho důraz na správnost před optimalizací. První akcí nového uživatele je obvykle synchronizace (naklonování) rozsáhlé existující databáze Monotone, což je akce, která pro rozsáhlé databáze může trvat hodiny kvůli podrobné validaci a kontrole integrity, jež Monotone provádí, když se přenášejí revize po síti. Po načtení počátečního klonu databáze fungují další činnosti obvykle rychleji. Ale i po roce 2010 existuje prostor pro další optimalizaci některých méně používaných funkcí.
Workflow
Silnou stránkou Monotone je jeho podpora používání diverge/merge přístupu, kterého dosahuje mimo jiné tím, že vždy dovoluje provedení commitu před sloučením větví.[2]
Síťový přístup
Ačkoli Monotone původně podporoval množství síťových protokolů pro synchronizaci stromů, nyní používá výhradně vlastní protokol nazývaný netsync, který je robustnější a efektivnější a sdílí určité koncepční rysy s rsync a cvsup. (Od verze 0.27 je možné používat netsync protokol přes jakýkoli proud, včetně ssh spojení.) Netsync má vlastní smluvený port přiřazený IANA (4691) a jeho starší verze jsou podporovány zásuvným modulem pro Wireshark. Neexistuje zvláštní Monotone server, protože jakýkoli Monotone klient může fungovat jako server.
Další vlastnosti
K dalším vlastnostem Monotone patří:
- Dobrá podpora pro internacionalizaci a lokalizaci
- Přenositelný design, implementace v C++
- Vysoká integrita je klíčovým cílem návrhu
- Monotone může importovat CVS projekty
- Elektronické podepisování revizí pomocí RSA certifikátů
- Snadné pro naučení díky sadě příkazů podobných CVS
- Velmi dobrý při vytváření a slučování větví
- Dobrá dokumentace
- Velmi jednoduchá správa
- Existence stabilních grafických uživatelských rozhraní:
- guitone, frontend v Qt pro správu pracovních ploch a databáze (podporovaný v systémech MS-Windows a Unix/Linux/MacOS)
- mtn-prohlížet, grafický prohlížeč v Gtk2, který umožňuje prohlížení databáze, i na dálku, bez potřeby pracovního stromu (podporované v systémech Unix/Linux/MacOS)
- Monotone-Viz, grapher historie revizí (podporovaný v systémech MS-Windows a Unix/Linux)
- TracMtn, Trac plugin pro prohlížení historie a repozitářů
- Úplná a vyčerpávající knihovna pro Perl, která umožňuje úplně ovládat Monotone pomocí skriptů v Perlu (kterou používá mtn-browse)
Nedostatky
Mezi nedostatky Monotone v lednu 2008 patřilo:
- Potenciální uživatelé nemohou přistupovat ke vzdáleným repozitářům za proxy (které jsou velmi obvyklé ve firemním prostředí) kvůli použití jiného protokolu než http
- Výkonnostní problémy při určitých operacích (nejlépe viditelné při počátečním pull)
Milníky
V Monotone verze 0.26 byly provedeny velmi rozsáhlé změny ve struktuře interní databáze, včetně zavedení nové struktury nazývané vývojáři Monotone roster[3]. Databáze vytvořenou v Monotone verze 0.26 nelze použít pro výměnu revizí se starší verzí databáze. Starší databáze musí být nejdříve upgradována na nový formát. Nový protokol netsync je nekompatibilní s dřívější verzí Monotone.
Implementace
Monotone je implementováno v moderním dialektu jazyka C++ s použitím knihovny Boost, kryptografické knihovny Botan a databázové knihovny SQLite. Monotone podporuje přizpůsobování a rozšířování pomocí hook funkcí napsaných v jazyce Lua. Proces překladu Monotone je automatizován nástrojem BuildBot a obsahuje množství regresních testů.
Monotone jako inspirace pro Git
V dubnu 2005 se Monotone stal předmětem zvýšeného zájmu free a open-source software komunity poté, co jej Linus Torvalds zmínil jako možnou náhradu BitKeeperu pro vývoj jádra Linuxu. V příspěvku v mailing listu pro vývoj jádra Linuxu Torvalds chválil Monotone a kritizoval Subversion (a prakticky všechny verzovací systémy klient-server):[4]
„ | Neobtěžujte mě řečmi o subversion. Pokud musíte, začněte si číst o „monotone“, zdá se, že je to nejvíce životaschopná alternativa. Ale neotravujte jeho vývojáře při práci, už ví o mých problémech ;)[4] | “ |
Nakonec se namísto použití Monotone Torvalds rozhodl napsat vlastní verzovací systém, Git. Návrh Gitu používá některé myšlenky z Monotone, ale oba projekty nesdílí žádný zdrojový kód. Git je mnohem více zaměřen na vysokou výkonnost, která vyplynula z Linusovy dlouhodobé zkušenosti s distribuovaným vývojem jádra Linuxu, na kterém spolupracuje s mnoha autory. Torvalds později okomentoval design a výkonnost Monotone:
„ | Pokud chcete VCS, který je napsaný v jazyce C++, zkuste Monotone. Opravdu. Používá „skutečnou databázi“, „pěkné objektově orientované knihovny“ a „krásné abstrakce v C++“. Ale upřímně řečeno, výsledkem všech těchto návrhových rozhodnutí, které znějí některým informatikům tak přitažlivě, je strašlivý a neudržovatelný zmatek.[5] | “ |
Cherry-picking
Klíčovým problémem, o kterém se diskutovalo,[6] bylo, zda náhrada BitKeeperu má podporovat operaci cherry-pick
umožňující, aby správce kódu při schvalování určité sady záplat zamítal vybrané jednotlivé záplaty. Torvalds argumentoval tím, že tento přístup „vede k nesprávné dynamice a psychologii v systému“, protože přesunuje zátěž na správce, místo aby autoři kódu vynaložili větší úsilí na udržování svého stromu bez odpadků. Tvrdil, že odmítání cherry-pick jako vlastnosti v Monotone je správné, ale není dostatečně důsledné, aby umožnilo snadné „zahazování“ nečistých pracovních stromů poté, co splnily svůj účel.[7] Torvalds také uvedl, že Monotone v té době nedosahoval výkonnosti potřebné pro projekt tak velký jako je vývoj Linuxového jádra.
Tento argument je v rozporu s vnímáním mnoha vývojářů, že použití funkce cherry-pick je pokročilá vlastnost, kterou musí verzovací nástroj podporovat. Jiné SCM nástroje, jako například Darcs, jsou v této oblasti obzvláště silné. V roce 2010 Git i Monotone již určitou dobu cherry-picking podporovaly.
Podpora
Podpora pro Monotone je dostupná v mailing listech, na IRC a na podpůrné wiki.
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Monotone (software) na anglické Wikipedii.
- 2008-09-18 [cit. 2010-11-01]. Dostupné online.
- Dealing with a Fork - monotone documentation [online]. [cit. 2010-11-21]. Dostupné online.
- What are rosters [online]. Dostupné online.
- Linus Torvalds. LKML: Linus Torvalds: Kernel SCM saga [online]. 2005-04-06. Dostupné online.
- Linus Torvalds. Re: [RFC] Convert builin-mailinfo.c to use The Better String Library [online]. 2007-09-06 [cit. 2018-07-13]. Dostupné v archivu pořízeném dne 2015-08-13.
- David Woodhouse. LKML: David Woodhouse: Kernel SCM saga [online]. 2005-04-07 [cit. 2017-02-23]. Dostupné online.
- Linus Torvalds. 2005-04-07. Dostupné online.
- GENESIS Developer Installation [online]. [cit. 2015-12-26]. Dostupné v archivu pořízeném dne 2015-12-27.
- Getting the I2P code [online]. [cit. 2014-07-03]. Dostupné online.