【发布时间】:2012-10-05 09:15:38
【问题描述】:
我有一个网站的 git 存储库,其中 master 分支代表生产代码。我被要求设置网站的“沙盒”版本,供系统的潜在用户进行试验,这样他们就不必在生产系统中这样做。
由于站点的沙盒版本需要明确标记,并且禁用了某些功能,因此我创建了一个沙盒分支(基于 master)并在那里进行了一些提交以添加警告消息等。
然后我将两个分支都推送到上游,并在 Web 服务器上签出了单独目录中的每个分支 - 一个用于生产,一个用于沙箱。
这很好,但是当我想编写更多代码时问题就来了。一旦我将代码提交到主分支,它将在生产系统中更新,但沙箱不会看到新代码。因此,我将沙箱分支重新设置为 master,因此沙箱的提交始终位于生产之上。但是当然,一旦我这样做了,我就不能再将沙箱分支推向上游,因为它不再是快进。我必须登录 git 服务器,切换分支,进行软重置,然后重做推送。
用 git 肯定有更好的方法吗?我真正需要的是在当前签出的任何分支之上持续应用一些提交的某种方式。
【问题讨论】:
-
你尝试过任何提交挂钩吗?
-
@J-16SDiZ:不,我希望我可以使用 git 的内置功能来做到这一点,所以如果存储库移动,我不必记得复制挂钩。
-
沙盒服务器上的挂钩,我的意思是。你还没有一些 CI 基础设施吗?沙盒如何更新?
-
@J-16SDiZ:我明白,但我的意思是如果我必须将 Web 文件移动到其他地方,我希望我可以在新位置执行 'git clone' 而不必记住再次设置挂钩。钩子非常适合自动化手动任务(如果钩子失败,您可以手动执行它们),但我不喜欢因为钩子失败而丢失代码的想法!
-
您知道您可以使用
git push remote +branch进行非快进推送吗?然而,接收 git 存储库可以配置为拒绝这些。