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