===== SVN: subversion na nfsen =====
==== základy ====
* Pojmy
* **repozitář** - adresář na serveru, ke kterému je připojena databáze změn (správa verzí) a nastavena práva uživatelů
* **pracovní kopie** - lokálně uložená kopie adresářů/souborů a lokální databáze změn
* databáze změn se ukládá jako adresář **.svn** do každého adresáře
* kromě změn obsahuje i URL vzdáleného repozitáře a použité uživatelské jméno, takže jej už není nutné uvádět
* pro používání svn je zapotřebí nejprve nainstalovat svn. Na systému Linux/Debian lze provést následovně:
apt-get install subversion
* základní syntax svn klienta je:
svn command [options] [args]
* nejpoužívanější typy commands:
* **add** - přidá soubory/adresáře pod lokální správu verzí
* **import** - přidá nový soubor/strom do vzdáleného ropozitáře
* **delete**
* pokud se zadá cesta - odstraní soubory/adresáře z lokální správy verzí
* pokud se zadá url - odstraní soubory/adresáře ze vzdáleného repozitáře
* **copy**
* pokud se zadají cesty - zkopíruje soubory/adresáře v lokální správě verzí
* pokud se zadají url - zkopíruje soubory/adresáře ve vzdáleném repozitáři
* **move** - ekvivaletní k copy + delete
* **commit**
* odešle změny pracovní kopie do vzdáleného repozitáře, tj synchronizace lokální -> vzdálený
* pokud se provedou nějaké lokální změny a někdo jiný provede commit stejného souboru, vznikne při našem pokusu o provedení commitu **konflikt**.
* **update**
* přenese změny ze vzdáleného repozitáře do lokální pracovní kopie, synchronizace vzdálený -> lokální
* **checkout** - stáhne soubor/strom ze vzdáleného repozitáře, vytvoří lokální databázi pro správu verzí
* více detailních informací na **svn help [command]**
* **repozitář nfsen je umístěn na url: https://projekty.ics.muni.cz/nfsen/svn/**
* uživatel a heslo je **stejné jako pro přihlášení do tracu**
==== přidání nového projektu do repozitáře ====
* přidání můžeme provést dvěma způsoby:
* a) provedeme import a následně checkout
* b) provedeme checkout a následně add
=== přidání pomocí import a checkout ===
* na lokálním disku si připravíme adresářovou strukturu projektu, kterou chceme umístit do repositáře
* spustíme příkaz:
svn -m "My first import" --username import https://projekty.ics.muni.cz/nfsen/svn/
* parametry:
* **-m** - obsahuje zprávu popisujicí provedené změny, pokud není zadána, otevře se default textový editor pro zadání
* **--username** - obsahuje uživatelské jméno odpovídající loginu do trac
* **import** - příkaz, který má svn provést
* **!https://...** - adresa repozitáře zakončena novým adresářem pro vkládaný projekt
* nový adresář by měl být tvaru **DP-prijmeni** nebo **BP-prijmeni**
* soubory jsou importovány do repozitáře, ale originální strom neni pod správou verzí, musíme navíc provést checkout
svn --username checkout https://projekty.ics.muni.cz/nfsen/svn/
* pokud provádíme checkout do stejného adresáře, objeví se nám varování:
Failed to add file 'test/a': an unversioned file of the same name already exists
* chybu můžeme ignorovat pomocí parametru **--force**, ale opatrně :)
svn --username checkout --force https://projekty.ics.muni.cz/nfsen/svn/
=== přidání pomocí checkout a add ===
* abychom nemuseli stahovat všechny existujíci soubory v repozitáři, vytvoříme si v root repozitáře nejprve svůj prázdný adresář
svn -m "preparing directory" --username mkdir https://projekty.ics.muni.cz/nfsen/svn/
* otevřeme adresář, kde chceme mít pracovní kopii a provedeme checkout:
cd /tmp/
svn --username checkout https://projekty.ics.muni.cz/nfsen/svn/
* nyní je vytvořen adresář /tmp/, který je pod správou verzí
* nakopírujeme do něj nachystanou strukturu projektu a zavoláme add
cp -r /* /tmp//
svn add /tmp//*
* nyní je lokálně vše v pořádku a potřebujeme změny odeslat na server:
svn -m "My first adding files" commit /tmp/
==== commit - odeslání změn pracovní kopie do repozitáře ====
* v pracovní kopii mohou nastat následující změny:
* a) přidání nového souboru/adresáře
* b) smazání souboru/adresáře
* c) modifikace souboru
* před provedením commitu je třeba aktualizovat lokální správu verzí
* lokální změny adresářové struktury zobrzíme pomocí
svn status
* ad a)
* na všechny nové soubory/adresáře které chceme přidat do repozitáře provedeme svn add
svn add /newfile
svn add /newdirectory
svn add /new_file_or_dir_1 .. /new_file_or_dir_X
* ad b)
* pokud jsme soubor ještě nesmazali, provedeme svn delete na požadované lokální soubory/adresáře
svn delete /file_to_remove
svn delete /dir_to_remove
svn delete /new_file_or_dir_1 .. /new_file_or_dir_X
* pokud jsme soubor už smazali, vymažeme jej přimo na repozitáři (automatický commit)
svn -m "delete file example" delete https://projekty.ics.muni.cz/nfsen/svn//file_to_remove
* ad c)
* modifikované soubory jsou rozpoznané automaticky a nemusíme je nikterak označovat
* vlastní commit provedeme příkazem
svn -m "my first changes example" commit
==== delete ====
svn -m "delete file example" --username 143248 delete https://projekty.ics.muni.cz/nfsen/svn/tools
svn -m "structure changes" --username 143248 delete https://projekty.ics.muni.cz/nfsen/svn/src https://projekty.ics.muni.cz/nfsen/svn/doc
==== move ====
http://svnbook.red-bean.com/en/1.0/re18.html
* je to vlastne delete a add
==== checkout ====
svn --username 143248 co https://projekty.ics.muni.cz/nfsen/svn/DP-bariencik
djbuldog@Pharaon:~/skola/Mgr 4.semestr/SDIPR diplomka$ svn --username 143248 co https://projekty.ics.muni.cz/nfsen/svn/DP-bariencik
svn: Failed to add directory 'DP-bariencik/tools': an unversioned directory of the same name already exists
djbuldog@Pharaon:~/skola/Mgr 4.semestr/SDIPR diplomka$ svn --username 143248 co https://projekty.ics.muni.cz/nfsen/svn/DP-bariencik
Checked out revision 26.
* jak checkoutnotu urcitou cestu do urciteho dir? :)
==== update ====
==== mkdir ====
http://svnbook.red-bean.com/en/1.0/re17.html
==== commit ====
djbuldog@Pharaon:~/Desktop/SDIPR diplomka/DP-bariencik/src$ svn commit -m "asus_exe bash script - replace dataCreator.c by hexdump" asusexe
Sending asusexe/asus_exe
Transmitting file data .
Committed revision 27.
* commitoval modifikovaný soubor, ale neodstranil smazané :(
* soubory nesmi byt smazany normal.. ale pres svn delete :)
* tedy svn delete dataCreator.c dataCreator
* a pak svn commit -m "mazu mazu"
* když neuvedu parametr -m otevře se default textový editor pro vytvoření message
* pokud jsem je smazal uz normalne, tak muzu pouzit CO ke stazeni aktualniho :)
* commitoval jsem nějaké modifikované a nové soubory :) nové soubory se nepřidaly... musí se provést svn add