如何优雅地维护多个 release 的 git 分支 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
runningowl
V2EX    问与答

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

  •  
  •   runningowl 2022 年 6 月 27 日 2253 次点击
    这是一个创建于 1300 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    15 条回复    2022-06-27 09:47:57 +08:00
    msg7086
        1
    msg7086  
       2022 年 6 月 27 日   1
    有没有一种可能,放在配置文件里。
    HeapOverflow
        2
    HeapOverflow  
       2022 年 6 月 27 日 via iPhone
    这个难道不应该用配置文件吗….
    wanacry
        3
    wanacry  
       2022 年 6 月 27 日 via iPhone   1
    我的意思是:有没有有这么一种可能
    arch9999
        4
    arch9999  
       2022 年 6 月 27 日   1
    目前来说,你是错的,但是过一段时间之后,你会发现楼上几位是错的。
    runningowl
        5
    runningowl  
    OP
       2022 年 6 月 27 日
    额,谢谢,忘了说,是个安卓 app ,不上市场
    其实本来默认就是空的,让大家装好 app 自己配,然后客户觉得费事,老板就让给每个客户配好
    ktqFDx9m2Bvfq3y4
        6
    ktqFDx9m2Bvfq3y4  
       2022 年 6 月 27 日 via iPhone
    那其实你不需要不同分支啊,你只需要不同配置文件,每个客户打包使用不同的就行了。
    estk
        7
    estk  
       2022 年 6 月 27 日 via Android
    那就根据域名来区分,判断不同域名就连不同服务器地址
    estk
        8
    estk  
       2022 年 6 月 27 日 via Android
    @runningowl
    不好意思,那就根据包名连不同服务器
    onetown
        9
    onetown  
       2022 年 6 月 27 日   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 年 6 月 27 日
    @arch9999 #4 分支隔离配置是对的无论配置是代码还是配置文件,把配置全写一块代价就是完全泄密
    msg7086
        11
    msg7086  
       2022 年 6 月 27 日
    @dqzcwxb 分支隔离到最后不还在一个 git 库里么,泄密什么的有区别么。
    Harry
        12
    Harry  
       2022 年 6 月 27 日 via iPhone
    如果是后端应用,应该进来考虑使用“环境变量”或类似的方式处理。

    如果是安卓应用,楼上 @onetown 是正解。不同的渠道包也是这个方式来打。
    dzdh
        13
    dzdh  
       2022 年 6 月 27 日
    @runningowl #5

    启动时从服务器拉配置包传 package 参数啊
    maichael
        14
    maichael  
       2022 年 6 月 27 日
    CI/CD 配置好,只要不大幅度涉及业务逻辑层的改动,怎么搞都行。
    runningowl
        15
    runningowl  
    OP
       2022 年 6 月 27 日
    product flavor 好像不错,这就研究下,谢谢

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

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

    当然,所以,不管怎样,好像这个不是 git 应该管的事了?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2619 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:35 PVG 19:35 LAX 03:35 JFK 06:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86