Can I make git extract a working copy only from a remote repository?

As a system administrator I would like to be able to write an automated process for installation to a production server that:

  • has access to a remote git repository (say on git.mycompany.com)
  • can get a copy of one branch/label (say release_20110721_01) from the repository
  • will not create a local copy of the entire repository

In other words, have a central repository containing all the revisions, but then install to production servers the specific tag only.

Is there a way of doing this? At least with CVS a working copy of a module with a given tag can be obtained without having to pull a copy of the entire repository.


Solution 1:

That is the main difference between a centralised VCS (like CVS) and a DVCS (Distributed): you always clone all the content of a repo, even though you can perform a shallow clone, as Olipro mentions.

  • In a CVCS, you can put everything, and get bacj only a subset of it.
  • In a DVCS, you consider a repo as a global and coherent set of files, that you always manipulate as a all.

Doing a shallow clone of just one branch is possible, but complicated: See "Partial clone with Git and Mercurial".

But I recommend not using Git as a release management / deployment tool: "How to shallow clone a single branch in git?".

I would rather go with git archive to zip the right branch/version you need, and then copy that to the appropriate server.

Solution 2:

sure, make your central repository accessible to the unprovisioned production server, perform a git clone from the server using the -b and --depth options to specify which branch you'd like along with the revision depth you want the server to have available to it.