2011-03-07 66 views
2

我已经习惯使用Github作为备份或中央存储库,并在本地进行开发和测试。Git远程测试

现在我有一个远程测试机器,并希望能够推送到远程的本地提交,使得远程工作目录更新,允许我对内容运行测试。

1)我发现设置遥控器的大多数指令是使用--bare init。据我所知,这意味着遥控器缺少工作目录并接受推送。在尝试推送时,设置不带--bare的遥控器会触发错误。我如何完成上述工作流程?

2)这个工作流程甚至是一个好主意吗?除了裸回购之外,我是否应该在远程机器上安装测试回购站。我把我从开发推到裸回购,然后,当我准备测试时,我从裸回购进入测试回购。

万一它很重要,我问一个Rails项目,但我没有标记这个问题,因为我不明白为什么会这样。

回答

4

我建议去一个裸仓库进行推送,第二个仓库会从测试运行的地方抽取它。这会更容易理解,而且当您决定划分测试环境并重新创建测试环境时,您不必小心。如果它们在同一台服务器上,测试回购可以为中央测试回放设置“备用”,因此对象不会被存储两次(使用git clone --shared创建)。

即使使用此设置,您也可以轻松地自动运行测试。只需在中央存储库中安装post-receive或post-update钩子,即可运行测试。在git源代码中甚至有现成的实现contrib/continuous,您可以根据自己的需求进行调整。

这并不是说您无法设置工作目录的推送库。 Git不允许你推送到签出的分支(因为它不知道如何在推送过程中更新它,以后不知道如何更新),但是可以通过使用“分离的HEAD”来解决这个问题。但是,如果您决定重新构建测试环境,那么您会冒着意外删除重要数据的风险。

0

我们在我们的项目中做的方式是为每个测试服务器(staging,test,qa)都有一个单独的分支。当您想将某些更改部署到某个服务器时,只需将它们合并到该服务器的特定分支中,然后使用Capistrano进行部署即可。

1

在大多数情况下,您不想推入非裸仓库。原因是,推动只更新历史,而不是工作目录;这在git FAQ中有解释。

所以是的,你的第二个建议就是要走的路。你甚至可以使用post-update hook来自动更新你的测试库