基于this answer我尝试实施以下内容:
当推送到web repo时,我不希望将整个存储库内容复制到我的web目录,而只是复制到某些文件/目录。
所以,在我的post-receive
钩子里,我这样做:
GIT_WORK_TREE=/full/path/to/web/directory git checkout -f -- web/index.php
然而,非常奇怪的是,目录中index.php
的版本永远不会正确更新。虽然我的裸存储库目录中的git log
显示了推送到它的最新提交,但index.php
的版本是前一个。
另外,我创建了一个名为test
的文件,并将其添加到上面的路径中以复制到工作树中 - 这也没有显示出来。
文件肯定已执行。我添加了一个显示在我的控制台上的echo
命令,并且我在正常工作的目录中进行了一些清理。所有文件都在那里并更新。 (我使用全新的git clone
进行了检查。)只有一个分支,master
。
这一切都非常令人沮丧,因为它在我第一次设置时效果很好。不知道这里有什么不对。感谢。
更新:
我尝试了以下内容:
# added "testfile" at the end of the checkout line in post-receive
echo "Test" > testfile
git add testfile
git commit -m "Test."
git push web
>...
> remote: error: pathspec 'testfile' did not match any file(s) known to git.
>...
cd ..
git clone <remote web> newdir
>...
cd newdir
cat testfile
> Test
因此repo按预期更新,但未找到新文件。路径规范可能有问题吗?