我正在我的工作场所实施Gitlab,并将所有人转移到它,以便更好地进行代码审查,直接链接到提交的问题管理,以及与Pivotal跟踪器上的用户故事集成。
我目前对测试应用的设置是这样的:
Git bare repo包含基于PHP的web-app的所有代码:/var/opt/gitlab/git-data/repositories/git/test-app.git
部署目录为:/ var / www / test-app
在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
但没有骰子。
这甚至可能还是我在这里咆哮错了?会喜欢一些建议。
感谢。
答案 0 :(得分:1)
而不是尝试在远程服务器上签出,而应该(在相同的后接收挂钩中)推送到那个远程服务器。
自Git 2.3.3和2.4.0以来,使用push-to-deploy,使用git服务器端的config receive.denyCurrentBranch = updateInstead
。
请注意,这种方法有一些注意事项。
- 您的服务器将包含一个
.git
目录,其中包含项目的完整历史记录。您可能希望确保无法向用户提供服务!- 在部署期间,用户可能会暂时遇到处于不一致状态的站点,旧版本的某些文件和新版本的其他文件,甚至是半写文件。如果这对您的项目来说是个问题,那么推送部署可能不适合您。
- 如果你的项目需要一个“构建”步骤,那么你必须明确地设置它,也许是通过githooks。