Subversion 1.7 is out
subversion.apache.org
subversion.apache.org
http://subversion.apache.org/docs/release-notes/1.7.html
Some big changes in 1.7 extracted from the release notes:
Working Copy Metadata Storage Improvements
A key feature of the changes introduced in Subversion 1.7 is the centralization of working copy metadata storage into a single location. Instead of a .svn directory in every directory in the working copy, Subversion 1.7 working copies have just one .svn directory—in the root of the working copy. This directory includes (among other things) an SQLite-backed database which contains all of the metadata Subversion needs for that working copy.
svn patch
Subversion 1.7 features a new subcommand called svn patch which can apply patch files in unidiff format (as produced by svn diff and other diff tools) to a working copy.
Improved HTTP protocol usage
Subversion 1.7 offers a simpler HTTP protocol variant that can be used when connecting to supported servers. This simpler protocol (sometimes referred to as HTTPv2) requires fewer client-server round trips to establish a connection, making Subversion much more performant on high-latency network connections.
I wouldn't be surprised if we see 'offline' commits in SVN.
What are the advantages of using SVN over Git? (assuming one was starting a new project and hadn't yet chosen a VCS)
I believe this is why many people still use Subversion and Perforce, etc.
Want to checkout all Apache Software Foundation projects?
svn checkout http://svn.apache.org/repos/asf/
Want to work on Apache httpd? svn checkout http://svn.apache.org/repos/asf/httpd/
Maybe you only care about mod_proxy? svn checkout http://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/proxy/
Apache server becomes a subproject of the new Apache MegaOS? Just move /repos/asf/httpd/ to /repos/asf/megaos/httpd.See also FreeBSD repository: http://svnweb.freebsd.org/base/
Correction, that's all branches and all tags of all ASF projects. Not useful.
> Want to work on Apache httpd? > svn checkout http://svn.apache.org/repos/asf/httpd/
Again, all versions and all tags thereof.
> Maybe you only care about mod_proxy? > svn checkout http://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/pr...
That's just the one version.
Similarly, my project wants the latest sources under under specific branches from repositories from five different administrative domains. That's trivial in git. I can move them around freely, lock a revision of a particular repository while letting others move forward, have custom (potentially unpublished or unwelcome upstream) patches to fit into my build system or supported OSes that are tracked along with them.
Subversion has externals for this same reason. It's no excuse for poor repository management.
Yes, I should have used the FreeBSD repository as an example, which is not organized in {trunk,branch,tags} form.
* Using a big repository for a bunch of related projects. Settings up a new project (not a new repository, but who can tell the difference?) is as simple as creating a new folder, then commiting it. Then you can directly checkout that folder if you need the single project. This beats SSH one-liners to set up new repositories.
* I usually have something like a "httpdocs"/"website" subfolder in my bigger projects. With svn, I just check out that folder on my web server. With git, I'd have to check out the whole project, which feels more like a kludge.
Naturally Git will catch up and supersede but currently they are focusing on other stuff.
As I remember, svn is more complicated, it has that separate svnadmin tool and relies on you to craft a suitable directory structure.
http://www.timdavis.com.au/git/setting-up-a-msysgit-server-w...
I tried on another ubuntu machine and it just kept failing, I tired around 4 walk throughs and none of them completed... why I'm not sure.
After reinstalling that ubuntu machine after each failure I gave up and went back to SVN because it is already configured on my laptop, and I decided I might as well just use the hackintosh/OSX86 install on my workstation as its primary work environment and use SVN server already available.
I'll try git again at some stage, but I just haven't got enough spare time to spend hours debugging where things aren't as I'd expect at the moment.
mkdir repository cd repository git init
Then on the client side:
git add serverRemote ssh://user@host.com/path/to/repository
I'm not surprised that it's difficult on Windows, since this simple approach relies on so much stuff that doesn't come with Windows, but on a UNIX server it shuold be really straightforward. Much easier than setting up Subversion in my experience.
- setup or have available another linux machine to act as a "client". git on windows with ssh can be a bit fidgety sometimes, and that would help you debug whether it's a client or server issue.
- do look at gitolite for managing the repos [1]. Its "simple" to install, and the features it brings to the table are awesome (from private 'scratch' repos to auth and key management, and several others).
Edit: I should also mention that I prefer subversion's central repository approach and that I don't really need the distributed features of git but I can understand why Linus and kernel hackers do!
I used Subversion for over 4 years and suffered through the regular merge issues, connectivity issues ("huh, can't commit because I'm not connected"), line ending issues, you name the problem I had it.
Two days into using Mercurial I felt more confident with it than I had ever felt with Subversion. I could branch code without having to work with the server, I could commit on my own machine and later push changes... and the merges just worked. No praying for ten minutes, no stupid CR/LF vs. CR errors, nothing.
I guess you'd have a point about easy of use if you count on the excellent TortoiseSVN. In the beginning Mercurial and Git didn't have anything as nice as that.
But they do need to produce content (which they'd like to be version controlled) that they expect my team to put up on our website.
From our point of view, SVN is a near-perfect solution: explain how to check $SOMETHING out and how to check it back in when you've amended it (using the excellent TortoiseSVN).
Once they've checked their work back in they email our team email address and one of us runs SVN UP on the relevant server, and we're done.
I'm curious, because at least Git does not protect you from CRLF-problems out of the box. All the committers must have right settings (autocrlf=input for unix and true for Windows). In case of a central repository, you probably should have a protection hook in case someones settings get changed anyways.
Lastly, when supporting my developer pool with SVN, resolving corrupted .svn folders because of moving folders in correctly is a time consuming procedure and usually ends with an export command to kill all the .svn files, and risking blowing away changes in with a commit that ignores history.
* SVN is no simpler than Git
* Working with a team is easier to branch and merge
* The tools and community around Git are vibrant
Go use TRAC and SVN, and then hit yourself in the face with a brick a few times, and see which you enjoy more.
Maybe I'm in the minority.
* git clone
* git pull origin master
* git commit -a -m "ch ch ch ch changes"
* git push origin master
You really don't need to know any commands other than that, and if you find those too verbose, you can alias them. But then if you want the power of git branch and git merge, they are there for the using.
I used to use SVN, and at some point I took the leap and converted to Git, and I am a happy camper. As we have more and more developers working on various branches and projects, the power of Git becomes clear.
Subversion has been "out" for years now! Please move on to a DVCS as soon as you can and leave it to die a respectable death.