In our previous SmartSVN posts, we covered essential functionality to get you off to a flying start with this cross-platform graphical client for Apache Subversion. In this post, we cover some more advanced options, including performing a reverse merge, reverting local changes and resolving any conflicts that occur when you try to perform a commit with SmartSVN.
Didn’t catch our intro to SmartSVN series? Get up to speed with the following links:
As Subversion remembers every change that’s committed to the repository, it’s possible to revert to previous revisions of your project. This is useful if you introduce a code-breaking feature in revision 15, and need to revert to a revision before it all went wrong. This is achieved by performing a ‘reverse merge’ i.e merging the changes in your current revision, to an earlier revision.
To perform a reverse merge with SmartSVN:
1) Select the ‘Merge’ item from the ‘Modify’ menu.
2) In the Merge dialog, enter the revision number you wish to roll back to.
If you need more information about the different revisions, click the ‘Select…’ button next to the ‘Revision Range’ textbox. The subsequent dialog displays the different revisions, alongside the commit message, time, author and path data for each revision. Note, the green arrows indicate revisions not yet merged.
3) Ensure the ‘Reverse merge’ checkbox is selected and finally, click ‘Merge.’
4) Remember to commit your changes to the repository, to make this reverse merge permanent!
Alternatively, right-click the revision you wish to reverse-merge in the Transactions tool window and select “Rollback.”
Revert overwrites any local changes made to the working copy, with the file content held in the repository. Note, this command should be used with caution: a revert effectively deletes all the changes made since your last commit, and once they are gone there is no way to recover them.
To perform a revert with SmartSVN, right-click on the file/directory you wish to revert, and select the ‘Revert’ option from the drop-down menu (alternatively, select the ‘revert’ button from the toolbar.)
SmartSVN will ask you to confirm the revert. Select the ‘Revert’ button to go ahead and remove all your local changes.
At some point during your project’s lifecycle, your repository may change location and therefore get a new URL. This can be solved by deleting your working copy and performing a checkout from the new repository location, but there is a quicker way to solve this problem: the ‘Relocate’ command can be used to rewrite all the URLs associated with the files and folders in your working copy, with the new URLs. This allows you to continue using your current working copy and, of course, to successfully commit all your hard work back to the repository.
1) Open the ‘Modify’ menu and select ‘Relocate…’
2) The ‘Relocate’ dialog displays the URL of the selected directory. In the ‘To URL’ option, specify the replacement URL.
3) Select ‘Relocate’ to change the repository for your directory.
Note, this operation should be used with caution, as if used incorrectly it can corrupt your working copy. The ‘Relocate’ command should not be used to:
- move to a different Subversion repository.
- switch to a different branch or directory within the same repository.
When you are performing a commit in Apache Subversion, you may occasionally encounter the dreaded Subversion conflict, and your commit will fail. Thankfully, SmartSVN comes with a ‘conflict solver’ to help resolve these conflicts when they do occur. To access this conflict solver, open the ‘Query’ menu and select ‘Conflict solver.’
In the ‘Mark Resolved’ dialog, you can opt to:
- Leave the file/directory as it is.
- Take the version in the working copy, as it was before the update or merge was performed.
- Take the new version – the pristine copy after the update or merge was performed.
- Take the old version – the pristine copy before the update or merge was performed.
Select the appropriate checkbox and select ‘Ok.’ The conflict should now be resolved, and you can commit your changes to the repository to make them permanent.
Set a Property
‘Properties’ in Subversion are useful for associating metadata with the files placed under version control. To set a property for your Subversion files or directories using SmartSVN, open the ‘Properties’ menu and click ‘Select or delete Property….’
Use the drop-down ‘Property’ menu to select the desired Subversion internal property. The default properties are:
- svn:eol-style – makes the client convert line-endings in text files. This property is used when the working copy is required in a specific EOL style.
- svn:executable – makes files on Unix-hosted working copies executable.
- svn:externals – a multi-line value defined on a directory that allows parts of other repositories to be automatically checked out.
- svn:ignore – a list of unversioned filename patterns that should be ignored by ‘svn status’ and other subcommands.
- svn:keywords – Subversion has the ability to substitute keywords into the contents of a file itself when changes are made. Keywords are useful for automatically maintaining information (such as author, revision number, etc) that would be too time-consuming to keep changing by hand.
- svn:mergeinfo – this property is used to track merge data and is automatically maintained by the ‘SVN merge’ command.
- svn:mime-type – indicates the file’s MIME type and allows the client to decide if contextual merging is safe during updates. Note, this property affects the handling of diffs and merging.
- svn:needs-lock – tells the client that files should be checked out with permissions set to read-only. This is designed to be used in conjunction with the ‘SVN Lock’ command, to remind the developer to obtain a lock before beginning work on a file. This saves the developer from spending time modifying a file and then discovering it’s locked when it’s time to commit.
Select a value for your property (if applicable) and hit the ‘Ok’ button to set the new property.
Visit http://smartsvn.com/ to claim your free download of SmartSVN Foundation.