2011-10-10 66 views
2

我想了解偶尔发布功能分支成预览分行的git的最佳方式定期进行预览。这是我的设置:发布一个特性分支在混帐

  1. 客户端请求功能。
  2. 我开发初始特征和发布预览/测试网站。
  3. 客户提供反馈。
  4. 我做出更多的改变。
  5. 跳到第3步几次。
  6. 客户端与功能配合很好
  7. 将单个提交的重新映射功能推送到生产站点。

注意几个不同的功能可以一次性开发,只有一个“预览”的网站,客户端可以看到所有的这些功能正在开发中。我目前的git工作流程。

git checkout -b new_feature 
...hack hack hack... 
git add . 
git commit -m "WIP" 
git checkout preview 
git merge new_feature 
... feedback and another feature got approved and merged with master ... 
git checkout new_feature 
git merge master 
... hack hack hack... 
git add . 
git commit -m "WIP" 
git checkout preview 
git merge new_feature 
... client approves work for release .... 
git checkout new_feature 
git rebase -i master 
... squash all commits except the first which I reword with a good description... 
git checkout master 
git merge new_feature 
git branch -d new_feature 
git checkout preview 
git merge master 
git checkout master 

所以最终的结果:

  1. 我能够开发它自己的独立分支和控制的功能,当它去生产。它也被卷起来作为一个不错的提交。
  2. 客户端可以看到该功能,因为我开发它,并提供反馈。他们还可以看到该功能以及我正在同时开发的其他功能。
  3. “预览”分支变得有点混乱,因为它得到既“WIP”承诺和最终重建基础提交。但我不介意,因为它只是为客户端预览,我可以定期删除分支,如果需要我可以重新创建。

我唯一的问题是,我似乎得到比我所期望的更多的冲突。我认为这是因为分期正在开发提交和最终提交。我也想知道是否有更好的方法来做到这一点?

+3

大约只是切换预览回购,这样什么它在new_feature分支上?那么你不需要一直合并。 –

+0

Preview将显示正在开发中的几种不同功能。所以我希望预览是所有在制品的合并。 –

回答

0

您的工作流程似乎很好,除非我不喜欢在与主设备合并前从主功能分支中压扁所有提交。

在我看来,这并没有增加任何价值,并且您失去了关于该功能演变的潜在重要信息。

当我合并时,我用git merge --no-ff new_feature。这保留了约一个特性分支的存在信息,以便一目了然,你就会知道哪些提交走进每一个特征:

git merge --no-ff

图片来源 - A successful Git branching model

+0

感谢您的建议。对我而言,重新组合可以让我减少许多不重要的事情,并且在历史中清楚地看到每个功能都添加了。对我而言,我宁愿看到: -------- 1。已实现的功能FOO -------- 比: -------- 1.启动功能富功能的foo 2.已恢复部分 3.忘记文件中提交 4.删除错误 5.终于完成功能foo 6.忘记X为功能foo --------- 只是似乎更清楚和可以理解。我想对我来说,所有这些小小的承诺都只是一项“正在进行中的工作”,对追踪并不重要。 –

+0

@Eric根据我的经验,当你的一个最终用户决定他们希望增加功能时,像“2.恢复功能foo部分”这样的提交是非常有用的。不管你为什么工作,没有任何一个正确的方式来使用git。 – dbyrne