====== Subversion ====== :!: We are no longer actively supporting Subversion. * [[http://www.abbeyworkshop.com/howto/misc/svn01/|Subversion Cheat Sheet]] * [[http://open.ncsu.edu/se/tutorials/subclipse/|Tutorial using Subversion in Eclipse]] ===== Project Manipulation ===== ==== Project Directory Structure ==== Organize your code to import into the following structure: myproject/ myproject/branches/ myproject/tags/ myproject/trunk/ myproject/trunk/dir1/ myproject/trunk/file1 ... * ''trunk'' - the main line of development, the leading edge, where developers usually commit their regular changes. * ''tags'' - a collection of snapshots of the trunk (or a branch) at a user-defined point in time, for instance release day. * ''branches'' - active variations of the project compared to the trunk (or even another branch). This is useful when working out a (big) change that needs to be coordinated in a team or when using a single working-copy for the work with the changeproject is not feasible. ==== Importing/ Creating a Project ==== Assuming the ''project'' directory is a subdirectory of the current directory, you would enter the following command: svn import project file:///path/to/repository/newproj_name -m "First Import" e.g., svn import Logic file:///home/courses/cs297/shared/svn/Logic -m "First Import" ==== Checking Out a Project ==== svn checkout file:///repository_name/project/trunk project ==== Adding Files or Directories ==== svn add file_or_dir_name ==== Deleting Files or Directories ==== svn delete file_or_dir_name ==== Committing Changes ==== svn commit ==== Updating Files ==== svn update ^ Code ^ Meaning ^ | A | Added | | D | Deleted | | U | Updated | | C | Conflict | | G | Merged | ==== Tagging a Version ==== To give a version of the project a name, use ''svn copy'' svn copy file:///path/to/repos/project/trunk \ file:///path/to/repos/project/tags/release-1.0 \ -m "Tagging the 1.0 release of the project." ==== Conflicts ==== Conflicts can be detected with the update command. When Subversion detects a conflict in a file, it places conflict markers into the file (to allow the user to find the places of the conflict) and creates the following three files in the directory: * filename.mine The file without the conflict markers * filename.rOLDREV The file as it was before I started to change it. * filename.rNEWREV The HEAD revision of the file **Resolving conflicts** Conflicts can be resolved by doing one of the following three things: * Merge the conflicting areas (conflict markers) * replace the file in question with one of the three files mentioned above * running svn resolved ===== Creating a Repository ===== svnadmin create /path/to/repos The actual repository/directory should not have been created yet. This command will handle that for you. ===== Using ssh with svn ===== Use the ''svn+ssh://'' URL schema to connect. Example: svn list svn+ssh://host.example.com/repos/project harry@host.example.com's password: ===== Subclipse with Eclipse ===== Subclipse is a plugin for Eclipse that allows users to easily use Subversion with their code. ==== Installation ==== * Help --> Eclipse Marketplace * Search for "Subclipse" * The first one that pops up should be something like Subclipse 1.10.## * Select it and click "Install" * Select All (Subclipse, SVNKit, ...) * Go through the installation process, restart the workspace === After Installing === * Under preferences * Under Team > SVN * SVN Interface: Client: * select SVNKit (Pure Java) * Under Team > Ignored Resources * Add patterns for .classpath, .project, .settings * These are files that are user-specific and should not be part of the shared repository. ==== Set Up Repository ==== * Repository (works from home computer too): svn+ssh://username@atmos.cs.wlu.edu/svn/csrepos/repository_name ==== Team Menu ==== The Team menu is where you'll find the commands you need to work with the subversion repository. ==== Subclipse with Eclipse on Windows ==== * In Eclipse, Windows --> Preferences * Team --> SVN * Interface: switch client to **Pure Java** ===== SVN GUI Clients ===== Of course, you may not want to use the command-line. * [[http://www.wandisco.com/smartsvn/home|SmartSVN]] -- free community version * PyCharm and other IDEs have plugins or built-in clients available