V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iguoji
V2EX  ›  程序员

Git 多个分支分别对应不同网站,如何管理和更新?

  •  
  •   iguoji · 2017-11-07 17:15:53 +08:00 · 5495 次点击
    这是一个创建于 2583 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在主分支 Master 开发到一定阶段后,创建了 A、B、C 三个新分支

    四者对应着四个网站,都有相同和不同的地方

    有些相同的地方在更新好一个分支后,又需要依次推送到其他分支

    有什么解决办法吗?

    25 条回复    2017-11-08 16:57:29 +08:00
    azygote
        1
    azygote  
       2017-11-07 17:28:33 +08:00
    分支不是这么用的,你的需求可以考虑把整个系统模块化。
    shiina
        2
    shiina  
       2017-11-07 17:31:24 +08:00   ❤️ 1
    错误的分支使用方式😐
    vikeria
        3
    vikeria  
       2017-11-07 17:31:38 +08:00
    楼上加一
    secends
        4
    secends  
       2017-11-07 17:32:43 +08:00
    参考这个命令 git push origin HEAD:master, 看 git help push
    iguoji
        5
    iguoji  
    OP
       2017-11-07 17:38:42 +08:00
    @azygote
    @shiina
    @vikeria
    @secends

    没懂,求指点。
    azygote
        6
    azygote  
       2017-11-07 17:42:41 +08:00 via iPhone
    @iguoji 把整个系统模块化,四个网站可以共用一部分模块,然后四个网站不同的功能用分别开发不同的模块(同一分支下)。如果做不到那还是老老实实分成 4 个 git 仓库吧。
    flowci
        7
    flowci  
       2017-11-07 17:47:02 +08:00
    一个项目一个仓库,一个项目多个分支。
    cxbig
        8
    cxbig  
       2017-11-07 17:47:56 +08:00
    最好是遵循 Git Flow,且一个项目一个 repo。
    共用的部分做成独立模块,用 submodule、cherry-pick 或各语言的包管理器加载
    mooncakejs
        9
    mooncakejs  
       2017-11-07 17:49:26 +08:00
    如果有不涉及二次开发的公共代码模块,开 4 个项目,用 submodule
    4 个项目可以自己选择公共项目的版本,要升级就 update submodule。
    开 4 个分支也行,新功能也开分支,然后分别合并到二次开发版本。
    ryd994
        10
    ryd994  
       2017-11-07 18:34:27 +08:00 via Android
    理论上可以在 master 改了再 cherry pick
    但是长远来讲可能会很复杂也很危险
    还是 submodule 吧,现在跑还来得及
    l8mEQ331
        11
    l8mEQ331  
       2017-11-07 19:14:05 +08:00
    我现在管理的公司的一个 MTK rom 也是这种情况,有多个版本, 每个版本都是一个分支。每次加一些功能或者改东西,有可能是所有版本都要加,有可能是只是某些版本加。现在的做法是用 cherry-pick 来手动的每个版本加上新的功能。
    yidinghe
        12
    yidinghe  
       2017-11-07 20:40:17 +08:00
    每个分支一个远程啊……那敲命令太复杂了,装 SourceTree 之类的图形客户端吧。
    satanandroid
        13
    satanandroid  
       2017-11-07 20:54:42 +08:00
    公共部分 用 submodule 啊~
    xem
        14
    xem  
       2017-11-07 23:08:14 +08:00
    把公共模块单独建立项目,然后再把各个网站单独建立项目,包含各个公共模块项目
    SoloCompany
        15
    SoloCompany  
       2017-11-08 00:51:20 +08:00
    两个选择
    1. 模块化,提取公共抽象为 1~n 个模块( repo ),其余部分每个网站一个 repo
    2. 实在不适合模块化,那么就让 4 个网站共用一套代码,通过 domain name 或配置来进行差异化渲染
    colorwin
        16
    colorwin  
       2017-11-08 01:40:33 +08:00 via Android
    可能不是最好的方法但比较简单。从 master 分支切出一个 common 分支,开发好功能好后 merge 到需要该功能的分支
    66beta
        17
    66beta  
       2017-11-08 09:02:25 +08:00
    你的情况,算是多个 master 分支...
    可以把公共代码抽出来放一个文件夹,4 个网站 4 个文件夹,改什么就拉一个 feature 分支,改完合回去,互相不影响

    跟你类似的业务情况
    vue-cli 分网站(渠道),多页面打包+vue-router,共享基础 JS 库和组件库
    打包完后:
    a.html
    b.html
    c.html
    d.html
    static(文件夹)
    asuraa
        18
    asuraa  
       2017-11-08 09:11:07 +08:00
    yuhr123
        19
    yuhr123  
       2017-11-08 09:16:35 +08:00
    一个站点一个仓库! git 又不是租来的,楼主怎么还舍不得用啊。

    小规模多人协作:所有人 dev 分支开发,PR 合并到主仓库 master。
    独立开发:本地 master 开发,测试无误 push 到仓库。

    本人喜欢拿分支做临时性实验,用后立即销毁,不愿意管理分支,主要是因为懒。
    allce231
        20
    allce231  
       2017-11-08 09:53:44 +08:00
    你们说开 4 个仓库的脑袋被门夹了?

    他们有的需求可能是 4 个分支都要改的,那这样可以在 master 改了合并过去,4 个仓库的每个仓库改一次吗?
    crazystory
        21
    crazystory  
       2017-11-08 10:45:07 +08:00
    4 个不同项目放一个仓库才是脑袋被门夹了
    crazystory
        22
    crazystory  
       2017-11-08 10:46:10 +08:00
    何况公共部分可以用 submodule 只改一个仓库就行了
    zjsxwc
        23
    zjsxwc  
       2017-11-08 13:16:31 +08:00
    可以同一个分支搞 4 个入口对应 4 个网站不就解决楼主的问题了吗, 其实 4 个网站就是 4 个 feature, 合并后每个分支也都应该有这个 4 个 feature
    i2000s
        24
    i2000s  
       2017-11-08 15:58:28 +08:00
    推荐用不同的库做不同的网站,各个库可以使用同一个域名。
    比如我的网站主库在 github.com/i2000s/i2000s.github.io,英文页面在 github.com/i2000s/en,中文网站在 github.com/i2000s/cn。他们共用一个域名,应为站点在 /en 目录,中文的在/ cn 目录。各个站点间实际上都是来源于主站的代码,理论上可以 fork,但是我只是添加了主站地址作为各个站点的 remote,这样核心站点代码有更新后,可以方便 push 到其他站点。仅供参考。
    yuriko
        25
    yuriko  
       2017-11-08 16:57:29 +08:00
    1.建议共用代码,通过不同网站的配置去决定怎么运作
    2.实在要分开处理,那么 git 命令的 origin 字段就是指的远程主机,除去 origin 给每个主机定一个对应的别名,操作的时候带上就能 push 到对应的机器了
    由于 git 本质是个分布式代码仓,三台主机各不相同,再加上本地开发困难,如果不另设一个服务器汇总做基准,估计会乱爆炸。
    3.模块化,每个模块开一个仓,不同站点用不同仓的组合。Google 做 Android 的时候用的工具叫 repo,每个 repo 仓可以根据需要组合对应的 git 仓,比如 repoA ( gitA、gitB ),repoB ( gitA、gitC )这样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1288 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:00 · PVG 02:00 · LAX 10:00 · JFK 13:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.