【问题标题】:Managing application for few clients管理少数客户的应用程序
【发布时间】:2016-12-07 12:52:50
【问题描述】:
我正在使用 git 开发和维护我的应用程序。
我有一个问题,因为我的应用程序正在使用 5 个客户端,每个客户端都有自己的配置,例如徽标、一些特殊功能、配置等...
现在我编写了新组件,需要将此组件添加到每个客户端实例中,我不知道如何正确执行。
现在每个客户都在不同的分支上,我知道这是一个糟糕的选择。
如果我需要更新应用程序,我需要将代码复制并粘贴到每个客户端并将其推送到 repo。
我知道它很弱但是如何正确地做到这一点?
【问题讨论】:
标签:
git
branch
maintenance
clients
【解决方案1】:
在密封基础之前,您可能不应该将应用程序分支到 5 个不同的分支。但是,如果它们没有偏离太远,那么您有三种可能性:
应用您的更改,创建补丁 (git diff > patch),重置(以便您可以签出)并将其应用到您的五个分支的头部 (git apply patch),
从master 分叉一个新分支,在那里应用更改,提交和git cherry-pick 在您的每个分支中提交(效果与1 相同),然后删除该额外分支,
将更改应用于master,然后将git rebase 应用到您的分支上。这样做的好处是编辑将是所有五个共同的单个提交。 See here 了解变基的实用介绍。
1 和 2 将新提交的独立副本放在五个分支历史记录的顶部。 3 次尝试在他们分叉之前挤压一个新的提交。后者的副作用是,从该日期开始的所有提交都必须重新重建,因为无法修改现有提交的父级。必须强制在 3 之后每个分支第一次推送到存储库。详细信息均在链接文档中进行了讨论。
请注意,如果您进行了一些与您想要更新的内容相冲突的更剧烈的更改,那么这三种方式将以不同的方式失败,最好做好准备。
在其默认设置中只会立即拒绝补丁,不做任何更改。您需要进一步调查它为什么不适用,或者使用相对安全的--reject(不过请先阅读手册)。
会用 <<<<<<< ======= >>>>>>> 装饰故障点,就像失败的 git merge 一样,您需要解决冲突并重新提交,或者中止操作(它给出你建议使用什么命令)。
会产生一些看起来很可怕的冲突消息,并且您可能会在途中更新多个提交。同样,git 会尽力为您提供帮助。
如果出现问题,您总是有 git reset --hard、git cherry-pick --abort 和 git rebase --abort 来帮助您。如果您觉得使用它们不太舒服,您还可以在更改之前复制每个分支的当前状态 (git branch backup),然后通过 git reset --hard backup 收回所有内容。