在此之前被标记为重复之前,我想澄清一下,谷歌搜索并尝试了一天我仍然在我开始的地方所以这个问题是关于如何调试为什么我没有得到其他预期的结果类似的问题。
我的repo有一个'develop'分支,我正在尝试设置一个临时服务器,我可以推送这个分支进行测试。实时服务器已经设置了一个裸仓库和后接收挂钩,以检查主分支到Web根目录。它工作得很好,所以我开始以相同的方式设置登台服务器。我的问题是登台服务器上的Web根目录总是获得主分支。
根据我所读到的,这是应该对我有用的解决方案: 收到后
#! /bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f
我的本地仓库的配置具有远程
的配置[remote "staging"]
url = path/to.git
push = +develop:master
我的想法是,当我运行git push staging
时,我的本地开发分支被推送到远程主分支,并且主分支被检出到Web根目录。
我尝试过的其他事情:
如果适用,我尝试使用和不使用前导+ s和-f标志。
如果远程仓库是问题,我删除了远程仓库和Web根目录并运行git init --bare
从头开始
在我的本地配置中没有推送线,我更改了钩子以结帐开发分支
#! /bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f develop
以及在本地运行git push staging develop
我通过SSH连接到遥控器并从裸仓库中运行GIT_WORK_TREE=/path/to/web/root git checkout -f develop
。这导致Switched to branch 'develop'
,但Web根目录中的文件仍然反映了主文件。
此时,我要么错过了一些小细节,要么就是疯了。我相信很多人都会以这种方式设置工作流程,你能告诉我我错过了什么吗?
更新
根据@VonCs评论,我将分支名称添加回钩子并将远程本地配置设置为push = +refs/heads/develop:refs/heads/develop
。现在当我推动时,我的本地开发分支正在进行远程开发分支,在用git log
检查哈希后,我知道推送工作正常。但是,如果我然后运行git status
,则返回:
# On branch develop
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: a/file/I/modified/locally
因此钩子没有正确执行。如果我通过SSH运行hooks / post-receive文件的内容,它会正确检出并且我的暂存站点是好的。那么现在我如何确定钩子不会执行的原因以及它是否与同一问题有关?
为了澄清,我的钩子目前看起来像:
#! /bin/sh
GIT_WORK_TREE=/path/to/web/root git checkout -f develop