![]() | |
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 je distribuovaný verzovací systém s otevřeným zdrojovým textem.
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).
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 uživatele se udržuje jeho vlastní historie revizí, která je uložena v lokální databázi SQLite.
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í.
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]
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.
K dalším vlastnostem Monotone patří:
Mezi nedostatky Monotone v lednu 2008 patřilo:
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.
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šiř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ů.
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] | “ |
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 pro Monotone je dostupná v mailing listech, na IRC a na podpůrné wiki.
V tomto článku byl použit překlad textu z článku Monotone (software) na anglické Wikipedii.