我正试图围绕Git并使用(或不使用)部署网站。我一直在谷歌上搜索和阅读,但无法找到我的具体案例或疑虑的答案。我仍然处于这样做的计划阶段,但是我想从一开始就把它弄好,并找到适合我的工作流程。我将尽可能清楚地解释情况:
我有一个远程VPS,在www.example.com上运行我的实时网站,在dev.example.com上运行开发版本(它们位于/ var / www / example / htdocs /和/ var / www / example /子域的/ 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时,我收到错误)?有没有人可以指出我正确的方向?
答案 0 :(得分:4)
您可以使用任何tree-ish(任何分支,标记,sha1哈希等)作为git archive的参数。您不能使用origin / master,因为您在裸仓库中并且没有原产地。您需要使用本地分支名称,例如
git archive --format=tar develop