git - checkout single file under bare repository
git, githooks, sh
Solution
As I explain in "checkout only one file from git", you cannot checkout just one file without cloning or fetching first.
But you `git show` that file, which means you can dump its content into a `/another/path./deploy.sh` file, and execute that file.
git-show HEAD:full/repo/path/to/deploy.sh > /another/path./deploy.sh
/another/path./deploy.sh
Since you execute that from a post-receive hook, the `git-show` will show the latest version of the `deploy.sh` file.
The other alternative would be try
GIT_WORK_TREE=$SOURCE_PATH git checkout -- path/to/deploy.sh
And checkout only that file, directly in your working tree.
The '`--`' help the git command to understand it is a file, not another parameter like a tag or a named branch.
From the OP AlexKey's test, it requires that the working tree has been checked out (fully) at least once.
Problem
On the server I have bare repository which is origin for development process and to simplify deployment to QA environment. So in `post-receive` it simply does ``` GIT_WORK_TREE=/home/dev git checkout -f ``` But as product gets more complicated there are some other things should be happening. So now it is handled by `deploy.sh` script which is also tracked by repository. So what I want to do is to be able instead of checking out whole repository is to checkout only `deploy.sh` and run it. I thought something like that would work: ``` SOURCE_PATH="/home/dev" GIT_WORK_TREE=$SOURCE_PATH git checkout deploy.sh $SOURCE_PATH"/deploy.sh" ``` But it does not work giving error: ``` error: pathspec 'deploy.sh' did not match any file(s) known to git. ``` What am I doing wrong? Or is it just impossible to do this way?