Porównanie git i svn według komend
Przykład użycia
Dla wygody ustawmy zmienną SVN na adres gdzie będziemy działać. export SVN="$HOME/dokumenty/sandbox/svn" mkdir -p $SVN cd $SVN Tworzymy repozytorium svnadmin create repo Tworzenie tymczasowego katalogu, który zostanie zaimportowany do repozytorium. Nasz stary projekt znajduje się w $HOME/projekt1. mkdir tempdir cd tempdir mkdir project1 mkdir project1/trunk project1/branches project1/tags Nasz stary projekt kopiujemy do trunk. Tam teraz będzie się odbywał rozwój projektu. W pewnych miejscach trzeba podać file://$SVN zamiast nazwy katalogu. svn oczekuje bowiem po file:// pełnej ścieżki. Błędne zatem będzie użycie svn import . repo prawidłowo będzie svn import . file://$SVN/repo cp -R $HOME/projekt1 project1/trunk svn import . file://$SVN/repo Wyświetlamy listę plików w repozytorium czy się zgadzają z naszym projektem. svn list --verbose file://$SVN/repo/projekt1/trunk Tworzymy kopię roboczą, na której będziemy działać. svn co file://$SVN/repo/projekt1/trunk $SVN/wc Ponowne utworzenie kopii robczej w tym samym katalogu spwoduje błąd. svn co file://$SVN/repo/projekt1/trunk $SVN/wc nie można jeszcze raz zrobić kopi roboczej w danym katalogu. Ale można przełączyć tę kopię roboczą aby używała innego adresu. svn switch file://$SVN/repo/projekt2/trunk . Jeśli do naszej kopii roboczej skopiowaliśmy wiele plików i chcemy je dodać do repozytorium, ale nie chcemy przeszukiwać całej kopii roboczej, wydajemy polecenie. svn add --force . Alternatywa: svn status | awk '/\?/ {print $2}' | xargs svn add
FAQ
Całkowite usunięcie rewizji większych niż N
W poniższym przypadku wycofamy wszyskie zmiany do rewizji numer 7. Nie będą one w historii w ogóle. export SVN="$HOME/dokumenty/sandbox/svn" cd $SVN mkdir dumps svnadmin dump repo --revision 0:7 > dumps/revs-0-7.dumpfile Przenosimy stare repozytorium w bezpieczne miejsce, tworzymy nowe repozytorium, wrzucamy do niego plik dump. mv repo repo.old svnadmin create repo svnadmin load repo < dumps/revs-0-7.dumpfile kopiujemy katalog ze skryptami do nowego repozytorium cp -R repo.old/hooks repo
vimdiff jako domyślny
W tym przykładzie potrzebujemy zainstalowanego pythona. tworzymy plik /usr/local/bin/mydiff #!/usr/bin/python import sys, os diffprogram = '/usr/bin/vimdiff' fn_old = sys.argv fn_working_copy = sys.argv # arrange the args in the order diffprogram expects them args = ['mydiff', '-d', fn_old, fn_working_copy] os.execv(diffprogram, args)
w .subversion/config [helpers] diff-cmd = /usr/local/bin/mydiff
wyświetlenie plików według rozmiaru z pominięciem .svn
find wc -type f ! -ipath '*.svn*' | xargs ls -lS | less
Podczas dodawania katalogów dostaje komunikat "Naruszenie ochrony pamięci"
Czasami taki błąd może wystąpić. Kiedy wykonamy polecenie svn st zobaczymy flage L przy katalogu, który dodawaliśmy. Należy wtedy wykonać polecenie svn cleanup.
Instalacja na gentoo
Subversion używa wspólnych bibliotek współdzielonych razem z apache (prawdopodobnie mod_dav_svn). Dlatego trzeba powiedzieć subversion aby używał bibliotek apache'a ().
Jeśli jeszcze nie używałeś pliku /etc/portage/packages.use:
mkdir /etc/portage touch /etc/portage/package.use echo "dev-util/subversion apache2" >>/etc/portage/package.use emerge subversion
Wersjonowanie konfiguracji
To jest wersja robocza skopiowana z . Trzeba ją jeszcze przerobić i posprawdzać.
Wystarczy zainstalować na jakimś serwerze repozytorium, np. Subversion. Aby zaimportować konfigurację:
svn import /etc https://svn.foo-baz.com/svn/configuration/my.server.name/etc
Pliki zostały dodane do repozytorium. Teraz najbardziej skomplikowana czynność. Ponieważ katalog /etc nie jest kopią roboczą repozytorium, polecenia takie jak svn commit, svn update nie będą działały. Aby szybko przerobić /etc na kopię roboczą można wykonać następujące polecenia:
svn co https://svn.foo-baz.com/svn/configuration/my.server.name/etc /tmp/etc/ rm -f `find /tmp/etc -type f | grep -v '.svn'` cp /tmp/etc/* /etc
Teraz można korzystać z /etc jak z każdej innej kopii roboczej (svn update, svn stat, svn commit, itp.). Warto zastanowić się nad mechanizmem zapisywania praw dostępu i właścicieli plików, można skorzystać np. z mtree. Teraz najważniejsze czyli wyrobić w sobie nawyk uruchamiania svn commit po każdej zmianie :-)
Mtree
http://www.free-x.ch/pub/mtree-tripwire.html
Ściągawka
Szybki start
svnadmin create /var/svnroot svn import 'LocalDir' file:///var/svnroot/'ProjectName' svn checkout file:///var/svnroot/'ProjectName' cd 'ProjectName' svn help ['command']
Adresy URL Subversion
file:// Bezpośredni dostęp do repozytorium (na dysku lokalnym). http:// Dostęp przez protokół WebDAV do obsługującego Subversion serwera Apache. https:// Tak samo jak http://, ale z szyfrowaniem SSL. svn:// Dostęp przez typowy protokół do serwera svnserver. svn+ssh:// Tak samo jak svn://, ale przez tunel SSH.
Podpolecenia svn add Dodaje pliki i katalogi blame (praise, annotate, ann) Pokazuje autora i informację wersji w linii dla określonych plików lub URL-i. cat Wyświetla zawartość określonych plików lub URL-i. checkout (co) Pobiera kopię roboczą z repozytorium cleanup Rekursywnie czyści kopię roboczą commit (ci) Wysyła zmiany z twojej kopii roboczej do repozytorium copy (cp) Kopiuje plik lub katalog w kopii roboczej lub w repozytorium delete (del, remove,rm) Usuwa element z kopii roboczej lub z repozytorium diff (di) Wyświetla różnicę pomiędzy dwoma ścieżkami. export Eksportuje czyste drzewo katalogowe help Wyświetla tekst pomocy import Rekursywnie wysyła kopię twojego katalogu lokalnego do repozytorium info Wyświetla informację o ścieżkach (ang. PATHs) list (ls) Wylistowuje katalogi w repozytorium log Wyświetla informację dotyczące zapisów merge Nakłada różnicę między dwoma źródłami na kopię roboczą (np. do łączenia gałęzi) mkdir Tworzy nowy katalog pod kontrolą wersji move (mv,rename,ren) Przenosi plik lub katalog (lub zmienia nazwę) propdel (pdel,pd) Usuwa właściwość z elementu propedit (pedit,pe) Edytuje właściwość jednego lub więcej elementów pod kontrolą wersji propget (pget,pg) Wyświetla wartość właściwości proplist (plist,pl) Wylistowuje wszystkie właściwości propset (pset,ps) Ustawia właściwość na plikach, katalogach lub wersji resolved Usuwa stan konfliktu na kopii roboczej plików lub katalogów revert Cofa wszystkie lokalne edycje status (stat,st) Wyświetla status kopii roboczej plików lub katalogów switch (sw) Uaktualnia kopię roboczą na inny URL. update (up) Uaktualnia twoją kopię roboczą Przełączniki svn --config-dir DIR Czyta konfigurację z DIR zamiast z ~/.subversion. --diff-cmd CMD Użyj zewnętrznego programu CMD do generowania wyjścia diff zamiast z wewnętrznego silnika diff. --diff3-cmd CMD Użyj zewnętrznego programu CMD do scalania plików. --dry-run Uruchom polecenie bez zmiany czegokolowiek. --editor-cmd CMD Użyj zewnętrznego programu CMD do edycji plików. --encoding ENC Poinstruuj Subversion, aby używało kodowania ENC do przechowywania wiadomości. --extensions ARG (-x) Dodatkowe argumenty dla zewnętrznego diff-u, np. svn --diff-cmd diff -x --normal diff main.c. --file FILE (-F) Użyj zawartości pliku FILE jako argumentu dla podanego podpolecenia. --force Wymusza uruchomienie danego podpolecenia. --force-log Wymusza zaakceptowanie podejrzanego parametru przekazanego z opcjami --message jako prawidłowego. --help (-h lub -?) Wyświetla pomoc dla podanego polecenia lub ogólną pomoc tekstową. --ignore-ancestry Ignoruj pochodzenie podczas obliczania różnic (polegaj tylko na zawartości ścieżki). --incremental Wyświetl wyjście w formacie odpowiednim do złączenia. --message (-m) MSG Określ komunikat zapisu MSG. --no-auth-cache Zapobiega buforowaniu informacji uwierzytelniania. --no-auto-props Wyłącz auto-props, nadrzędne do wytycznej enable-auto-props w pliku konfiguracyjnym. --no-diff-deleted Zabrania Subversion wyświetlania różnic dla nieistniejących plików. --no-ignore Pokazuje pliki w wylistowaniu statusu, które normalnie byłyby pominięte, gdyż pasują do wzorca we właściwości svn:ingore. --non-interactive Zapobiega pytaniu o informacje uwierzytalniające. --non-recursive (-N) Zatrzymuje podpolecenie przed rekursywnym wchodzeniem do podkatalogów. --notice-ancestry Uważaj na pochodzenie podczas obliczania różnic. --old ARG Używa ARG jako starszy cel. --password PASS Hasło do uwierzytelnienia. --quiet (-q) Wyświetla tylko istotne informacje podczas wykonywania operacji. --recursive (-R) Ustawia działanie rekursywne dla podpolecenia. --relocate FROM TO [PATH...] Użyte z podpoleceniem svn switch, zmienia położenie repozytorium, do którego odnosi się twoja kopia robocza. --revision REV (-r) Dostarcz wersję REV (lub przedział wersji) dla danej operacji. --revprop Działa na właściwości wersji zamiast na właściwości Subversion specyficznej dla pliku lub katalogu (wymaga przełącznika --switch). --show-updates (-u) Sprawia, że klient wyświetla informację które pliki w twojej kopii roboczej są nieauktualne.
Zobacz także
polskie
http://www.debian.org/doc/manuals/reference/ch-vcs.pl.html
http://linux.gery.pl/dzialy/programowanie/narzedzia/subversion
Subversion dla każdego - a dokładniej dla użytkowników windows
Prezentacja w slajdach
Wskazówki jak efektywniej używać Subversion (plik xml zapisać na dysku i otworzyć edytorem tekstu a nie przeglądarką)
Tłumaczenie książki Subversion
angielskie
Oficjalna książka do Subversion
Oficjalny Faq
Spis wszystkich komend z svn-book
http://del.icio.us/popular/subversion
https://opensvn.csie.org/ Darmowe repozytorium w internecie
Wprowadzenie Red-hata do Subversion
Subversion na Mac-u
Doświadczenia z używania Subversion
Jak używać Subversion z RubyOnRails
Grupy dyskusyjne
Artykuł w linux-magazine
Prezentacja
Prezentacja
Sciąga
Subversion z Apache
Użtkowanie subversion w projekcie KDE
Instalacja i użytkowanie na gentoo
http://www.svnforum.org/ forum
http://svn.haxx.se/ Archiwum list mailowych
Anonimowy dostęp tylko do odczytu
Blog, artykuły, książki
Automatyczna dystrybucja
Trac - system zarządzania projektem z interfejsem sieciowym, używa subversion
Międzyplatformowy graficzny klient
Graficzny klient pod Windows
Więcej o klientach
http://www.phptr.com/articles/article.asp?p=408888
Podstawowe użycie - rozdział z książki
Wprowadzenie do Subversion
How to use bdb instead fsfs correctly
Comparision to other tools (also migration tools)
hook scripts and configuration files under version control
bitkeeper vs subversion (svk)
o'reilly
Subversion tutorial
Uzyskiwanie dostępu do zabezpieczonych serwerów Subversion
Stawianie bezpiecznego serwera z Subversion
Artykuł na onlamp.com o używaniu
Rozdział Wprowadzenie z książki Version Control with Subversion
Rozdział drugi książki Version Control with Subversion
Porównianie kilku systemów kontroli wersji
Jeden użytkownik i Subversion
Wielu użytkowników i Subversion
Trzymanie całego życia w Subversion
10 najlepszych porad dla użytkowników CVS
SVK
prezentacja SVK techniką slajdów
/etc under svk
Porównanie SVK, SVN i CVS
Painless Merging with SVK: An Interview with Chia-liang Kao
Author about svk
Distributed development with SVK