V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
runningowl
V2EX  ›  问与答

如何优雅地维护多个 release 的 git 分支

  •  
  •   runningowl · 2022-06-27 05:52:59 +08:00 · 1839 次点击
    这是一个创建于 900 天前的主题,其中的信息可能已经有所发展或是发生改变。

    多个 release 不是不同版本,而是不同客户
    比如,main 程序里连的服务器地址不同,总之区别就是一两行字符串的值

    现在我们做的是,在一个分支开发(可能并行开几个 feature 分支)
    然后完成后 merge 到其他几个 release 分支各自发布
    但如果几个客户还好说,如果以后客户多了,这 git 岂不是要开花了
    不知道各位有没有什么好的实践分享下

    15 条回复    2022-06-27 09:47:57 +08:00
    msg7086
        1
    msg7086  
       2022-06-27 06:23:11 +08:00   ❤️ 1
    有没有一种可能,放在配置文件里。
    HeapOverflow
        2
    HeapOverflow  
       2022-06-27 07:25:34 +08:00 via iPhone
    这个难道不应该用配置文件吗….
    wanacry
        3
    wanacry  
       2022-06-27 07:27:24 +08:00 via iPhone   ❤️ 1
    我的意思是:有没有有这么一种可能🤔
    arch9999
        4
    arch9999  
       2022-06-27 07:37:38 +08:00   ❤️ 1
    目前来说,你是错的,但是过一段时间之后,你会发现楼上几位是错的。
    runningowl
        5
    runningowl  
    OP
       2022-06-27 08:03:46 +08:00
    额,谢谢,忘了说,是个安卓 app ,不上市场
    其实本来默认就是空的,让大家装好 app 自己配,然后客户觉得费事,老板就让给每个客户配好
    Chad0000
        6
    Chad0000  
       2022-06-27 08:18:29 +08:00 via iPhone
    那其实你不需要不同分支啊,你只需要不同配置文件,每个客户打包使用不同的就行了。
    estk
        7
    estk  
       2022-06-27 08:20:28 +08:00 via Android
    那就根据域名来区分,判断不同域名就连不同服务器地址
    estk
        8
    estk  
       2022-06-27 08:20:54 +08:00 via Android
    @runningowl
    不好意思,那就根据包名连不同服务器
    onetown
        9
    onetown  
       2022-06-27 09:06:43 +08:00   ❤️ 1
    Android 可以在 build 里设置 product flavor , 你可以根据不同的 flavor 来设置资源文件里的值, 你可以搜索 Android product flavor 相关的关键字, 不知道这个是不是 OP 想要的

    比如

    productFlavors {
    app1 {
    resValue "string", "app_name", "App 1"
    resValue "string", "api_url", "app1.xxx.com/v1/api"
    }

    app2 {
    resValue "string", "app_name", "App 2"
    resValue "string", "api_url", "app2.xxx.com/v1/api"
    }
    }

    也可以根据 Flavor 产生不同的包名

    applicationVariants.all {
    variant ->
    variant.outputs.all { output ->
    def SEP = "_"
    def flavor = variant.productFlavors[0].name
    def buildType = variant.buildType.name
    def version = variant.versionName
    def date = new Date();
    def formattedDate = date.format('yyMMdd_HHmm')
    def apkName = "android_" + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
    outputFileName = new File(apkName)
    }
    }
    dqzcwxb
        10
    dqzcwxb  
       2022-06-27 09:24:25 +08:00
    @arch9999 #4 分支隔离配置是对的无论配置是代码还是配置文件,把配置全写一块代价就是完全泄密
    msg7086
        11
    msg7086  
       2022-06-27 09:34:40 +08:00
    @dqzcwxb 分支隔离到最后不还在一个 git 库里么,泄密什么的有区别么。
    Harry
        12
    Harry  
       2022-06-27 09:38:45 +08:00 via iPhone
    如果是后端应用,应该进来考虑使用“环境变量”或类似的方式处理。

    如果是安卓应用,楼上 @onetown 是正解。不同的渠道包也是这个方式来打。
    dzdh
        13
    dzdh  
       2022-06-27 09:43:24 +08:00
    @runningowl #5

    启动时从服务器拉配置包传 package 参数啊
    maichael
        14
    maichael  
       2022-06-27 09:44:30 +08:00
    CI/CD 配置好,只要不大幅度涉及业务逻辑层的改动,怎么搞都行。
    runningowl
        15
    runningowl  
    OP
       2022-06-27 09:47:57 +08:00
    product flavor 好像不错,这就研究下,谢谢

    @estk 但我们用的一个名字丢给不同客户,onetown 提供的思路可以试试,应该就有不同包名和对应连接了

    @dqzcwxb 因为都是自己维护,而且只是个服务器地址,应该没有泄密问题

    当然,所以,不管怎样,好像这个不是 git 应该管的事了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:07 · PVG 09:07 · LAX 17:07 · JFK 20:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.