370 likes | 525 Views
Version Control Systems and the Subversion. Kloimstein Dominik. Overview. Basic information about VCS/Subversion Standard commands of Subversion Branching and Merging. What is a Version Control System?. Standard software update process
E N D
Version Control Systems andthe Subversion Kloimstein Dominik
Overview • Basic informationabout VCS/Subversion • Standard commandsof Subversion • BranchingandMerging
Whatis a Version Control System? • Standard software update process • In generalversion 2.0.11 isdeleted – use 2.0.12 Software xyz Version 2.0.12
Whatis a Version Control System? • Same update processwitharbitraryfiles • Also firsttextfile will beoverriden Textfile x Last change: 10.10.2010 Textfile x Last change: 10.12.2010
Whatis a Version Control System? Textfile x Last change: 10.10.2010 Textfile x Last change: 10.12.2010 User A
Whatis a Version Control System? • Manages all versionsoffilesordirectoriesin thesystem • Subversion is a open source VCS
WhatareRevisions? • Are like versionnumbersoffilesordirectories • Eachchangeof a fileincreasestherevisionnumberby 1 • Subversion givesthewholefilesystem a number • Such a filesystemtreeiscalledrepository
File sharingproblem • Lock-modify-unlocksolution
File sharingproblem • Problems are: • Administration (enoughrightsto lock) • Performance (oneuser must wait) • False sense ofsecurity • Harry works on File A • Sally works on File B • A and B aredepend on eachother
File sharingproblem • Copy-modify-mergesolution
File sharingproblem • Copy-modify-mergesolution
File sharingproblem • Subversion usethecopy-modify-mergemethod • Nowaiting • Problem of so calledconflicts • Same problemwith different results • Overlapingofchanges • Solution: Communication (directtalkorput a flag) • Subversion can also lock files • Necessaryforsoundorgraphicfiles
Howtoworkwith Subversion • svn [command] [URL] • $ svncheckout http://svn.example.com/repos/calc • URL-forms: • file:/// - directlocalaccess • http:// - accessto a Apache server • https:// - same as http with SSL encryption • svn:// -access to a Subversion server • svn+ssh:// - same assvnthrough SSH tunnel
Howtoworkwith Subversion • file:///C:/svn/repos • file:///svn/repos • file:///localhost/svn/repos • http://svn.example.com/repos • http://svn.example.com:9834/repos
Commands • The mostoftenusedcommandsare: • svnadd URL • svndelete URL • svncopy URL1 URL2 • svnmove URL1 URL2 • svnmkdir URL
Commands • checkout – copyfilestothelocalworkingdirectory $ svn checkout http://svn.example.com/repos/calc A calc/Makefile A calc/integer.c A calc/button.c Checked out revision 1.
Commands • commit – submitoneorseveralfilestotheserver $ svn commit button.c Sending button.c Transmitting file data . Committed revision 57. • Command commitmaybedon‘tchangefiles – solutioncommand update
Commands • update – submitthewholeworkingdirectorytotheserver $ svn update Updating '.': U button.c Updated to revision 58.
Commands • import – import a fileordirectorytotherepository $ svn import /path/to/mytree \ http://svn.example.com/repo/some/project Adding mytree/foo.c Adding mytree/bar.c Adding mytree/subdir Adding mytree/subdir/quux.h Committed revision 59.
Commands • list – showfiles in thegivendirectory $ svn list http://svn.example.com/repo/some/project bar.c foo.c subdir/
Commands • status – show a overviewof all changes • ? item – This item is not underversioncontrol • A item – Scheduledforadditiontotherepository • D item – Scheduledfordeletingthis item in therepository • M item – The content in item ismodified $ svn status ? scratch.c A stuff/loot A stuff/loot/new.c D stuff/old.c M bar.c
Commands $ svn status stuff/fish.c D stuff/fish.c $ svn status -v M 44 23 sally README 44 30 sally INSTALL M 44 20 harry bar.c 44 18 ira stuff 44 35 harry stuff/trout.c D 44 19 ira stuff/fish.c 44 21 sally stuff/things A 0 ? ? stuff/things/bloo.h 44 36 harry stuff/things/gloo.c
Commands • diff – show a overviewof all changes in detail $ svn diff Index: bar.c =================================================================== --- bar.c (revision 3) +++ bar.c (working copy) +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include <stdio.h> int main(void) { - printf("Sixty-four slices of American Cheese...\n"); + printf("Sixty-five slices of American Cheese...\n"); return 0; } Index: README ...
Commands • log – show a time basedoverviewof all changes in detail $ svn log ------------------------------------------------------------------------ r3 | sally | 2008-05-15 23:09:28 -0500 (Thu, 15 May 2008) | 1 line Added include lines and corrected # of cheese slices. ------------------------------------------------------------------------ r2 | harry | 2008-05-14 18:43:15 -0500 (Wed, 14 May 2008) | 1 line Added main() methods. ------------------------------------------------------------------------ r1 | sally | 2008-05-10 19:50:31 -0500 (Sat, 10 May 2008) | 1 line Initial import ------------------------------------------------------------------------
Commands $ svn log -r 8 -v ------------------------------------------------------------------------ r8 | sally | 2008-05-21 13:19:25 -0500 (Wed, 21 May 2008) | 1 line Changed paths: M /trunk/code/foo.c M /trunk/code/bar.h A /trunk/code/doc/README Frozzled the sub-space winch. ------------------------------------------------------------------------
Commands • cat – returnthecontentof a file $ cat sandwich.txt Top piece of bread Salami Mortadella Prosciutto
Commands • revert – deletechangesandstartfromthebeginning $ cat sandwich.txt Top piece of bread Salami Mortadella Prosciutto Now change Salami to Salad. $ cat sandwich.txt Top piece of bread Salad Mortadella Prosciutto $ svn revert sandwich.txt Reverted 'sandwich.txt‘ $ cat sandwich.txt Top piece of bread Salami Mortadella Prosciutto
Commands $ svn cat -r 2 sandwich.txt Top piece of bread Salad Mortadella Prosciutto
BranchingandMerging • Trunc – isthemaindirectory • Branch – is a copyof a fileordirectoryofthetruncsectionwithsmalldifferences • Tag – is a kindof „snapshot“ of a revision • Merge – isthecombiningoftwobranches (ortocombinethebranch back withthetrunc)
BranchingandMerging • Tag – example $ svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/tags/release-1.0 \ Committed revision 902.
BranchingandMerging • Merge – example $ svn merge --reintegrate ^/calc/branches/my-calc-branch --- Merging differences between repository URLs into '.': U button.c U integer.c U Makefile --- Recording mergeinfo for merge between repository URLs into '.': U . $ svn commit -m "Merge my-calc-branch back into trunk!" Sending . Sending button.c Sending integer.c Sending Makefile Transmitting file data .. Committed revision 391.
BranchingandMerging # Which changes have already been merged from trunk to branch? $ svnmergeinfo ^/calc/trunk r341 r342 r343 … r388 r389 r390 # Which changes are still eligible to merge from trunk to branch? $ svnmergeinfo ^/calc/trunk --show-revs eligible r391 r392 r393 r394 r395 $