Uživatelské nástroje

Nástroje pro tento web


svn

Toto je starší verze dokumentu!


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]

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 <UCO> import <PROJECT_ADDR> https://projekty.ics.muni.cz/nfsen/svn/<MY_PROJECT>
  • 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ář <MY_PROJECT> 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 <UCO> checkout https://projekty.ics.muni.cz/nfsen/svn/<MY_PROJECT>
  • 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 <UCO> checkout --force https://projekty.ics.muni.cz/nfsen/svn/<MY_PROJECT>

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 <UCO> mkdir https://projekty.ics.muni.cz/nfsen/svn/<MY_PROJECT>
  • otevřeme adresář, kde chceme mít pracovní kopii a provedeme checkout:
cd /tmp/
svn --username <UCO> checkout https://projekty.ics.muni.cz/nfsen/svn/<MY_PROJECT>
  • nyní je vytvořen adresář /tmp/<MY_PROJECT>, který je pod správou verzí
  • nakopírujeme do něj nachystanou strukturu projektu a zavoláme add
cp -r <PROJECT_SOURCE_DIR>/* /tmp/<MY_PROJECT>/
svn add /tmp/<MY_PROJECT>/*
  • 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/<MY_PROJECT>

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 <MY_PROJECT>
  • ad a)
    • na všechny nové soubory/adresáře které chceme přidat do repozitáře provedeme svn add
svn add <MY_PROJECT>/newfile
svn add <MY_PROJECT>/newdirectory
svn add <MY_PROJECT>/new_file_or_dir_1 .. <MY_PROJECT>/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 <MY_PROJECT>/file_to_remove
svn delete <MY_PROJECT>/dir_to_remove
svn delete <MY_PROJECT>/new_file_or_dir_1 .. <MY_PROJECT>/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/<MY_PROJECT>/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 <MY_PROJECT>

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

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

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
svn.1329591959.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki