关于公司代码管理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
saigo
V2EX    程序员

关于公司代码管理

  •  
  •   saigo 2022-08-17 11:21:31 +08:00 4382 次点击
    这是一个创建于 1160 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司属于传统行业,有一个产品线,会卖给多个客户,之前代码都是 svn 管理。新签一个客户,就把一个项目复制过来,如果其他项目有新加功能,也是人肉是复制粘贴过来。现在想减少代码同步的消耗,使用 git 来管理,公用代码用一个仓库,客户项目从公用代码库 fork 过来,这样既可以把代码合并到公用代码库,也可以更新其他项目提交到公用代码库的代码。这种方法暂时想到的问题是:

    1. 对程序员要求变高,需要学会用 git ,抽象代码,提炼出公用功能
    2. 对代码合并审核要严格

    请问大家有没有比较好的实践。

    20 条回复    2022-08-17 18:28:38 +08:00
    anonymousar
        1
    anonymousar  
       2022-08-17 11:25:55 +08:00
    1.用 git 哪里要求高 不是有手就行?
    2. 代码审 he 是看人的 跟工具没关系
    Mithril
        2
    Mithril  
       2022-08-17 11:32:04 +08:00
    这和 SVN 有什么区别?你 SVN 上新客户项目开分支,代码分支合并不是一样吗?
    按你目前的需求来说,用不上 Git 的分布式优点,又缺了 SVN 的严格权限管理,还徒增成本,没看出来任何必要更换 Git 。
    继续用 SVN ,改一下使用习惯就好了。
    qakito
        3
    qakito  
       2022-08-17 11:32:59 +08:00
    不想迁移 git 的话,也可以用类似 git submodule 那种

    每个模块有自己的 trunk/branch
    整个项目以类似 csv 的方式保存

    例如 project trunk
    name. branch. revision URL
    moduleA trunk LATEST. svn://xxxx/moduleA/TRUNK
    moduleB. trunk. LATEST. svn://xxxx/moduleB/TRUNK

    project.branchA
    name. branch. revision URL
    moduleA branchA 1000. svn://xxxx/moduleA/BRANCHES/branchA
    moduleB. TRUNK 900 svn://xxxx/moduleB/TRUNK
    liuzhaowei55
        4
    liuzhaowei55  
       2022-08-17 11:34:09 +08:00 via iPhone
    vcs 管理工具的改变解决不了你的问题,考虑是不是能把新功能作为 vendor 引入,避免代码的直接引入
    dzdh
        5
    dzdh  
       2022-08-17 11:34:16 +08:00
    我理解 saas ?

    那不公用一套代码嘛
    murmur
        6
    murmur  
       2022-08-17 11:41:46 +08:00
    svn 没啥问题,git 适用于远程撕逼,简单点说人越多撕逼越激烈 git 越能体现出价值

    没有撕逼的 git=svn ,直接下最新代码,填写提交信息,提交推送二合一点击发送,有的时候自己负责一个模块 conflict 都遇不到
    neptuno
        7
    neptuno  
       2022-08-17 12:09:04 +08:00
    怎么感觉之前看过一模一样的帖子,,,这个世界出 bug 了吗
    nothingistrue
        8
    nothingistrue  
       2022-08-17 12:19:47 +08:00
    这是系统架构跟开发过程的事,跟代码仓库无关。在你们现在这种系统架构下,各项目实质上是没有相互关系的,复制粘贴代码是唯一有效的手段,强行合并代码,只会做无用功甚至反向功。
    reter
        9
    reter  
       2022-08-17 12:51:04 +08:00 via Android
    这样是不是搞插件化会是更好的选择。每个插件独立维护,允许内置,允许覆盖更新。当然要怎么设计插件系统是个大问题。
    bk201
        10
    bk201  
       2022-08-17 12:55:33 +08:00
    没有搞明白,svn 为啥一定要复制代码。svn 不也有分支么。
    zhuweiyou
        11
    zhuweiyou  
       2022-08-17 12:57:07 +08:00
    saas ?

    以我的经验来说, 就算你用 git submodule 或者 提取公共依赖的方式, 也解决不了客户个性化的需求.
    sutra
        12
    sutra  
       2022-08-17 13:10:49 +08:00 via iPhone
    和代码管理没多大关系吧,主要还是产品级别的模块化。
    wupher
        13
    wupher  
       2022-08-17 13:17:29 +08:00
    这个不叫代码管理。

    正常应该按分支管理。

    为了鼓励代码复用和整合,monorepo 也开始在大公司内开始流行。 可以去 wiki 上看一下:

    https://en.wikipedia.org/wiki/Monorepo
    xaplux
        14
    xaplux  
       2022-08-17 13:19:22 +08:00
    一般这种项目,要分基线功能和定制化功能,部分定制化功能可能会沉淀到基线,fork 方式要好一些,但是根据经验代码回合的难度一般很大,特别是多个客户定制同时进行时
    wangtian2020
        15
    wangtian2020  
       2022-08-17 13:33:33 +08:00
    git 命令行我一个都不会,都是用 sourcetree 图形化操作分支
    svn 我从来没学过也不会,一开始学的就是 git
    zilongzixue
        16
    zilongzixue  
       2022-08-17 13:45:57 +08:00
    svn 也有代码分支,切一个分支不就行了
    wu67
        17
    wu67  
       2022-08-17 13:46:55 +08:00
    同#15.
    你可以把 git 用出创造世界、万物调控的感觉, 但是我只用它来同步代码. 理清你的需求思路、确定使用场景, 然后才是选择工具
    saigo
        18
    saigo  
    OP
       2022-08-17 13:51:03 +08:00
    @xaplux 是的,现在就是多个客户的项目同时搞,定制内容还多,但是业务线内很多大的流程是通用的,看评论还是通过架构去优化了。
    n0th1ng
        19
    n0th1ng  
       2022-08-17 13:54:56 +08:00
    和我们公司差不多。我来的时候用的 CVS ,后来迁移到了 Git
    我们公司卖产品主要靠定制。每来一个定制,就从最新标准版开一个分支,同时用 worktree 把这个分支签出到指定目录,这样就不用频繁在分支直接切换。

    使用分支比 fork 出多个版本库好管理
    liubaicai
        20
    liubaicai  
       2022-08-17 18:28:38 +08:00
    1.svn 也能分支
    2.git 哪里要求高
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5778 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 03:08 PVG 11:08 LAX 20:08 JFK 23:08
    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