Začínáme

TortoiseSVN

Vytváříme repozitory

Vytvoříme adresář pro repozitory např. c:/rep a v něm adresář pro projekt např. rep_test a na adresáři přes pravé tlačítko se dostaneme do menu TSVN, kde před volbu Vytvořit repozitory zde (Create repozitory here) vytvoříme repozitory jak ukazuje obrázek. Po úspěšném vytvoření repozitory si můžeme prohlédnout adresář a uvidíme soubory co vytvořil Subversion.

Vytváříte repozitory

Struktura repozitory je na dalším výpisu. V adresáři conf/ jsou konfigurační soubory pro přístup k repozitory, v adresáři db/ jsou uložená data a souboru current je aktuální revize. V adresáři hooks/ jsou šablony pro hooks skripty, které umožňují vykonat nějakou akci před určitou akcí v Subversion.

conf/
  authz
  passwd
  svnserve.conf
db/
  ..
  current
  ..
hooks/
  post-commit.tmpl
  post-lock.tmpl
  post-revprop-change.tmpl
  post-unlock.tmpl
  pre-commit.tmpl
  pre-lock.tmpl
  pre-revprop-change.tmpl
  pre-unlock.tmpl
  start-commit.tmpl
locks/
format
README.txt

Po vytvoření repozitory je dobré otevřít repozitory browser a vytvořit základní strukturu pomocí přímaku vytvořit adresář "create folder".

Vytváříte adresáře v repozitory

V repozitory můžete vytvořit vlastní adresáře, ale doporučuje se nejdříve vytvořit strukturu do které naimportujete svoje adresáře.

Struktura slouží k tomu, abychom vedli hlavní kmen projektu (trunk) a mohli také vést větve (branches) a dělat nálepky (tags) pro určité vydané verze.

Doporučená struktura

Import zdrojových kódů

Pokud už máme něco co chceme do repozitory importovat uděláme to pomocí příkazu import. Jinak můžeme tento krok přeskočit, protože strukturu můžeme vytvořit pomocí repozitory browseru.

Vytváříme pracovní kopii

Provedeme checkout na repozitory a začneme pracovat.

Checkout

SVN - řádkový klient

Ve stručnosti zopakuji stejné postupy jako ve TSVN.

Vytvoříme repozitory

svnadmin create --fs-type fsfs c:/rep/rep_test

Rozdíl mezi Windows a Linuxem je jen ve způsobu zadávání cesty k repozitory. Obdobně to můžete aplikovat na všechny příklady. SVN se ve funkčnosti mezi Windows a Linuxem nijak neliší.

svnadmin create --fs-type fsfs /srv/svn/rep_test

V řádkovém klientu nemůžeme vytvořit adresáře přímo, ale uděláme je rovnou při prvním importu souborů, tento postup lze použít i přes TSVN.

cd c:/tmp
mkdir test
cd test
mkdir trunk
mkdir tags
mkdir branches
svn import --message "Initial import" file:///C:/rep/rep_test

Potom vytvoříme pracovní kopii

svn checkout file:///C:/rep/rep_test/trunk c:/wc/test

Běžný pracovní postup

Nejdříve si aktualizujte svoji pracovní kopii.

svn update

nebo

svn up

Skoro každý příkaz má zkratku, která se hodí aby jste to nemuseli rozepisovat. Stačí se podívat na svn help a uvidíte je.

Potom vytvoříte nové soubory, smažete staré soubory, změníte obsah. Pomocí příkazu svn diff si ověříte můžete zobrazit změny své pracovní kopie proti verzi v repozitory.

svn diff

Pokud jste pracovali s pracovní kopii a přidávali nebo mazali soubory, je dobré vědět zda jsou již přidané či v jakém stavu jsou to zjistíme pomocí svn status a potom můžeme chybějící soubory např. pomocí svn add přidat.

svn status

Změny odešlete je pomocí commitu do repozitory.

svn commit -m "Text zprávy"

Postup se opakuje, jen update nemusíte dávat pokaždé pokud jste si jistý, že nikdo s repozitory mezitím nepracoval. Případně můžete zamknout repozitory během práce na změnách. Pokud nenastane konflikt vystačíte si s tímto jednoduchým postupem. Pokud dojde ke konfliktu můžete změny spojit (merge) nebo svoje vrátit pomocí svn revert.

Export pro hosting, ftp apod.

Pokud by vám vadí adresáře, které svn vytváří automaticky a uchovává v nich svoje informace, tak těch se zbavíte pomocí exportu.

Pokud chcete do aktuálního adresáře všechny soubory vyexportovat stačí zadat tento příkaz a soubory se tam uloží. Dá se také pracovat s pracovní kopii nebo zadávat i cestu pro export.

svn export file:///C:/rep/rep_test/trunk

Příklad exportního skriptu v shellu linux pro export projektu. Exportuje se poslední revize, a vytvoří se kromě exportu i balík označený revizí a datumem vytvoření.

# path to export files
EXPORTPATH=/home/user/export/projekt
# url of repository
REPOS=file:///home/user/repos/projekt/trunk/
# path to repository
REPOSPATH=/home/user/repos/projekt/
# last revision
REV="$( svnlook youngest $REPOSPATH )"
# make export path
mkdir -p $EXPORTPATH
# svn force export (nothing to screen)
svn export --force $REPOS $EXPORTPATH  >> /dev/null
cd $EXPORTPATH
cd ..
# make tar.gz file for projekt
tar -czvf projekt-R$REV-`date +%Y%m%d-%H%M%S`.tgz projekt >> /dev/null

Pokud budete chtít vyexportovat jen soubory co se změnili v poslední revizi bude to trochu složitější a budete potřebovat tento skript.

# path to export files
EXPORTPATH=/tmp/test/
       # url of repository
REPOS=file:///home/user/repos/projekt/
       # path to repository
REPOSPATH=/home/user/repos/projekt/
# last revision
REV="$( svnlook youngest $REPOSPATH )"

# function to list and export file by file
pathexport() # $1
{
mkdir -p $EXPORTPATH${2%/*}
svn export --force $1$2 $EXPORTPATH$2
}

# make export path
mkdir -p $EXPORTPATH
# list all changed files
for i in $( svnlook changed -r $REV $REPOSPATH ); do
  if [ "${#i}" -gt "2" ]
      then pathexport $REPOS $i
  fi
done