Cviceni 3 - sprava zdrojových souborů Pojmy : CVS - Concurrent Version System architektura Client-Server nasledovnik RCS podrobnosti prednasky Repository - "skladiste" - oblast na disku, kde system uchovava sdilene soubory a stavove informace o tomto sdileni. Modul - logická struktura vztahující se k jednomu projektu. Obsahuje vsechny soubory, které není možné vygenerovat pomocí jiných utilit. 1. inicializace Repository Při první práci s CVS je potřebné inicializovat serverovou část aby věděla, kde má ukládat data. Ve škole budete mít Repository na svém kontě na serveru linux456.vsb.cz (přihlášení jako na Novell). proměnná CVSROOT = odkazuje na kořenový adresář repository export CVSROOT=$HOME/cvs = zpřístupní pro shell linuxu proměnnou CVSROOT s hodnotou /home/fei/stud//cvs. Tento adresář je nutné vytvořit Pro seriózní práci pod linuxem doporučuji tento export proměnné uložit do souboru .bash_profile nebo .bash_login resp. .profile (podle verze linuxu) Upozorňuji, že jména proměnných v linuxu jsou velkými písmeny, pokud to nedodržíte tak ve škole budete mít problém jelikož zde tato proměnná existuje a odkazuje na adresář, kde nemáte práva zápisu. Provést příkaz cvs init , který vytvoří vše potřebné pro práci s CVS na serverové straně 2. Nastavení WinCVS WinCVS - klient pro práci s CVS ve Windows. Menu Admin-Preferences zde je nutné ve starších verzích nastavit příslušné hodnoty tak aby byl přístup pomocí SSH (Doporučený klient SSH Secure Shell a z něj soubor ssh2.exe.) dále Path = hodnota, kterou má proměnná $CVSROOT v linuxu Server = linux456.vsb.cz pro cvicení, jinak server, kde máte Repository Host = login pod kterým se budete hlásit Na záložce CVS je nutné zaškrtnout Show CVS Console (open TTY) Dále je vhodné nastavit proměnnou HOME na stejné záložce Novější verze WinCVS mají nastavení CVSROOT přímo v dialogu pro konkrétní operaci. Postup je stejný jako u starších verzí. Je nutné si dát pozor na uložení hesla. Heslo je ukládáno a zobrazováno v čitelné podobě a tak to není bezpečné. 3. Prvotní nahrání modulu na server cvs import Provádí se jen jednou při zahájení tvorby projektu. Importuje se vždy adresář, který chápeme jako projekt (modul). Ve WinCVS nalezeme tuto volbu v menu Remote, nebo ve stromovém pohledu pod pravým tlačítkem. Filter Settings - máme možnost říct, jakým formátem se budou soubory na server ukládat. Změna se provede označením a tlačítkem edit, nebo dvojklikem. Importujeme vždy jen zdrojové data, tedy ty které nevznikají generováním při kompilaci apod. Dále můžeme importovat obrázky, knihovny a cokoliv dalšího. Po potvrzení vyskočí dialog Import Settings, kdy zadáváme jméno modulu. Pozor toto jméno by nemělo být cvs. I když se jmenuje položka Repository Path, jedná se o relativní cestu v rámci adresáře $CVSROOT. Doporučuji zpočátku jednoslovné jména. Dále zde máme možnost zadat Kdo provádí import a jakou verzi. Spodní část zaobírá okno pro zadání komentáře. Stejně jako většina dalších operací, uspěšné provedení vrací CVS kód 0. 4. Prvotní stažení modulu ze serveru cvs checkout V okamžiku, kdy máme data na serveru, je můžeme sdílet. Checkout provádíme vždy, když chceme hromadně stáhnout nový modul, nebo všechny soubory v aktuální verzi. Např. nový člen týmu, reinstalace PC apod. Provádí se obdobným stylem jako import a tak ji opět nalezneme v menu Remote a pod pravým tlačítkem (kde najdeme většinu funkcí) Pozor volte jiny adresář než odkud se importovalo. Checkout vytváří adresář se jménem modulu a v případě konfliktu neproběhne korektně Po požadavku na checkout se nám objeví dialog Checkout settings, kde je nutné zadat jméno modulu tak jak jsme jej uvedli při importu (nebo nám bylo řečeno) Většina dalších voleb nás pro jednoduchost nezajímá, podrobnosti v dokumentaci. Po provedení checkoutu, se nám změní ikona u adresáře na fajfku a soubory rovněž mají jinou ikonu dle svého typu. 4. Běžná práce s CVS Předchozí body provádíme minimálně. Běžná práce spočívá v modifikaci souborů a následném provedení posloupnosti: cvs update slouží k synchronizaci lokální kopie a verze na serveru. Je jí nutné provést před aktualizací souborů, jelikož bychom tím mohli přijít o změny, které mohl od posledního updatu provést někdo jiný. Provedením updatu se nezmění stav modifikovaných souborů. Stále jsou ještě na lokálním počítači. cvs commit slouží k samotnému nahrání lokální kopie na server. Po této operaci se změní stav našich dokumentů a získají vyšší číslo verze. Tyto operace jako většina dalších se provádějí buď nad množinou soborů nebo i adresářů. Operace najdeme buď v menu Modify, nebo pod pravým tlačítkem (Update selection, Commit selection) Ve vyvolaných dialozích je možné zadat různé možnosti. Jejich podrobný výčet a popis je možné si najít na internetu v manuálech. Jedná se například o možnost návratu k předchozí verzi apod. U dialogu pro commit doporučuji vždy uváděj komentář k tomu jaké jsme provedli změny 5. Přidání nového souboru do CVS Během vývoje vznikají nové soubory, jiné soubory zanikají apod. Zde systém CVS nabízí rovněž podporu. Přidání souboru, stejně jako jeho odebrání z modulu se provádní ve dvou krocích. Nejprve po nakopírování (vzniku) souboru ve spravovaném adresáři dáme z menu Modify příkaz Add selection (binary pro binární soubory, rozdíl vysvětlen na konci) a následně provedete klasický commit. Podobně provedeme příkazem Remove odebrání souboru z repository. Pokud provedeme jen smazání na lokálním stroji, tak CVS tento soubor vyhodnotí jako chybějící a při následujícícm updatu jej opět vytvoří (dobrá vlastnost když si smažete omylem všechny soubory) 6. Diff a Log Poslední funkce o kterých se zmíním je Diff a Log. První z těchto funkcí se hodí pokud chceme zjistit v čem se jednotlivé verze liší. Máte možnost buď využít interního diffu, který ale není příliš uživatelsky intuitivní a tak doporučuji nějaký externí diff. Velmi se mi osvědčil ExamDiff (viz. Google). U tohoto programu, ale občas zlobí práva s přístupem na disk. V tempu ale porovnávané soubory zůstanou, takže je možné jej otevřít v tomto programu ručně. Log slouží k tomu, abychom si mohli přečíst vkládané komentáře k jednotlivým verzím dokumentů.