V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
runningowl
V2EX  ›  问与答

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

  •  
  •   runningowl · Jun 27, 2022 · 2370 views
    This topic created in 1400 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    当然,所以,不管怎样,好像这个不是 git 应该管的事了?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5153 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 09:44 · PVG 17:44 · LAX 02:44 · JFK 05:44
    ♥ Do have faith in what you're doing.