Git-SVN vs Bzr-SVN

Aktualizace (1.7.2009) Dnes jsem zkoušel novy git 1.6.0.4 (svn 1.5.4) na práci s SVN repozitory. Konečně práce s repozitory funguje bez problémů a když provádím clone netrvá to 25min, ale pár vteřin jako u bzr. Asi to byla nějaká chyba, kterou vývojáři opravili.

Nedávno se tu vedla debata o tom jak nejlépe pracovat s Subversion když jsme offline. Nejlepší řešení je přejít na distribuovaný verzovací systém. Bavíme se o řešení na straně klienta, server bude stále Subversion.

Vytvořil jsem tento skript pomocí kterého si můžu udělat kolik chci revizi do repozitáře, je to primitivní ale pro základní testování to stačilo. Vytvořil jsem repozitory, které má 150 commitů a chci s ním pracovat pomocí git-svn nebo bzr-svn.

#!/bin/bash
# Settings
START=2
COUNT=50
WC=/home/prskavecl/websites/svn_tests/test2/test2

cd $WC
touch $WC/trunk/testfile
svn add $WC/trunk/testfile
# cyklus pro vytvoreni revizi
x=$START;     # inicializuje hodnotu x na 0
while [ "$x" -le $COUNT ]; do
  echo "Aktuální hodnota x: $x"
  # zvýšení hodnoty x o 1
  echo $x >>$WC/trunk/testfile
  x=$(expr $x + 1)
  svn commit --message "Insert value $x"
done 
svn up

Testování jsem prováděl na Dellu D830 (2,4 GHz,Intel Core 2 Duo, 2GB RAM) v Ubuntu 8.10.

Verze použitých programů:

  • git 1.5.6.3,
  • svn 1.5.1,
  • bzr 1.6.1 (bzr-svn 0.4.13-2)

Postup testování, šlo mi hlavně porovnat rychlost práce. Proto provedu tyto operace.

  1. checkout
  2. odpojení od centrálního repozitory
  3. změnu v souboru
  4. lokální commit
  5. napojení na centrální repozitory
  6. přenesení změn do centrálního repozitory

bzr-svn

  1. bzr checkout file:///home/svn/repos/test
  2. bzr unbind
  3. nano /trunk/testfile
  4. bzr commit
  5. bzr bind
  6. bzr push file:///home/svn/repos/test

Tento postup lze zkrátit pomocí bzr commit —local potom nemusíme použít bind a unbind.

Celá operace trvala vteřiny, ani jsem nepoznal, že pracuji s jiným SCM než je SVN.

git-svn

  1. git svn clone file:///home/prskavecl/repos/test
  2. není třeba, ale checkout stále jede…po uplynutí 52 min jsem to málem vzdal
  3. nano /trunk/testfile
  4. git commit -a (5s)
  5. není třeba
  6. git svn dcommit (25s)

Více o git a subversion najdete v článku Dana Horáka.

Závěr

Vím, že spousta lidí fandí gitu, ale mě vůbec zatím nepřesvědčil, zatím u mne vede Bazzar. Možná je to problém jen git-svn a ne samotného gitu, ale tento druh spolupráce je hrozně pomalý.