使用Git更新生产服务器

时间:2011-03-23 08:34:12

标签: git deployment merge

我们的团队最近迁移到git。

我们的生产Web应用程序服务器对代码进行了一些小改动

  • 特定于此installaton的超热修补程序
  • 针对那些无法在我们的测试环境中重现的错误的一些调试声明

我认为,我们不能在服务器回购中提交它们。

当我们svn update合并已更改的文件或未合并时。现在

 git stash; git pull; git stash pop

为我做了诀窍

如何在git stash pop导致冲突时自动检测这些案例

打破生产工作副本?

我想发送邮件手动解决这些案例

之前

,如be advised, pull cancelled (conflicts)

2 个答案:

答案 0 :(得分:5)

我不想承担在生产服务器上发生合并冲突的风险。这听起来对我来说都是错的。

从您的帖子中,我可以推断您在生产中遇到无法在测试/分期中重现的问题。为了帮助检测这些,您在应用程序中添加了其他工具。这是一种常见的方法,尽管你应该尝试在Q& A中重现失败(通常它在长期利益方面值得初见)。

我要推断的下一件事是你直接在生产服务器上操作代码。你永远不应该这样做。您已经在使用git,它为您提供了很好的灵活性,可以管理您的问题,为您的问题提供更智能的解决方案。 这就是我想要的:

  1. 从服务器获取这些更改(创建补丁或其他内容)
  2. 将这些更改放入您的dev repo中的本地分支。
  3. 每当你改变你的主人头顶上的本地分支的东西时。在本地解决冲突。
  4. 由于您已使用历史记录进行模拟,因此需要强制推送到生产存储库,有关详细信息,请参阅How do I push amended commit to the remote Git repository?
  5. 您是否也不想“产品化”您添加的其他日志记录,这也是您的非功能性需求的一部分。

答案 1 :(得分:2)

我宁愿:

  • 在git存储库和Web文件之间进行了彻底的分离:
  • 不直接在工作树目录中工作(存储问题,以便为拉动操作提供干净的工作树)

最好是推送到bare repo with a post-update hook,并在单独的Git仓库中工作,在那里你可以做那些你需要的东西。


有人说,我宁愿尝试解决临时分支中的任何冲突(来自git stash man page

 git branch <branchname> [<stash>]
  

从最初创建<branchname>的提交开始创建并签出名为<stash>的新分支,将<stash>中记录的更改应用于新的工作树和索引。
  如果成功,并且<stash>stash@{<revision>}形式的引用,则会删除<stash>。如果没有给出<stash>,则应用最新的。{/ p>      

如果运行git stash save的分支已经发生了足够的变化,git stash apply因冲突而失败,那么这很有用。由于存储是在运行git stash时HEAD的提交之上应用的,因此它会恢复原始存储状态而不会发生冲突。

一旦冲突得到解决,该分支就可以合并回主人。