如何在2台服务器上使用一个git repo:生产和testing?

我们在testing服务器上有一个git仓库(我们称之为test1)。 存储库非常简单,只需掌握没有分支或任何东西。 这个回购的目标是跟踪/ etc / puppet及其所有子文件夹的变化。 它通常是干净的,并与头同步。

现在我们想把test1:/ etc / puppet中的所有东西都复制到生产服务器(我们称之为prod1),同时在两台机器之间保持适当的git工作stream程。 每当test1的变化准备好生产,我们想用git把它们从test1推到prod1。 这里的目标是能够快速恢复prod1上的更改,如果有任何事情发生中断。

这是迄今为止我所拥有的:

  1. 在test1:/opt/puppet.git上设置一个纯粹的git repo(git init –bare)来充当中间服务器。
  2. 将数据从test1:/ etc / puppet推送到裸机。
  3. 在prod1上,在/ etc / puppet中创build一个新的回购
  4. 将test1:/opt/puppet.git裸加到prod1:/ etc / puppet的远端
  5. 将主数据从test1拖到prod1,只要我们想要将更改应用到生产。

你怎么看? 我们应该继续使用一个主分支,还是需要创build一个新的分支? 如果我们创builddevel分支,那么我们如何将它与新创build的裸回购一起使用?

如果我总结一下你的请求,你想要的是build立一个具有1个git服务器的架构,它接收用户的所有推送,并在准备就绪时自动推送。

例如,基于gerrit review系统的架构完全是这样做的。 工作stream程如下:

  1. 从产品服务器Git拉
  2. 你在本地更换吗?
  3. Git推动testing服务器(总是在专门的分支)
  4. 分配审查者的提交,并添加额外的钩子启动例如对jenkins烟雾testing(在安装过程中添加哈克)。
  5. 当评审人员已经接受了代码并且jenkins烟雾testing可以的话,如果主人仍然可以进行微小的合并,那么通过gerrit自动完成推送。

所以这里的优点是,没有人(如果configuration合适的话)可以在没有最less的审查和基本testing的情况下推动主人。 所以你从掌握分支(几乎)总是干净。

其实我已经自己整理出来了。 经过一些testing之后,我在test1上创build了一个中间裸Git回购(git init –bare)。 这将作为一种git服务器,将会接收并推送提交到test1 + prod1回购。

为了做到这一点,我做了以下几点: 在test1机器上: 1. mkdir /opt/puppet.git 2. cd /opt/puppet.git 3. git init –bare 4. cd / etc / puppet(其中当前的git回购与实际的代码位于)5. useradd git && passwd git(允许从远程主机推/拉)6. git远程添加起源git @ test1:/opt/puppet.git 7. git推起源 – 所有我现在有我所有的代码存储在光秃秃的回购在/opt/puppet.git在prod1 1.光盘/ etc 2. git的克隆git @ test1:/opt/puppet.git 3.如果我想拉最新的变化:git pull