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

关于公司代码管理

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

    公司属于传统行业,有一个产品线,会卖给多个客户,之前代码都是 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   ·   实用小工具   ·   5710 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.