- Git repos. I don't try to keep them in sync. I take a known working checkout and make a date based tarball. These are stored and accessed by all machines. If a git repo needs to be updated I update the tarball. This is not git specific, I do this with any public revision system.
- for package systems I get a list of installed packages and check that in. A self check script or part of the build process can ensure everything is up to date.
- I use Python, not Ruby so I use
pip
and a requirements file coupled withvirtualenv
to keep me separate from the actual host system. It looks like http://bundler.io/ is the Ruby equivalent.
Basically, imagine that you are trying to make an automated, hourly build process for what you are doing on your desktop(s). This way you have less dev vs. build vs. production issues.