2012-04-06 169 views
6

我想围绕Git包装头部并且部署网站(或不包含)。我一直在谷歌搜索和阅读,但无法找到我的具体情况或疑虑的答案。我仍然处于这样做的计划阶段,但希望从一开始就找到它并找到适合我的工作流程。我会尝试尽可能地解释情况:从Git存储库部署PHP网站

我有一个远程VPS,它在www.example.com上运行我的实时网站,并在dev.example.com上开发版本(它们驻留在/ var/www/example/htdocs /和/ var/www/example/subdomains/dev /)。

开发从/opt/git/example.git/中的裸仓库运行。裸回购中有一个主发展部门。我和其他开发人员都在我们的本地机器上拥有该存储库的克隆。我们从开发分支拉出来并从那里开始工作。我们的想法是,dev.example.com拥有开发分支的最新代码,一旦经过适当测试,我们将合并到master,添加标签并更新example.com(基本上,这个git flow)。

我在Git IRC频道上找到的第一种方法是使用挂钩来更新存储库,但这种感觉非常有限,有时也不需要,我想在推送后自己在服务器上运行一个命令,以更新开发环境。另一个命令(或shell脚本)将在开发合并后从主分支更新活动站点)。我也发现了卡皮斯特拉诺,但那一刻似乎有点过头了。

在阅读时,我发现很多人建议在遥控器上创建两个克隆:一个用于活动站点,另一个用于开发站点,必要时拉动分支。然而,这也使版本控制文件可以通过网络访问,这是我不想要的。理想情况下,我想要一个没有任何git文件或文件夹的“干净”副本。

我还发现使用git archive的方法,但是从我的裸仓库运行git archive只允许我归档master分支。我使用/opt/git/example.git/中的命令git archive --format=tar HEAD | (cd /var/www/example/htdocs/ && tar xf -)执行此操作。

我觉得git archive方法使我最接近答案,但我受限于我缺乏Git知识。我可以改变命令使用分支而不是HEAD(当我尝试使用origin/master而不是HEAD时,出现错误)?有没有人可以指引我走向正确的方向?

回答

4

你可以使用任何tree-ish(任何分支,标签,sha1哈希等)作为git归档的参数。您不能使用origin/master,因为您处于裸回购状态,并且没有源。您需要使用本地分支名称,例如

git archive --format=tar develop 
+0

我希望我可以upvote这5次。这么简单...太简单了。 – Bram 2012-04-06 15:03:17

+0

Hehehe谢谢:) – ralphtheninja 2012-04-06 15:04:19

+0

终于接受这个之前的最后一个问题:是否可以删除.gitignore文件? – Bram 2012-04-06 15:05:08