Subversion

Architektura repozytorium

Podstawowe operacje

import - dodawanie plików i katalogów do repozytorium

svn import plik http://adres.repozytorium/svn/projekt/trunk/plik -m "Import pliku"

checkout - tworzenie kopii roboczej o nazwie projekt

svn checkout http://adres.repozytorium/projekt/ project

add - dodawanie plików i katalogów do kopii roboczej (w celu zatwierdzenia ich w repozytorium)

svn add program.c
svn add katalog/

commit — wysłanie zmian do repozytorium

svn commit -m "Opis zmian"
svn commit plik.txt -m "Bardzo ważna zmiana w pliku plik.txt."

update — aktualizacja kopii roboczej

svn update
svn update plik1 plik2
svn update pewien_katalog

A	Nowy plik (Added)
D	Usunięty plik (Deleted)
U	Zmodyfikowany (Updated)
C	Konflikt (Conflict)
G	Połączenie zmian w pliku (Merged)

status - informacje dotyczące plików w kopii roboczej

svn status
svn status katalog

Pierwsza kolumna (najwazniejsze oznaczenia)
No modifications
A	Item is scheduled for Addition
D	Item is scheduled for Deletion
M	Item has been modified
C	Item is in conflict with updates received from the repository
?	Item is not under version control
Ósma kolumna
*	A newer revision of the item exists on the server

svn help — Help!

svn help
svn help commit

Rewizje

Numer rewizji dotyczy całego drzewa projektu.

kolejne numery (np. r102)

słowa kluczowe : HEAD- ostatnia w repozytorium, BASE - aktualna kopia robocza, COMMITTED - ostatnia zawierająca zmiany, PREV - poprzednia (COMMITTED - 1)

data : np.: {2002-02-17} , {„2002-02-17 15:30”}

Przykłady:

svn list --revision 1 http://svn.repo/projekt/
svn diff --revision BASE:HEAD
svn log --revision {"2002-02-17 15:30"}:123
svn export --revision {"2002-02-17 15:30"}

Rozgałęzienia (branches)

Wyizolowane kopie (gałęzie) projektu, niezależne od głównej lini trunc.

Tworzenie nowych gałęzi:

svn copy trunk branches/moje-rozgalezienie-projektu
svn commit -m "Utworzenie mojej galezi projektu."
svn copy http://svn.example.com/projekt/trunk http://svn.example.com/projekt/branches/moja-kopia

Przydatne polecenia:

diff - różnice między wersjami

svn diff [-r N[:M]] [TARGET[@REV]...]
svn diff -r '{2011-01-01:12.03}' plik.txt --cmd-diff=vimdiff

merge - scalanie różnic (patchowanie): left side + right side -> target

svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
svn merge -r N:M SOURCE[@REV] [WCPATH]

Przykład

svn merge -r 250:HEAD http://svn.repozutorium/projekt/branches/moja-kopia

W razie kłopotów: revert — cofa wszystkie lokalne zmiany

svn revert [ --recursive ] plik

Tags - wersje zamrożone (kopie repozytorium)

svn copy http://svn.repozytorium/projekt/trunk http://svn.repozytorium/projekt/tags/release-1.0 \
-m "Tagging the 1.0 release of the project."

Konflikty

svn update
U INSTALL
G README
C bar.c
Updated to revision 46.

filename.mine, filename.rOLDREV, filename.rNEWREV

commit - NIE ZADZIAŁA

rozwiązywanie konfliktu (ręczna edycja, zastąpienie starej wersji nową, cofnięcie zmian (revert))

resolved - konflikt rozwiązany (pliki tymczasowe są usuwane)

svn resolved bar.c

Schemat działania

aktualizacja (update)

nanoszenie zmian, usuwanie, dodawanie plików, itd. (add, rm, mv, ... )

sprawdzanie zmian (diff, status)

cofanie zmian (revert)

rozwiązywanie konfliktów (update, resolved)

zatwierdzanie zmian (commit)

Klienci SVN

TortoiseSVN (Windows)

AnkhSVN - Subversion Support for Visual Studio

SmartSVN - Windows/Linux/MacOS, portable, free evaluation mode

Comparison_of_Subversion_clients