Version Control with SVN
Subversion (SVN) is a version control system, useful for situations where multiple people are cooperating on files. It is also good for keeping track of changes and modifications in your work.
Norsk versjon Versjonskontroll med SVN
The following article should help you set up and use an SVN repository by using SSH. After creating the repository, you can use typical graphical software, like SmartSVN, TortoiseVSN, or Eclipse with Subclipse.
Creating an SVN repository #
Before using SVN, you need to create a repository. This is where all your projects, files, and folders will be. If you don't already have access to a repository, you can create one on the NTNU servers. This requires a log in, and a more detailed description can be found in the SSH article. Students can connect to login.stud.ntnu.no, employees can connect to login.ansatt.ntnu.no.
To create a repository, use the command svnadmin create <path>.
brukernavn@caracal: /svn$ svnadmin create rep
Using SVN through SSH #
Note: All commands running in connection with SVN, have to start with svn.
The first thing you have to do is to get the files from the repository. This is done with the checkout command. Remember that you here need a folder, in this case svn, to put your content into. To get the complete path for your folder, use the command pwd.
brukernavn@caracal: /svn$ mkdir svn brukernavn@caracal: /svn$ svn checkout file:///home/homer/br/brukernavn/svn/rep svn/ Checked out revision 0.
To add files, you use the command add. Below is an example of how you add a file under version control.
brukernavn@caracal: /svn/svn$ svn add svn.html A svn.html
commit is used when you want to upload your local version. When you run this command, the local version of the file (with opdates) will be uploaded to the repository.
brukernavn@caracal: /svn/svn$ svn commit svn.html Adding svn.html Transmitting file data . Committed revision 1.
When you run this command, an editor will appear. The standard editor here is pico. Here you enter a short comment about the changes you've made, what and why. To change the standard editor, use the command:
brukernavn@caracal: /svn/svn$ EDITOR=vim; export $EDITOR; echo $EDITOR vim
update is used to download the latest version of a file or folder.
brukernavn@caracal: /svn/svn$ svn update svn.html At revision 1.
remove is used to remove a file or folder from the version control, and thereby also the repository.
brukernavn@caracal: /svn/svn$ svn remove svn.html D svn.html
status shows which status a file or folder has. Here you can see if a file has been added, is in a conflict or if it's being handled by version control at all.
brukernavn@caracal: /svn/svn$ svn status svn.html R svn.html
diff shows the difference between tow files or folders. When you run this command, all differences between the who files or folders will show, both locally and in the repository.
- + extra local copy
- - extra copy in repository
brukernavn@caracal: /svn/svn$ svn diff svn.html Index: svn.html =================================================================== --- svn.html (revision 3) +++ svn.html (working copy) @@ -198,4 +198,14 @@ ...
revert is used to go back to an earlier version of a file or folder. This only happens locally, and will remove most changes.
brukernavn@caracal: /svn/svn$ svn revert svn.html Reverted 'svn.html'
help can be used before all commands to get details or help on how to use them.
brukernavn@caracal: /svn/svn$ svn help add add: Put files and directories under version control, scheduling them for addition to repository. They will be added in next commit. usage: add PATH...
If you need more information about SVN, you can type the command man svn or svn help in SSH. The website svn-book also have some valuable info.
Checkout to your own computer #
After the SVN repository is created via SSH you may want to download a copy to your personal computer. This makes it possible to work with your own programs and environment while still having access to the repository files.
Finding the full path name #
While you are connected to the external server via SSH, navigate to the folder where you want the repository to be located.
username@caracal: /svn$ svnadmin create repository_name username@caracal: /svn$ cd repository_name
Then you can find the full path name using the "pwd" command:
username@caracal: /svn/repository_name$ pwd /home/shomeb/b/username/svn/repository_name
The output from the "pwd" command is the full path name to your repository.
Mac and Linux #
Create a folder where you want the local copy to be downloaded to, then navigate to the created folder using your terminal.
my_name$ cd local_folder
You can then perform a checkout which will download the repository to your local folder using the following command:
:local_folder my_name$ svn checkout svn+ssh://email@example.com/home/shomeb/b/username/svn/repository_name
Replace the text after "login.stud.ntnu.no" with the path name you found in the previous step. Note that "login.stud.ntnu.no" can be replaced with different server addresses.
For Windows the full path name should be the same, but checkout cannot be run from the in-built command line. Instead you need to install an SVN client (ex. toroiseSVN).
About version control #
Some of the point about version control is that multiple people can edit the same files at the same time. SVN enables us to constantly have a good overview of the entire project. If someone edits a file and uploads it, everyone else can update their version of the file to contain the same information. This makes it easier to avoid overwriting eachother's changes. SVN is very recomended to use on common prodject spaces, and you can find more information about creating these spaces at Enkel samhandling.
In addition to keeping track of changes, version control also keep track of earlier versions of all files. If a problem occurs with a file or folder, you can easily go back to an older version.
Relevant links #
- See Wikipedia's article about Subversion (SVN)