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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With