35

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?

10
  • 1
    Maybe I should try network shared folders
    – dan
    Apr 28, 2011 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.
    – Adam Lear
    Apr 28, 2011 at 15:34
  • 1
    Very carefully.
    – greyfade
    Apr 28, 2011 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, 2011 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, 2011 at 21:05

9 Answers 9

17

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.

4
  • 1
    How do you sync the databases? Does this work for both DDL and DML changes? Apr 28, 2011 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, 2011 at 21:41
  • Do you get version conflicts when you use Unison? How do you minimize them?
    – dan
    Apr 29, 2011 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, 2011 at 19:15
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).

9
  • I don't see how you would use Dropbox to sync databases. Apr 28, 2011 at 15:45
  • You could schedule a regular database dump/restore to/from a dropbox directory.
    – badgerr
    Apr 28, 2011 at 15:57
  • 6
    @badgerr Consider expanding your answer to include how Dropbox can be used in the various scenarios the OP mentioned.
    – Adam Lear
    Apr 28, 2011 at 16:01
  • That's ugly. I'd much rather use a script-runner like DbMaintain. Apr 28, 2011 at 16:02
  • 1
    -1 for the reason Anna mentions. Expand your answer and the vote will be reversed ;-)
    – fretje
    Apr 28, 2011 at 17:25
7
  • Dropbox
  • Github
  • Firefox Sync for bookmarks/history/Firefox settings
1
  • 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, 2011 at 19:04
3

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.

2

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.

1

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...

1
  • 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, 2011 at 17:42
0

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

0

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.

0

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 https://stackoverflow.com/questions/535768/what-is-a-reasonable-amount-of-inotify-watches-with-linux

1

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