Przejdź do zawartości

Subversion

50% Status
Z Wikibooks, biblioteki wolnych podręczników.

Przykład użycia

[edytuj]

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

[edytuj]

Całkowite usunięcie rewizji większych niż N

[edytuj]

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

[1]

vimdiff jako domyślny

[edytuj]

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[6]
fn_working_copy = sys.argv[7]
# 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

[2]

wyświetlenie plików według rozmiaru z pominięciem .svn

[edytuj]
find wc -type f ! -ipath '*.svn*' | xargs ls -lS | less

Podczas dodawania katalogów dostaje komunikat "Naruszenie ochrony pamięci"

[edytuj]

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.

[3]

Instalacja na gentoo

[edytuj]

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 ([4]).

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

[edytuj]

To jest wersja robocza skopiowana z [5]. Trzeba ją jeszcze przerobić i posprawdzać.

Wystarczy zainstalować na jakimś serwerze repozytorium, np. Subversion. Aby zaimportować konfigurację:

  1. 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:

  1. svn co https://svn.foo-baz.com/svn/configuration/my.server.name/etc /tmp/etc/
  2. rm -f `find /tmp/etc -type f | grep -v '.svn'`
  3. 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

[edytuj]

http://www.free-x.ch/pub/mtree-tripwire.html

Ściągawka

[edytuj]

Szybki start

[edytuj]
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

[edytuj]
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

[edytuj]
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

[edytuj]
--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

[edytuj]

polskie

[edytuj]

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

[edytuj]

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

[edytuj]

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

[edytuj]

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