Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I have like 4 or 5 computers now, and I need a better system for syncing everything. I use git and github a lot to sync my files for programming projects, but then there are databases, .bash_profile files, bash scripts, etc. Sometimes, instead of syncing files, I just ssh in from one computer to another. But this is getting fairly chaotic. Some of my computers are Ubuntu and others are OS X.

Any suggestions for managing a workflow that spans multiple personal computers?

share|improve this question

closed as off topic by Mark Trapp Jan 21 '12 at 21:40

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
Maybe I should try network shared folders –  dan Apr 28 '11 at 15:34
1  
@rwong I get the impression that @dan is looking for those "usual answers" in the first place. Consider posting an answer that describes how using rsync and shared folders can help him out. –  Anna Lear Apr 28 '11 at 15:34
1  
Very carefully. –  greyfade Apr 28 '11 at 16:10
4  
This really isn't specific to programming. Perhaps migrating to SU would be a better place for this? –  Walter Apr 28 '11 at 18:43
1  
@FarmBoy - it would depend on the type of DB as alot of them are really just files as well... I still see this as a file syncing issue rather than a programming one. And I think there would be a lot more variety of answers on SU. Just my 2 cents. –  Walter Apr 28 '11 at 21:05

9 Answers 9

up vote 13 down vote accepted

I use a combination of Git for git repositories and Unison for everything else. I have several unison profiles so I can sync specific things, and one that syncs everything. I also have a bash script that goes through and syncs all the things unison syncs then goes through and updates all my git repositories.

Unison is the best thing in my mind when it comes to syncing computers.

share|improve this answer
1  
How do you sync the databases? Does this work for both DDL and DML changes? –  Eric Wilson Apr 28 '11 at 16:01
    
I'm not working with any SQL/database related things at the moment, so I can't answer that question, as it doesn't apply to me. I missed that part of the original question, and was answering how I get all my code and profile information synchronized. –  sp0rus Apr 28 '11 at 21:41
    
Do you get version conflicts when you use Unison? How do you minimize them? –  dan Apr 29 '11 at 12:44
    
I always sync manually before changing anything, so that I'm editting the most up to date version of the file. I also have a cron job set for every night to synchronize the computers. I haven't had any problems with version conflicts by sticking with this system. When I have had to deviate and a conflict occurs, it's been something I was able to choose which one I wanted to replace the others with. –  sp0rus Apr 29 '11 at 19:15

Dropbox

For syncing files, it is as easy as working on them within a folder that DropBox knows about. The video on the main page does most of the description, which is why I didn't comment on the features. Simply modify a versioned file and DropBox will upload it automatically, then all other machines with DropBox will automatically download the latest version.

For things like databases, symlinks might be the way to go. This thread on the DropBox forums provides a little insight into how one might sync a MySQL database. Alternatively you could do the "export/import" script route, or, if indeed you are using MySQL you could take a look at Replication and how to implement it (this is a feature of MySQL that does not use DropBox).

share|improve this answer
    
I don't see how you would use Dropbox to sync databases. –  Eric Wilson Apr 28 '11 at 15:45
    
You could schedule a regular database dump/restore to/from a dropbox directory. –  badgerr Apr 28 '11 at 15:57
6  
@badgerr Consider expanding your answer to include how Dropbox can be used in the various scenarios the OP mentioned. –  Anna Lear Apr 28 '11 at 16:01
    
That's ugly. I'd much rather use a script-runner like DbMaintain. –  Eric Wilson Apr 28 '11 at 16:02
1  
-1 for the reason Anna mentions. Expand your answer and the vote will be reversed ;-) –  fretje Apr 28 '11 at 17:25
  • Dropbox
  • Github
  • Firefox Sync for bookmarks/history/Firefox settings
share|improve this answer
1  
+1 for straight forward answer and for dropbox being on top. Regardless of their recent PR issues with the open source community, dropbox is invaluable to me. –  Falmarri Apr 28 '11 at 19:04

You can use github for all of your code, of course, including .bash_profile files and bash scripts.

Hudson/Jenkins CI server is good for maintaining multiple environments. Used along with DbMaintain, it can keep your databases in sync too.

My team uses this combination to sync four pairing stations, a variety of laptops, and CI, TEST, and QA environments (with servers and their own copies of the DB.)

This involves Windows machines, Mac laptops, and Linux servers, so it's quite flexible.

share|improve this answer

I keep my dotfiles in git, with branches for machine-specific setups. It lets me get a new machine set up quickly and I can share scripts and keep them at the latest version.

share|improve this answer

Perhaps you need to take a step back and ask yourself why you need so many computers. It's like someone asking how to keep all his stuff the same in the 5 cars that he owns.

I would suggest you ask yourself what each machine does that your primary machine doesn't, and just make it do that.

Have you considered a good laptop?

If these are all in your house, you could set up a server and keep all the stuff there. Then you just have one machine with data to back up.

If they are remote machines, consider getting a linux vps and store your remote stuff there. Don't use any free online services like github, dropbox, etc, as they can disappear at the wrong time.

Don't use AWS to store your stuff. at $0.1/month/GB, that's $100/month/TB, or $1200/year/TB. For that money, you can buy around 15 Western Digital 1TB hard drives.

If you run a business and make money off it, use the very best service you can get, but to be honest, it's hard to beat hard drives to move lots of data around. Even the 32GB micro USB drives are the size of a fingernail and you can move a lot of data around...

There's the Cloud, the Private Cloud. Maybe there should be the Personal Cloud...

share|improve this answer
    
Thanks for the tips. I have 5 computers, but I use only 3 of them a lot, and I need the three. 1 Ubuntu server at home, 1 Thinkpad Ubuntu laptop (the workhorse), and 1 Macbook Pro for iOS development –  dan Apr 28 '11 at 17:42

Git, migrated from Subversion, in turn migrated from CVS. fgit (disclaimer: by me) for pull push, status and gc.

share|improve this answer

Have you considered creating some sort of cloud infraestructure there? Seems like the only way to abstract from which workstation has the service/file/thing.

Here is a link to the Ubuntu Cloud.

share|improve this answer

I use Wuala now as a replacement for Dropbox. One problem is the lack of folder monitoring on Linux. It basically scans through all the files every minute. The next version should fix that somhow so they say.

Real-Time syncing on Linux is problematic if you have tens of thousands of folders (e.g. git repositories) due to the way inotify is implemented. For every single folder there needs to be one "watch" - see for example http://stackoverflow.com/questions/535768/what-is-a-reasonable-amount-of-inotify-watches-with-linux

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.