6

我正试图围绕 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 时,出现错误)?有没有人可以指出我正确的方向?

4

1 回答 1

5

您可以使用任何树形(任何分支、标签、sha1 哈希等)作为 git 存档的参数。您不能使用 origin/master,因为您在裸仓库中并且它没有来源。您需要使用本地分支名称,例如

git archive --format=tar develop
于 2012-04-06T14:57:43.570 回答