Engineering:Subversion Repository
Contents
- 1 What is NA-MIC Subversion
- 2 How do I get NA-MIC SandBox
- 3 How do I commit to NA-MIC Subversion
- 4 Can I see the files through the Web
- 5 How do I make a release branch?
- 6 How can I switch between branches and the trunk?
- 7 Merging latest changes from the HEAD into your branch
- 8 How can I tell if I'm on the branch or the trunk?
- 9 How can I merge changes from once branch into another?
- 10 I get the following error when I try to commit...
What is NA-MIC Subversion
NA-MIC SandBox is a repository of untested and unstable code developed as a part of NA-MIC. For more information, check the NA-MIC Software Development Process
See the SVN Book at red-bean.com. In particular, check out the information about the Basic Work Cycle for svn.
The NA-MIC SVN is also used for the Slicer3 development effort.
How do I get NA-MIC SandBox
Use Subversion. Checkout using the following command:
svn checkout http://www.na-mic.org/svn/NAMICSandBox/trunk NAMICSandBox
Clients for subversion are avaialble for most operating systems. Please check if you already have Subversion on the system, or download apropriate one from http://subversion.tigris.org/project_packages.html.
How do I commit to NA-MIC Subversion
Fill the form at https://www.kitware.com/Admin/SendPassword.cgi and under Comment type "Request password for NA-MIC Sandbox". Once you have access to write to NA-MIC SandBox, you can work with repository using the following commands:
To update repository:
svn update
To check current state of your edits:
svn status
To check the current state compared to the repository:
svn -u status
To add new file:
svn add filename
followed by (very important):
svn commit -m"ENH: Adding a new file" filename
To remove file:
svn remove filename
To rename file:
svn move oldname newname
If the update results in conflict, fix the file first before commiting it.
Once you have fixed the file:
svn resolved <filename>
Can I see the files through the Web
Yes, check: WebSVN.
Or for Slicer3, WebSVN.
How do I make a release branch?
Use the copy command like:
svn copy http://www.na-mic.org/svn/Slicer3/trunk http://www.na-mic.org/svn/Slicer3/branches/Slicer3.0-PostAHMBeta -m "ENH: new branch to capture work done at the 2007 all hands meeting"
How can I switch between branches and the trunk?
You can switch your current checkout to the branch with:
svn switch http://www.na-mic.org/svn/Slicer3/branches/Slicer3.0-PreAHMBeta
and get back to the head with:
svn switch http://www.na-mic.org/svn/Slicer3/trunk
Once you have switched, you can do updates and commits to that branch.
Merging latest changes from the HEAD into your branch
svn merge http://www.na-mic.org/svn/Slicer3/trunk http://www.na-mic.org/svn/Slicer3/branches/testing/sign_integration/Slicer3
Note: this will not get new files, just changes to existing files.
How can I tell if I'm on the branch or the trunk?
Look at the URL line from
svn info
How can I merge changes from once branch into another?
See this part of the svn documentation.
For example: to move changes from the current trunk head into a branch, you need to first know the version of the branch, which you can get as follows:
svn log --verbose --stop-on-copy http://www.na-mic.org/svn/Slicer3/branches/Slicer3.0-PreAHMBeta
from which you'll see a revision number for the commit that created the branch (in this case r2137).
Then in the trunk, do an svn update to get the current revision number. In my example it is 2157. To bring changes up through 2157 into the branch, you run the following command from within the directory that has the branch:
svn merge -r2137:2157 http://www.na-mic.org/svn/Slicer3/trunk
If you do 'svn status' the new files will show up as modified and/or conflicts. You need to commit them to actually put them into the branch.
I get the following error when I try to commit...
If you want to enable this error reporting on your subversion repository, please follow instructions about Subversion Input Filters.
Commit log error
The error would look like this:
--------------------------------------------------------------------- Subversion Commits to NA-MIC require commit type in the comment. Valid commit types are: BUG: - a change made to fix a runtime issue (crash, segmentation fault, exception, or incorrect result, COMP: - a fix for a compilation issue, error or warning, ENH: - new functionality added to the project, PERF: - a performance improvement, STYLE: - a change that does not impact the logic or execution of the code. (improve coding style, comments, documentation). The Subversion command to commit the change is: svn commit -m "BUG: fixed core dump when passed float data" filename you can also use the syntax below which omits the -m flag. In this case subversion will start up an editor for you to enter a comment on why you made the change. svn commit filename ----------------------------------------------------------------------
Make sure to start the commit message with one of the specified tags.
Tabs in the source file
---------------------------------------------------------------------- Problems in file "my baby.cxx": The following line(s) contain tabs: 4: This line contains a tab--> <-- Found problems with 1 file(s). Cannot commit ----------------------------------------------------------------------
Make sure there is no tabs in the source files. You can remove them with
perl -pi .-e 's/\t/ /g' <FileName>
or
sed -i -e 's/\t/ /g' <FileName>
Windows new-lines in the source file
---------------------------------------------------------------------- Problems in file "trunk/AnalyzeObjectReader/objectutils.h": The following line(s) contain windows new-lines: 1: /************************************************************************* 2: Copyright (c) 2007, Regents of the University of Iowa 3: 4: All rights reserved. 5: Found problems with 1 file(s). Cannot commit ----------------------------------------------------------------------
Make sure there are no windows new-lines in the source files. You can remove them with
sed -i -e 's/^M//g' <FileName>
where the "^M" is typed by pressing the control key with the v-key followed by control key with the m-key.
Missing new line at the end of file
---------------------------------------------------------------------- Problems in file "my baby.cxx": The following line(s) do not contain new-line character: 5: another linex Found problems with 1 file(s). Cannot commit ----------------------------------------------------------------------
Make sure there is a new line at the end of the source file. Most editors should fix this automatically.
Conflicts in the file
---------------------------------------------------------------------- Problems in file "test.cxx": The following line(s) contain conflicts: 1: <<<<<<< .mine 11: ======= 22: >>>>>>> .r13 Found problems with 2 file(s). Cannot commit ----------------------------------------------------------------------
Make sure to remove any conflicts before removing files.
Once resolved:
svn resolved test.cxx
Things missing from SVN that were in CVS
No cvs diff -w
Some workarounds here: http://kitt.hodsden.com/ignoring_whitespace_changes_with_svn_diff
No cvs update -C
Remove the file and then update (nothing more clean?) (mathieu). I believe this is describe here: http://svnbook.red-bean.com/nightly/en/svn.tour.cycle.html#svn.tour.cycle.resolve
...snip...
If you get a conflict, you need to do one of three things:
- Merge the conflicted text “by hand” (by examining and editing the conflict markers within the file).
- Copy one of the temporary files on top of your working file.
- Run svn revert <filename> to throw away all of your local changes.
Once you've resolved the conflict, you need to let Subversion know by running svn resolved. This removes the three temporary files and Subversion no longer considers the file to be in a state of conflict.
$ svn resolved <filename>
...snip...