Tägliche Arbeit mit Subversion
Die tägliche Arbeit mit Subversion besteht generell nur aus Update und Commit. Dennoch gibt es ein paar interessante weitere wichtige Befehle. Hier mal eine Übersicht der wichtigsten.
Initiales Auschecken eines Repositories (Arbeitskopie erstellen)
bash$ mkdir Workingcopy
bash$ cd Workingcopy/
bash$ svn checkout http://svn.local.zero-one.ch/KTSI/DevEdge-tspycher/ . # Der Punkt am Ende repräsentiert das aktuelle Verzeichnis
A Playground
A Projects
A Projects/TakeAway
A Projects/TakeAway/Source
A Projects/TakeAway/Source/Class_TakeAway.h
A Projects/TakeAway/Source/main.cpp
A Projects/TakeAway/Source/Class_TakeAway.cpp
A Projects/TakeAway/TakeAway.xcodeproj
... SNIPP ...
Checked out revision 40.
Arbeite mit dem Innerhalb der Arbeitskopie lokal. Vorzugsweise alle “Änderungspakete” commiten. Das heisst nach jedem erfolgreichen abschliessen einer Tätigkeit oder eines Bugfixing die Änderungen commiten.
Hier die Regeln fürs Commiten:
- Wenn möglich nur funktionierender und kompletter Code hochladen
- Spätestens bei Arbeitsende commiten
- Jeder Commit steht für eine abgeschlossene Arbeit
- Das Commiten von Binären Files vermeiden . Z.b. Build Verzeichnisse
Änderungen übertragen (commiten)
bash$ svn commit -m "Bugs fixed in main.cpp"
Sending Projects/TakeAway/Source/main.cpp
Transmitting file data ..
Committed revision 41.
Arbeitskopie updaten (update)
bash$ svn update
U Projects/TakeAway/Source/main.cpp
Updated to revision 42.
Datei/Verzeichnis unter Versionskontrolle stellen (add)
bash$ vi test.txt
bash$ svn add test.txt
A test.txt
bash$ svn commit -m "added test.txt to the repository"
Adding Playground/test.txt
Transmitting file data .
Committed revision 43.
Properties setzen (propset)
Die angegebenen Variabeln werden innerhalb des angegebenen Files mit den entsprechenden Werten ersetzt. In der Datei oder in den Dateien müssen die Platzhalter mit $PLATZHALTER$ angegeben werden. Z.b. $Date$ $Rev$ $Author$
bash$ svn propset svn:keywords "Date Rev Author" test.txt
property 'svn:keywords' set on 'test.txt'
bash$ svn commit -m "added Date Rev Author properties to the file"
Sending Playground/test.txt
Committed revision 44.
Datei aus der Versionskontrolle entfernen (delete)
Achtung, Files in unterhalb der aktuellen Revision bleiben bestehen!
bash$ svn commit -m "removed file from repository"
Deleting Playground/test.txt
Committed revision 45.
Konflikte lösen (resolve)
bash$ svn commit -m "some minor changes"
Sending Playground/test.txt
svn: Commit failed (details follow):
svn: File or directory 'test.txt' is out of date; try updating
svn: resource out of date; try updating
bash$ svn update
Conflict discovered in 'test.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: p
C test.txt
Updated to revision 47.
Summary of conflicts:
Text conflicts: 1
bash$ ls -la
total 32
drwxr-xr-x 7 tspycher staff 238 Aug 29 11:16 .
drwxr-xr-x 5 tspycher staff 170 Aug 29 10:56 ..
drwxr-xr-x 8 tspycher staff 272 Aug 29 11:16 .svn
-rw-r--r-- 1 tspycher staff 116 Aug 29 11:16 test.txt
-rw-r--r-- 1 tspycher staff 45 Aug 29 11:16 test.txt.mine
-rw-r--r-- 1 tspycher staff 17 Aug 29 11:16 test.txt.r46
-rw-r--r-- 1 tspycher staff 36 Aug 29 11:16 test.txt.r47
Die Datei test.txt steht nun in einem Konflikt und kann nicht mehr commited werden. Mit der Option p (postpone) wird die lösung des Konflikts verschoben, sodass dieser von Hand in der Arbeitskopei gelöst werden kann.
Die Original Datei enthält sämtliche Änderungen mit einer speziellen Formatierung:
<<<<<<< .mine
Ich bin ein Test, hier schreib ich was lokal
=======
Ich bin ein Test mit noch mehr text
>>>>>>> .r47
Die Dateien habe ich alle verifiziert und mich dafür entschieden, die Änderung meines Arbeitskollegen zu akzeptieren.
bash$ cp test.txt.r47 test.txt
bash$ svn resolved test.txt
Resolved conflicted state of 'test.txt'
Danach sollte man auf jedenfall commiten.
Tagged: SCM, Subversion