Deploying Stuff With Git
babyl.ca
babyl.ca
The only way to atomically deploy an application is to clone into a new directory and then write a symlink to point to the new directory. You can maintain a local Git cache that contains the newest tree and clone from that; Git uses hard links, so the clone will be fast. So something like:
cd $cache && git fetch origin && git reset --hard $version && \
git clone $cache $temp && ln -sf $temp $current
Of course, apps can be designed to avoid the race condition, by caching the application's files. Rails and Sinatra will do this (but only for Ruby files), for example.
Edit ReplyPackage management systems blur the boundaries between operating system and software. Use them, please.
http://en.wikipedia.org/wiki/List_of_software_package_manage...
There is a chasm dividing OS management and app management. The OS is the province of sysadmins, but apps are the province of developers. Ideally you want to bridge the two by having the environment "contain" the app, in a way that lets an application be automatically deployed from the newest code (eg., from Git), coordinated by an external system (eg., Jenkins), running inside an environment controlled by the configuration management system (eg., Puppet).