【问题标题】:How to manage two versions of an Android app in Mercurial如何在 Mercurial 中管理两个版本的 Android 应用程序
【发布时间】:2015-05-28 12:53:32
【问题描述】:

我正在使用 Mercurial(使用 TortoiseHG)来管理我的 Android 项目,并且由于该应用程序获得了具有不同包名称的并行品牌版本,因此最近不得不对其进行分支。

我做了一些研究并成功地分离了所有东西,但现在几天后我开始发现很难维护两个分支。 com.myapp.firstbranch 中的任何更改都需要手动转换为 com.myapp.secondbranch

更糟糕的是,我完全有理由怀疑会有更多的分支出现,这需要我在许多分支之间引入任何更改和错误修复。

Mercurial 和/或 Tortoisehg 是否为这种情况提供任何支持? 简单的合并不起作用,因为包名称不同(VCS 将所有内容视为单独的文件并放置两个版本的应用程序在一个文件夹中)。

理想的解决方案是一个工具,它允许我只同步选定文件的选定部分,而不考虑导入、包等,只需替换纯文本。

【问题讨论】:

  • 如果你要分离你的应用程序并修改文件结构——我暗示这是因为你提到了包装重命名——从概念上讲,它们是两个不同的东西。您始终可以使用 Meld 或 WinMerge 之类的合并工具或任何其他您想要合并文件的工具,但我不知道有任何 VCS 可以处理您提到的内容。
  • 我知道它们是分开的,而且情况变得更糟——一些资源和价值是不同的。这就是为什么简单的合并是不可能的,我需要一些文本级工具来同步它们。
  • 这听起来像是feature flags 比拥有多个分支更好的选择。长寿命的树枝无论怎么剪都是一件很痛苦的事。
  • 哦,这听起来很有希望,但是关于在 Android 上实现它的任何提示?我看不出它如何用于绕过多包问题:-(
  • 我建议不同的方法(我正在使用它)。将整个项目移动到单独的库中,然后使用单独的类作为这些项目中任何不同的数据提供者。在每个项目中扩展该类并使用特定的项目值对其进行初始化。

标签: android mercurial tortoisehg branching-and-merging


【解决方案1】:
  1. 我无法想象(请进一步解释),不同的包名称会如何干扰 Mercurial 分支。你在回购中有不同的树吗?或者在分支中重命名文件(无论如何,Mercurial 轨道重命名并且可以正确合并分支中重命名的文件)?
  2. 当我面临这样的任务(维护不同客户的分支,基于历史上的通用代码库)时,我完成了 MQ-patchset(针对客户特定更改的每个目标的补丁)和在变更集中使用通用代码的单个分支
  3. 您可以为您的存储库创建+定义不同的合并工具,这将根据不同的(您的)策略合并不同的文件,而不仅仅是 GIU-merger 中的交互式合并(请参阅internal:*mergetools例如)

添加

  1. 我会要求显示(至少部分)hg manifest 的分支(或只是工作目录的 ls)(只是因为我对包一无所知,它的结构和 Android 开发有共同点),但是,AFAICR,如果您在初始分支中有/firstbranch,在第二个分支中重命名为/secondbranch,Mercurial 将尊重分支合并中的这一更改。另一个想法是尽可能从版本控制中消除父树,并将创建适当的包树的任务转移到构建工具中

  2. 不,我有添加|更改|删除对象(客户品牌)的“琐碎”任务,但是,从我的 POV 来看,“所有导入、包关系等”在技术上只是代码中的更改(和可能的 - 树),哪些补丁可以容纳

  3. 自定义合并工具必须大部分是简单的手工脚本,其中包含最少的逻辑。尝试阅读 Wiki:Merge Tool Configuration(第 2 部分)和 Merge Tools 作为起点,this excellent example of creating own merge-tool 用于合并 .hgtags

【讨论】:

  • 1.分支项目时,我不得不将包从 com.company.firstbranch 重命名为 com.company.secondbranch。它分支很好,但我不能使用标准合并工具,它所做的只是创建目录com.company 和另外两个目录firstbranchsecondbranch
  • 2.您的任务是否包括更改每个分支的包名称。这很重要,因为所有导入、包关系等都会发生变化。
  • 3.这个听起来很有希望,你能详细说明在哪里可以找到这些吗?
猜你喜欢
  • 2017-05-09
  • 1970-01-01
  • 2018-09-28
  • 2011-07-21
  • 2021-03-06
  • 2012-03-29
  • 1970-01-01
  • 2011-09-14
  • 2022-12-24
相关资源
最近更新 更多