我正试图围绕 Git 并使用(或不使用)它来部署网站。我一直在谷歌搜索、搜索和阅读,但找不到我的具体案例或疑虑的答案。我仍处于计划阶段,但希望从一开始就做好并找到适合我的工作流程。我将尝试尽可能清楚地解释情况:
我有一个远程 VPS,在 www.example.com 上运行我的实时网站,在 dev.example.com 上运行开发版本(它们位于 /var/www/example/htdocs/ 和 /var/www/example/subdomains/dev /)。
开发是从 /opt/git/example.git/ 中的裸存储库运行的。裸仓库中有一个 master 和 development 分支。我和其他开发人员在我们的本地机器上都有这个存储库的克隆。我们从开发分支中提取并从那里工作。这个想法是 dev.example.com 有来自开发分支的最新代码,一旦经过正确测试,我们合并到 master,添加标签并更新 example.com(基本上,这个git 流)。
我在 Git IRC 频道上找到的第一种方法使用挂钩来更新存储库,但这感觉非常有限,有时也不需要,我想在推送后自己在服务器上运行一个命令,更新开发环境。另一个命令(或 shell 脚本)将在合并开发后从主分支更新实时站点)。我还找到了 Capistrano,但目前这似乎有点过头了。
在阅读的过程中,我发现很多人建议在遥控器上再创建两个克隆:一个用于实时站点,一个用于开发站点,必要时拉入分支。然而,这也使版本控制文件可以通过网络访问,这是我不想要的。理想情况下,我想要一个没有任何 git 文件或文件夹的“干净”副本。
我还找到了一种使用 git archive 的方法,但是从我的裸存储库运行 git archive 只允许我归档 master 分支。我使用git archive --format=tar HEAD | (cd /var/www/example/htdocs/ && tar xf -)
/opt/git/example.git/ 中的命令执行此操作。
我觉得这种git archive
方法让我最接近答案,但我受限于我缺乏 Git 知识。我可以更改命令以使用分支而不是 HEAD(当我尝试使用 origin/master 而不是 HEAD 时,出现错误)?有没有人可以指出我正确的方向?