Okay, so I have a laptop now, but I've been doing most of my RoR
development on my home computer system. Both are Windows XP. Now, I
have this crazy idea about using both to develop the same program
(*gasp*). Although I've been doing programming for a few years, I have
NO idea how to do this. I'm using Aptana RadRails right now... is
there perhaps something built-in that I can use? I understand that
what I'm trying to do is called CVS maybe? Any help? Thanks!!
A lot of cheap web hosts (e.g., Dreamhost) offer Subversion support
with their web packages. So basically you'd sync the source to your
web account then pull it down on the other computer, push your changes
back to the server, pull them down on the other computer, rinse
repeat.
Wikipedia probably has a good article on it and there's a book about
Subversion on their website that's free.
not sure what you'll find built in, but have a look at subversion.
It's more or less the standard in the rails community, and I
understand TortoiseSVN is a very good windows client (though I've
never tried it out, since I'm on another platform).
But is there a solution that's... umm... simple? For example, I don't
care much about being able to revert to previous versions and things
like that. I just want to change it on one system and be able to get
the changes on the new system. Something like when I'm done at home I
can click "Update Server" or use a command line prompt like "update
server /rails/program/path/" and have the files uploaded. Then on my
laptop I want to click or type "Update Computer" to download all the
files and update the ones that have been edited.
Has anyone done something this simple for me yet? I don't want those
extra features if I'm not going to be using them (k.i.s.s. standard).
Once you've got svn installed on WinXP, and once you've got Tortoise
SVN installed on WinXP, and once you figure out the url for the svn
repository on your server, you then can do what you said.
You might prefer to skip the windows gui (Tortoise) and write a
command line call svn in a .cmd file. You can then set up an icon to
run the command .cmd scripts, one to get and one to upload. And then
just click on them as needed. But this sounds like more trouble than
using the GUI for Tortoise.
Just remember that the 'update' icon in Tortoise means download, and
'commit' icon means upload to the server.
The other gotcha is that you first set up a directory with your stuff,
and then put it into the repository. Then you check it out, but to a
different directory. Then that second directory is your working
directory and the first directory is an orphan, never to be touched
again. Why they do this, I don't know.
A completely different approach would use WinSCP and/or ftp to upload
and download to the directory structure on your server.
But is there a solution that's... umm... simple? For example, I don't
care much about being able to revert to previous versions and things
like that. I just want to change it on one system and be able to get
the changes on the new system. Something like when I'm done at home I
can click "Update Server" or use a command line prompt like "update
server /rails/program/path/" and have the files uploaded. Then on my
laptop I want to click or type "Update Computer" to download all the
files and update the ones that have been edited.
Ryan - this is all I use subversion for! It seems really hard at
first, but once you have set up your repositroy (preferably online,
with your web hosts) all you do is checkout a version to each
computer. After doing some updates you 'commit' these back to the
central online subversion repository. A simple 'update' command will
then update all the other copies to take account of the changes. I
don't use any of the stuff about rolling back and branches, but figure
that I might use it in the future.
Once you used source control you'll never want to go back. Have you never been in situations along the lines off 'Damn, this was working fine yesterday, what have I changed?', or scrummaged through backups to find the code from 6 months ago which has something you need (or because someone running an older version has found a problem etc..) ?
At a basically level with subversion you can just do svn commmit to push changes to the repository and svn update to pull them down.
There are a number of places which will host your repository (normally for a fee, but it's not an awful lot) which means you don't have to setup the server yourself it's accessible from anywhere in the world and (most importantly as far as I'm concerned) your data is safe in a datacenter, on properly backed up hardware where you don't have to worry about a toddler feeding its porridge through the vents on the computer hosting your repository.
I use NetBeans for Ruby as my IDE and it integrates really well with
SVN - have Tortoise installed but really only use it when I have to go
out into PHP land.
NetBeans has a very cool feature once it knows about your repository -
you can turn on the diff sidebar and it shows you in the margins where
you have made changes, when you mouse over the marks it tells you want
the changes were and allows you to undo just that change, rather than
the whole file.
If you're using one of the Eclipse based IDE's it's probably got very
similar functionality.
Don't let the Subversion book discourage you. In a normal day you
would only use a few of those commands and the online book is always
there to help you when you need one of the more exotic commands.
Knowing every single Subversion command or command line option is not
required to use Subversion.
For example, I don't
care much about being able to revert to previous versions and things
like that. I just want to change it on one system and be able to get
the changes on the new system. Something like when I'm done at home I
can click "Update Server" or use a command line prompt like "update
server /rails/program/path/" and have the files uploaded. Then on my
laptop I want to click or type "Update Computer" to download all the
files and update the ones that have been edited.
Has anyone done something this simple for me yet? I don't want those
extra features if I'm not going to be using them (k.i.s.s. standard).
There are indeed features in Subverion and Capastrano that you will
not need, but that's true with most anything. Dismissing the
applications themselves simply because of those extra features is very
poor logic in my opinion.
Learning Subversion is not a waste of time. I almost want ask who
_isn't_ using it by now? And running `cap deploy` to redeploy any one
of my Rails apps, instantly, on a whim, seems about as simple as it
gets.
Right, but I also don't have a host that supports Subversion easily
(although I've heard of some free places).
Also, as for just synchronizing the folders, I should note that the
two computers are never on the same network. They use two differnt
ISPs, always. Pretend my laptop is in florida while my home computer
is in california. (or Sydney and New York, lol).
I've heard of WinSCP... might that work just to keep the folders
synchronized? I think the subversion idea is almost giving me a
headache... it took me weeks just to get GoDaddy and RoR to work, lol.
I don't want to have to learn something new so soon after that
headache.
Another possibility, though not as good as source control, is a simple ftp server. Run it on your desktop then get or put as the case may be.
One question, though:
Do you ever expect to have changes on one that you don't have on the other? If you will need to do any type of merging, you really need to figure out a way to use source control. I'd recommend git or mercurial. They are both distributed source control managers and you can push/pull from your notebook to your desktop. Merging is easy. It's all pretty fast. And it's not that hard to learn.
The price is right (free for <4 users), so it may be worth a look.
Also, as for just synchronizing the folders, I should note that the
two computers are never on the same network.
Irrelevant. I agree with the recommendation to just go ahead and
learn subversion, but if you really can't deal with it, there's always
carrying around a USB drive with your project
Well, that's just the thing... I'm never going to be using both for
anything different. I have one application, chronorails, which will
one day control all my websites (mwahahahah so much to do, so little
time). But for now, I don't even have my own server, just really
inexpensive shared hosting.
I'll never edit on one location without wanting the changes in the
other place, so no merging required ever. Basically, I'm going to sit
at home and code my program. Then, I'm going to get thirsty and tired,
so I'll save it, then take my laptop to Starbucks and continue my work
there. Nothing fancy at all...
Granted one day I'll want to learn subversion for all the features and
because jobs will want it... but I don't want to start anything new so
soon, lol.
I don't think I phrased my question properly. If there's a chance that the code will ever get out of sync, you'll want merge. Think of a scenario in which you do some coding on your home computer, then get thirsty (as you say) and move it all over to your notebook. After a couple of hours at Starbucks, you come home, but for one reason or another, you forget to put the code back on your home computer. A while later, you sit down and make some changes at your home computer. Now you're out of sync. If you upload your notebook's copy to your home computer, you'll lose what you just did. You now need to make the same changes on your notebook before you can upload the source again. Or, if you use mercurial or git, you could so something as easy as
Still sounds painful. Although I've heard of a good free svn host...
maybe I'll try it. *sigh*. I just hope this goes better than my other
new things...
Everytime I try to get something new working, I run into a years worth
of problems.