将Git推送到暂存服务器

3
我正在尝试使用以下命令将我的Staging分支推送到我在演示服务器上的裸仓库:

git push staging-server staging

git push staging +staging:refs/heads/staging

但是我遇到了致命错误:
you are on a branch yet to be born

如果我用上面的命令将staging替换为master,它就可以工作并将我的master分支/文件部署到staging服务器上,但是我的master分支是我的生产分支,我只想部署我的staging分支/文件。
有人能帮忙吗?
请注意,我是一名设计师,而不是开发人员,因此希望提供一些新手风格的答案; o)
更新:
我想我最好解释一下我的工作流程...以防这揭示了我的问题/新手状况:
我在Bitbucket上拥有我的Origin - 它持有我的整个项目
我将我的repo克隆到本地WAMP服务器上进行开发(在那里我在develop分支上工作)
我有三个主要分支:master(我的生产分支/实时服务器),develop(我的本地分支/WAMP服务器)和staging(我的客户验收分支/暂存服务器)
我没有问题将整个项目推送到Bitbucket,但我正在努力将staging分支下的文件推送到我的staging服务器。
NB:在我的staging服务器git上,我使用一个post-receive hook: GIT_WORK_TREE=/path/to/site git checkout -f
我可能完全做错了,但我认为我可以将我的代码部署到staging服务器上的staging分支?!

我可能会漏掉一些东西,但你尝试过 git push staging staging 吗? - mlt
2个回答

3

您需要做的是:

  • 将该分支推送
  • 在本地和远程之间建立跟踪关系

这可以通过一个命令完成:

git push -u staging staging

在完成了最初的第一次推送之后,以后只需要简单地执行以下操作即可进行后续的推送:

git push

请参见“为什么需要显式推送新分支?”。

请注意,“最佳实践”(或至少更好的做法)是不要将远程存储库引用(staging)和分支(staging)命名为相同的名称,仅仅是为了在这些git push命令中更清楚地表明“staging”是什么。


谢谢VonC,我已经按照建议添加了上游跟踪,但是当我将暂存分支(推送到暂存)时,它会显示“一切都是最新的”。查看暂存站点时,没有文件被上传-我只能得到目录索引。 - Ian
@Ian,你希望文件更新在哪里?git push只是推送版本控制数据,它不会更新文件。也许你想在服务器上创建一个post-receive hook,这样一次推送就会触发更新你的staging站点。这个答案可能会有所帮助:https://dev59.com/A3zaa4cB1Zd3GeqPRY1J#21809083 - janos
@janos 谢谢,我已经有一个像这样的 post-receive 钩子:(GIT_WORK_TREE=/path/to/site git checkout -f),所以我期望测试 index.html 文件出现在站点根目录中。 - Ian
@VonC,当我尝试将新的提交推送到暂存区时,我也注意到了以下几点: hooks/post-receive:第2行:checkout:命令未找到。这是我的GIT_WORK_TREE=/path/to/site git checkout -f命令,之后出现了一个错误:无法运行hooks/post-receive: 没有此文件或目录。这可能与此有关吗? - Ian
@VonC,感谢您的所有帮助,但这仍然会出现相同的错误;o(我想我不得不放弃,回到没有Git部署我的站点,并拿出旧的铅笔和纸张进行FTP。再次感谢。 - Ian
显示剩余9条评论

1

已解决

通过更新我的git post-receive hook,我所面临的问题已经完全得到了解决:

GIT_WORK_TREE=/path/to/site git checkout -f

GIT_WORK_TREE=/path/to/site git checkout -f staging

谁能想到这是一个如此简单的事情呢;o)

非常感谢@VonC提供的所有帮助 - 不知何故,你让我走上了正确的道路。


好的发现。+1 默认情况下,“master”被签出。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接