===== 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