I use RapidSVN as a client, up to now the best (as I don’t only develop in one ide and don’t like tortoise’s funny icons)
Regards
I use RapidSVN as a client, up to now the best (as I don’t only develop in one ide and don’t like tortoise’s funny icons)
Regards
git and other systems do merging more easily than subversion because that was regarded as an essential feature, and because they (deliberately) force simplifications.
In subversion (and CVS) one can branch and merge arbitrary sets of files and directories.
In most systems you can’t: a revision consists of a specific set of files and directories (which can change over time, obviously), but it gets changed, branched, tagged, merged, all in one go. So merging’s going to be easier (and faster) in that case. Also more easily comprehensible, I suspect. It’ll be interesting to see how subversion’s merge tracking in 1.5 plays out if and when it’s actually released.
Another strike against subversion is that when it checks out something it stores an uncompressed copy of it so that you can do “svn diff” and things without contacting the repository.
That’s an advantage over CVS but a disadvantage compared to almost all other systems: you typically get the entire history in less space than that copy of one revision. In some ways that’s trivial (disk space is cheap and all that), and it seems obviously fixable (just compress the copy) but it’s been fixable for several years so a fix probably isn’t imminent.
Jeff, Apache gets you a WebDAV folder to access the latest version. If you want to edit just 1 file (not the directory which is SVN’s default working model), you can just drag the file off the “network folder”, edit it and drag it back. Voila - you just checked out, modified and checked-in a file. Perfect for ‘non-technical’ users. Just make sure you have the exclusive lock option set
I’ve found SVN to be good, but not for corporate development.
Its merging facilities are trivially easy to screw your source. It only takes 1 poor checkin to garble things and that is not acceptable at all. I ended up putting exclusive locks on everything to prevent this.
There’s no global configuration options. I cannot prevent build objects from being checked in, or to ensure all developers have the same options.
It dumps “.svn turds” all over your filesystem. I know this is part of the design and dsc space is cheap, but when you have gigabyte source trees, it becomes difficult to manage.
The GUIs I’ve seen are poor when it comes to displaying branches. As tags are branches, this is quite important. Also, with sub-projects having branches from the project directory quickly becomes a managment nightmare. (though this isn’t necessarily a SVN issue, it doesn’t make managing the problem easy which is).
There was also an issue where the .svn directory became corrupted/deleted. You have to check everything out to a different directory and fiddle with copying them back. There is no ‘get the latest as .svn and then let me do a revert/update/checkin’ which I got hit with several times. (The ‘working copy locked’ problem if you read the mailing list archives).
John Fiala:
That’s a good point - I’ve really gotten used to (in linux) typing rm -rf find . -type d -name .svn
to clean out a chunk of code so it’s ready to share.
Is there an easy way to do the same on the windows command line?
(That aside, thanks for the tutorial. I’m a big fan of svn in general, and that looks very useful.)
Oh well. And try the SVN manual some time. It sure looked useful to me.
Vinzent.
@AndyB Vinzent: Delete SVN Folders (Windows) - http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx
What is the difference between what you describe, and working
traditionally offline, then checking in when you get back into the
office? If a “checkin” occurs on your local machine, and nobody
else in the world knows about it… did it really happen? Maybe I’m
not understanding the distinction here.
The difference is that you can make gradual commits while offline, so you still have all the benefits of source control while offline and a complete history of what you did while you were offline. You can also clone the repo as many times you want and try stuff out. And when you push it back, all the commits you made while offline are visible to others.
With SVN, you have a working directory, but you can’t keep track of the changes you did while offline. So that’s why many people then revert to making backup copies of their working directories, which really defeats the purpose of source control.
Also, cloning a repository, commiting to your local repo several times and then pushing back when you’re happy with it promotes more experimentation. With SVN I don’t want to go through the hassle of creating an experimental branch for something stupid and I don’t want to commit my changes until everything works perfectly, so with SVN you many times end up with these huge commits.
I’d suggest you give Mercurial a go, it’s simple and really easy to install on Windows and when playing around with it for a bit, you see the benefits of a decentralized VCS.
DreamHost.com offers subversion as part of it’s basic hosting package which is really inexpensive. For the record, I LOVE subversion. Thanks for the post. I will have to checkout VisualSVN Server mentioned by your commenters. I, too, setup my Win server with apache but it took several hours too get it right.
Seth Spearman
@Jeff
Setting up svn in Apache is more complicated,
What does that get us? Some kind of web UI? Use of port 80?
If you want to authenticate users against a windows domain, you should go for Apache + mod_auth_sspi combo. One password to rule em all
Its funny how Jeff has mentioned Git without saying its name.
I just started playing with Git on Windows about 4 months ago, and I’m hooked. The hype around it I never really understood. I mean literally. I had no idea what they were talking about. Might as well have been in Swahili. Well, I still have no idea what they are talking about, but its sure great for our needs.
We have to deliver our systems to customer sites all over the world. Of course there’s often a bit of “integration” required at the customer site, which means code changes. Thus we are accustomed to syncing with repositories remotely over some of the slowest and/or least reliable internet connections imaginable.
Git was pretty much designed for exactly these conditions. It only requires a link to the remote master repository when changes need to be merged. (In a pinch, the changes can even be emailed. In an even bigger pinch the local repository can be copied to a laptop or USB drive and physically sent home.)
Rather than listen to all the back-and-forth hype, I’d simply suggest trying Git out yourself and seeing what (if anything) it can do for you. There are several Windows ports floating around, but I think the friendliest is Msys Git at http://code.google.com/p/msysgit/ . It has a nice installer what will add a “bring up the Git Gui here” option to your explorer menu. That’s all you’d need to get started.
Has Git support for windows/Cygwin improved any? I’ve considered
trying it for personal projects since everyone has had so many good
things to say about it’s branch/merge/tracking model.
I don’t know what it used to be like. I do know that its at least as good as Subversion’s was 2 years ago when I last looked at it. My only complaint is that Git Daemon could use support as an NT service. I may do that myself if I can scrounge up the free time.
As I mentioned in the previous message, I’d suggest using the Msys version. Just go to http://code.google.com/p/msysgit/ and click on the “Featured Download” on the right.
You can also get Git as part of the Cygwin download ( http://www.cygwin.com/ ). You have to manually select it from the installer though, and it installs a whole bunch of other Unixy stuff and DLLs too. It doesn’t give you the nice “Start Git GUI here” right-click explorer menu either.
I personally use Eclipse while the rest of my team uses Tortoise. It didn’t take that long to get Eclipse working with it (it even auto-detected the tortoise files and setup) plus it tells me whenever my files are out of sync with the repository AND has a built in compare editor. I’ve used it for Java projects as well as Coldfusion with much success.
I watched the whole video. There are a couple quotes of his worth mentioning:
“In a tightly controlled environment, centralized systems work better.”
(Yes, Linus said that)
“Merge often, merge early.”
(If we do the same thing with update and commit in a corporate environment with subversion, don’t you get much of the same benefits?)
Here is a great explanation of the text file captured in the screen shots: a href="http://tinyurl.com/2q9j9y"http://tinyurl.com/2q9j9y/a
As a student that has never successfully used VC, I have found both of these discussions enlightening. For my project today, I copied some files manually, and renamed them manually, and changed my header files to the renamed files. All so I could test an extra credit feature. This sounds to me most like a DVCS type feature. Now if I can just integrate something into emacs… ;)).
Really, I appreciate these type of discussions. These types of posts are the type I read Coding Horror for. These are the posts that make me overlook your MS friendliness.
Great Work Jeff
Sorry, by posts I mean de Hora’s, and yours, Jeff.
I agree Subversion is the best. I use TortoiseSVN and VisualSVN which is great for VS since you don’t have to leave the IDE.
I get the feeling that SVN and other non-distributed systems are dead or dying and we’ll all move to systems such as Git and Mercurial.
I actually used CVS to maintain some of my own single developer projects, but even for these micro-projects, there’s no reason not to use these distributed system.
The easy branch/merging on Git is great for even a single developer to explore a line of development and revert back or merge the changes.
I’ve set up SVN quite a few times and this is a pretty good tutorial on such. Well done!
I get the feeling that SVN and other non-distributed systems are dead or dying and we’ll all move to systems such as Git and Mercurial
No, there will be a split.
Tightly controlled development will remain the providence of centrally managed source control.
Non-tightly controlled development or development with a anarcho-meritocratic hierarchy of developers(the self-directed people who happen to post a lot on blogs!) will all go to distributed source control.
By the way, again, I read about the problems with Subversion and merging, and I never have these problems with Perforce and merging, nor “.svn turds” or “CVS turds” or whatever.
And you wonder why people choose SourceSafe over subversion??
I just counted about 15 steps that could easily be screwed up by anybody on a team of 10+ people who are used to the simple GUI of SourceSafe.
Remember about the 80% of programmers you talked about here:
http://www.codinghorror.com/blog/archives/001002.html
When you’re setting up source control in a shop at work, you have to follow the keep it simple approach or people will start breaking out of it because they just don’t understand it.
SourceSafe might not be the most secure and wonderfully functional piece of software, but it doesn’t take a lot of brains to set it up, and it provides some basic functions to the large percentage of Microsoft programmers who want something simple.
Want to set up a SourceSafe client or server? Pop in the CD and follow the simple GUI prompts. Want to add your project to source safe? Check the box that says “Add to Source Control” when you’re creating your project. Nothing to execute at the command prompt, no standard TTB folders to add, no cryptic config files to edit, it just works.