我正在使用个人项目来练习我们在工作中做的一些更高级的事情。我想学习的事情之一是将公共 git repo 中管理的项目直接发布到我服务器上的子域。理想情况下,我希望能够执行以下操作:git deploy
在终端中输入以将项目推送到实时托管。这可能吗?我该怎么做?
答案1
听起来你问的不是如何将项目推送到远程存储库但是如何真正地将其检出到文件系统上的目录中,由您的 Web 服务器提供文件。
您需要在与 Web 服务器相同的机器上拥有一个远程存储库(或者更准确地说,在可以写入 Web 服务器有权访问的文件系统的机器上拥有一个存储库)。您可以在该存储库中设置一个 post-receive 钩子,这是一个每次将内容推送到存储库时都会运行的脚本。post-receive 钩子应该运行一个git checkout
命令,该命令会将新推送的文件签出到实际文件系统上,然后您的 Web 服务器就可以为它们提供服务。该脚本将如下所示:
#!/bin/bash
git --work-tree=/path/to/document/root checkout -f
# reload web server here, if you need to
我在自己的网站上使用了类似的设置,并且编写了一个博客文章描述它。您可能想看看它,看看那里的信息是否对您有帮助。除了实时服务器外,我还使用了一个临时服务器,但如果您没有使用,我的帖子包含几个链接(1,2) 描述了替代的、更简单的设置。
在您的特定情况下,由于您在 Github 上有一个远程存储库,您可能希望同时将更改推送到 Github 存储库和 Web 服务器上的存储库,以便两者始终保持同步。为此,您可以使用命令将多个推送 URL 放入同一个远程存储库,这样git remote add-url
当您运行 时git push
,它会将您的更改同时发送到 Github 和远程服务器。(请参阅git help remote
)或者,您可以考虑将您的 Github 存储库用作暂存存储库,如我的博客文章中所述,或者您可以手动 ssh 到您的 Web 服务器并在您需要更新网站时提取更改。后两种解决方案意味着您的 Github 存储库不一定与您的 Web 服务器同步;如果您有时将更改推送到 Github 但不希望这些更改反映在您的实时网站上,那么这将是可取的。