noresm:svntutorial

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
noresm:svntutorial [2013-12-10 14:07:58]
alfg
noresm:svntutorial [2022-05-31 09:29:32] (current)
Line 64: Line 64:
 CHECK OUT TRUNK FOR ONE DEVELOPER CHECK OUT TRUNK FOR ONE DEVELOPER
 <file> <file>
-alfg@pc4400:~$svn checkout file://$HOME/svnrepos/testproject/trunk trunkĀ +alfg@pc4400:~/twoDevelopers$svn checkout file://$HOME/svnrepos/testproject/trunk trunkĀ 
-alfg@pc4400:~$cd trunk+alfg@pc4400:~/twoDevelopers$cd trunk
 </file> </file>
  
Line 90: Line 90:
  
  
-=====Part 3: Create conflict in the file test.F90 =====+=====PART 3: Create conflict in the file test.F90 =====
  
 EDIT FILE ON TRUNK EDIT FILE ON TRUNK
Line 116: Line 116:
 </file> </file>
  
 +===== PART 4: Test the merge dialog =====
  
 +TRY TO MERGE TRUNK INTO BRANCH
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn merge file://$HOME/svnrepos/testproject/trunk
 +</file>
 +
 +You will get the message that there is a conflict in file test.F90, you will have to resolve the conflict
 +Push the "postpone" option to quit the merge dialog
 +
 +UNDO THE MERGE WITH 
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn revert -R .
 +</file>
 +
 +==> You have undone the merge, nothing has happened
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn diff
 +alfg@pc4400:~/twoDevelopers/aBranch$
 +</file>
 +
 +===== PART 5: Set up favourite editor as merge tool =====
 +
 +1) Create a file somewhere in your pc, for example I use
 +$HOME/bin/mergetoolscript.sh
 +
 +For emacs users, the content of the script is: 
 +
 +<file>
 +#!/bin/sh
 +emacs -q --eval "(ediff-merge-files-with-ancestor "\"$2"\" \""$3"\" \""$1"\" nil \""$4"\")"
 +</file>
 +
 +For vi users, the content of the script is: 
 +
 +<file>
 +#!/bin/sh
 +vim -d "+diffsplit $3" "+vert diffsplit $1" "+vert diffsplit $2" -o $4
 +</file>
 +
 +2) Open your $HOME/.subversion/config file and replace the line with merge tool (NOTE THAT FULL PATH IS NEEDED. NO BLANK CHARACTERS AT BEGINNGING OF LINE!!)
 +<file>
 +merge-tool-cmd = /home/alfg/bin/mergetoolscript.sh 
 +</file>
 +
 +
 +MAKE SURE SCRIPT IS EXECUTABLE
 +<file>
 +chmod +x $HOME/bin/mergetoolscript.sh
 +</file>
 +
 +==> You should now have working merge tools. This will make merging EASY!!
 +
 +
 +=====PART 6: Go back to merge operation and use merge tool =====
 +
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn merge file://$HOME/svnrepos/testproject/trunk
 +</file>
 +
 +type "s" to "show all options" and "l" to "launch external tool"
 +
 +==> emacs or vi should be invoked in "merge mode"
 +
 +//The vi script// shows (your, ancestor, mine) on top and output below. Move around in the different windows with "ctrl+w+arrow". When in the upper windows you can use "[c" and "]p"] go move to previous/next diffs.
 +
 +//the emacs script// shows (yours, mine) on top and merged version (including common ancestor) below
 +
 +All editing should happen in the lowest part of the editor window
 +
 +When done editing, save the file and quit the editor
 +
 +When back in the merge-dialog, press "r" (resolved)
 +
 +
 +===== PART 7: Verify that you are happy with merge =====
 +
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn diff
 +</file>
 +
 +Note how it is difficult to understand the diff ==> we need to configure a diff tool!
 +
 +To configure a nice diff-viewer, you need to replace a line in your $HOME/.subversion/config file like this:  
 +
 +<file>
 +diff-cmd = /home/alfg/bin/diffwrap.sh 
 +</file>
 +
 +The script "diffwrap.sh" has be created somewhere on your PC. The script is only TWO LINES long!! (Make sure it is executable with "chmod +x scriptname")
 +
 +The content of this script (only two lines) for emacs users can be: 
 +
 +<file>
 +#!/bin/sh
 +emacs --eval "(ediff-files "\"$6"\" \""$7"\" )"
 +</file>
 +
 +(In emacs, use | (pipeline) key in the "ediff" dialog to toggle between vertical/horizontal diff view)
 +
 +The content of this script for vi users can be
 +
 +<file>
 +#!/bin/sh
 +vimdiff $6 $7
 +</file>
 +
 +Visually verify the diff again using the diff viewer
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn diff
 +</file>
 +
 +When you are happy with the diffs, do 
 +
 +<file>
 +alfg@pc4400:~/twoDevelopers/aBranch$ svn commit -m "Successfully branched trunk to my branch"
 +</file>
 +
 +==> DONE
 +
 +===== PART 8: Merge back to trunk =====
 +
 +After the conflict is resolved and committed from branch, go back to trunk
 +
 +<file>
 +alfg@pc4400:~/twoDevelopers/trunk$ svn update
 +alfg@pc4400:~/twoDevelopers/trunk$ svn merge --reintegrate file://$HOME/svnrepos/testproject/branches/aBranch
 +</file>
 +
 +AT THIS POINT YOU WANT TO PASS THE TESTS (IF THIS WAS NORESM)
 +
 +<file>
 +alfg@pc4400:~/twoDevelopers/trunk$ svn commit -m "merged aBranch back to trunk"
 +</file>
 +
 +==> Observe that you don't get any conflict this time. Svn knows that the conflict is already resolved.
 +
 +
 +===== Other important points =====
 +
 +  * The merge is not completed until you commit!
 +  * You have to know if you are doing a reintegrate merge or a merge from trunk (see noresm wiki)
 +  * You can undo the merge with alfg@pc4400:~/twoDevelopers/aBranch$ svn revert -R .
 +  * When you have done a "reintegrate merge", consider  your branch dead! (svn delete branchUrl -m "removed reintegrated branch aBranch")
 +  * If you insist on keeping reintegrated branches alive, there are two options:
 +      - Start using another version control system
 +      - Make sure you have latest svn version (version >= 1.7), Then read (and understand)  http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.reintegratetwice
 +  
  • noresm/svntutorial.1386684478.txt.gz
  • Last modified: 2022-05-31 09:23:24
  • (external edit)