Checkout Git files to a location outside the repository
Yes, this is certainly possible.
Lets say I have a bare repository named /srv/production.git
on the destination system/server.
On the destination system I can use the command cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
If I am in a non-bare repository the command is slightly different. Lets say I have a non-bare respository at /srv/testing
. To checkout that I would use cd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f
In fact on my system I even automate this in a post-commit hook in my production.git
repository. So when you push to production.git
the latest version is automatically check out to the web root.
#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".
GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.
If your only access to the remote system is webdav, it certainly should be possible to write a post-commit hook that will checkout to the webdav host, either directly or to a temporary location, which you can then script an upload.
If you just want the files, you can use git archive
. Usually it writes to an archive like tarballs or ZIP, but you can pipe it as well:
git archive master | tar -x -C /some/path
Here, master
obviously is the branch you want to archive, and /some/path
will contain just the files – no .git
or .gitignore
.
Or you can use git checkout-index
which more closely resembles a "checkout" of files:
git checkout-index -f -a --prefix=/some/path/
Here, the -a
option tells git
to check out all files. The prefix will be prepended to the output. Somebody also wrote a wrapper around this to give a git export
.