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