代码之家  ›  专栏  ›  技术社区  ›  polyglot

如何维护(大部分)只有少量差异的并行分支

  •  24
  • polyglot  · 技术社区  · 16 年前

    脚本:

    所以基本上我有几个几乎相同的分支,除了几个提交,大多数提交都需要在所有分支中。

    问题是: 如果有,推荐的git工作流是什么?或者我的场景有更好的设置(不使用多个分支?)吗?

    [我尝试了樱桃采摘,但这涉及到相当多的工作,更不用说这里的所有重复提交以及保持分支同步的噩梦了。]

    3 回复  |  直到 12 年前
        1
  •  19
  •   zag    8 年前

    对于这种特殊的情况,在一个分支中有许多通用文件,而每个环境中只有少数特定的配置文件。。。我们不将配置文件存储在Git中。完全

    我们经营商店 所述配置文件的数量,加上所有特定的每环境值,再加上一个脚本,该脚本能够用正确的值替换模板文件中的变量(检测当前平台)

    这样,我们就不需要只为这些文件创建分支。


    管理此类文件(具有特定于平台的内容)的另一个好方法是通过 git attribute filter driver (另见 Pro Git book ).

    clean 命令和命令 smudge 命令,其中任何一个都可以不指定。
    在上面 checkout 污迹
    清洁的

    这样,smudge引用的脚本(用Git管理)可以用平台特定的值替换所有变量,而clean脚本将其内容恢复到未触及的配置文件中。

    http://git-scm.com/figures/18333fig0702-tn.png

    主要思想仍然是:避免仅为这种并行进化创建分支。

        2
  •  9
  •   Greg Hewgill    16 年前

    一种方法是为每个环境保留一个分支,外加一个对所有环境都通用的“主”分支。每当您更改主分支并希望将其拉入另一个系统时,请执行以下操作:

    git pull
    git checkout local
    git rebase master
    

    这将根据“主”的当前状态重写“本地”(针对此特定环境)上的当前更改。

    你需要注意的手动事项是你在哪里提交了你想要做的更改。如果它是系统本地的,则将其提交到该系统的“本地”分支,否则将其提交到“主”并将其推送到公共存储库。

        3
  •  1
  •   Craig McQueen Dr. Watson    16 年前

    好问题。尽管你说:

    我会将特定于平台或特定于变体的项目与主代码放在同一个分支中,但放在该平台/变体的单独目录中。关键是将特定于平台的材料隔离到尽可能小的区域(即避免 ifdef

    例如。:

    /
    +--common
    +--linux
    +--cygwin
    +--windows
    +--mac
    

    在这方面,它简化了您的工作流程,因此您可以更自由地将分支用于其他更有趣的目的。