使用' git checkout -f'从Gitlab中的裸git仓库部署文件

时间:2015-05-04 12:04:46

标签: git deployment web-deployment gitlab

我正在我的工作场所实施Gitlab,并将所有人转移到它,以便更好地进行代码审查,直接链接到提交的问题管理,以及与Pivotal跟踪器上的用户故事集成。

我目前对测试应用的设置是这样的:

  1. Git bare repo包含基于PHP的web-app的所有代码:/var/opt/gitlab/git-data/repositories/git/test-app.git

  2. 部署目录为:/ var / www / test-app

  3. 在Git repo目录中,我执行了以下操作:

    export GIT_WORK_TREE=/var/www/test-app
    git checkout -f master
    

    这就像魅力一样,所有文件都可以按照预期在/ var / www / test-app中访问。

    这是我难倒的地方。我希望Gitlab服务器只能托管Git裸存储库,而不是部署目录。部署目录将托管在单独的服务器上。

    有没有办法让不同的服务器设置为GIT_WORK_TREE?我尝试将服务器的详细信息放在那里,例如:

    GIT_WORK_TREE=git@devserver.mydomain.com:/var/www/test-app
    

    但没有骰子。

    这甚至可能还是我在这里咆哮错了?会喜欢一些建议。

    感谢。

1 个答案:

答案 0 :(得分:1)

而不是尝试在远程服务器上签出,而应该(在相同的后接收挂钩中)推送到那个远程服务器。

Git 2.3.32.4.0以来,使用push-to-deploy,使用git服务器端的config receive.denyCurrentBranch = updateInstead
请注意,这种方法有一些注意事项。

  
      
  • 您的服务器将包含一个.git目录,其中包含项目的完整历史记录。您可能希望确保无法向用户提供服务!
  •   
  • 在部署期间,用户可能会暂时遇到处于不一致状态的站点,旧版本的某些文件和新版本的其他文件,甚至是半写文件。如果这对您的项目来说是个问题,那么推送部署可能不适合您。
  •   
  • 如果你的项目需要一个“构建”步骤,那么你必须明确地设置它,也许是通过githooks。
  •