2015-05-04 67 views
1

我正在工作场所实施Gitlab,并将所有人转移到其上以更好地进行代码审查,与提交直接相关的问题管理以及与Pivotal跟踪器上的用户故事集成。使用'git checkout -f'在Gitlab中部署裸露的git仓库中的文件

我的当前设置的测试程序是这样的:

  1. 的Git与所有对我的PHP基于Web的应用程序中的代码裸回购在:在/ var /选择/ gitlab/git的数据/库/混帐/测试app.git

  2. 部署目录为:/无功/网络/测试应用

在Git的回购目录,我做了以下内容:

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

这就像一个魅力和所有的文件都可以在/ var/www/test-app按预期访问。

这里是我难住的地方。我希望Gitlab服务器仅托管Git裸回购站而不是部署目录。部署目录将托管在单独的服务器上。

有没有办法与GIT_WORK_TREE有不同的服务器设置?我试图把我的服务器的细节,如:

[email protected]:/var/www/test-app 

但没有骰子。

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

谢谢。

+0

gitlab服务器应该是gitlab服务器,没有别的。这听起来像你想建立一个持续的集成/构建服务器,它会在提交gitlab之后自动部署到你的登台服务器。 –

+0

是的,这正是我期待的。你对这件事有什么看法? – Kopty

+0

有很多CI服务器,比如Gitlab自己的CI,Jenkins,Teamcity等等。我们在这里设置了一个插件,让它看起来像一个Gitlab CI,它在commit上构建项目,运行测试和部署。 –

回答

1

而不是尝试在远端服务器上签出,而应该(在相同的post-receive挂钩中)推送到远端服务器。

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

  • 您的服务器中将包含项目的整个历史.git目录。您可能想要确保它不能提供给用户!
  • 在部署过程中,用户可能会偶尔遇到站点处于不一致状态,其中一些文件位于旧版本,其他文件位于新版本,甚至一半为文件。如果这对于您的项目来说是一个问题,则推送部署可能不适合您。
  • 如果您的项目需要“构建”步骤,那么您将不得不明确地设置,也许通过githooks。
+0

是的,我现在已经在我们现有的工作流程中运行了它,但是由于您指出的确切原因 - 我们的服务器包含一个不安全的.git目录,我们希望移除它。我的任务是确保不再是这种情况,这就是为什么我正在探索诸如此类的选项。 – Kopty