If I have a clone of a git repository as a cached copy on a remote server for capistrano/vlad style deployment, is it better to do A)
git archive --format=tar origin/master | (cd #{destination} && tar xf -)
or B)
cp -R cached-copy #{destination} && rm -Rf #{destination}/.git
To clarify, the repository is already on the remote server, and I just want to copy a particular version to a releases directory on the same server during deployment.
I'd say actually
This works as long as it's OK to skip all the dot files in the repo, not only
.git
. If you want to skip only.git
then you'll need the-f
option and the man page.I love rsync. Works great and most times you can use it just as you would use scp!
A)
You save the network overhead of transferring the .git directory which could possibly be quite large depending on how much history and objects not in the current HEAD.
If you ever wanted to have an actual git repository on the remote end you're better off pushing to a real repository and only having to change the deltas.
Neither!
A better way of doing this is to:
git fetch
your cache--no-checkout
options enabled)When you do a local clone Git uses hardlinks. That means, until you modify a file, which you wont, you can have 1,000 deployments and use (virtually) only the space you would need for one. This way is also alot faster archiving or rsync.
Also someone may have already written your code for you.
vigetlab's
capistrano_rsync_with_remote_cache
I use this with Subversion and it works well for me.