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

公司从 SVN 切换到 Git 的那些坑

  •  1
     
  •   villivateur · 2021-12-03 13:29:15 +08:00 · 8267 次点击
    这是一个创建于 1086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了实现代码检视( Pull Request )这个功能,公司从 SVN 切换到了 Git ,但是不少人遇到了下面的问题:

    1. 没有理解 Git 的工作区、暂存区、仓库区、远端之间的关系,用 SVN 的思维去使用 Git ,比如会通过删除工作区文件、再拉取代码这种方式来回退代码。
    2. 在修改工作区文件后,没有 commit 或者 stash ,就 pull 代码,导致提示冲突,因为不熟练所以不知道如何解决。
    3. 之前 SVN 仓库中有很多需要经常修改的大二进制文件,初期迁移的时候没有用 LFS 管理,导致 Git 仓库庞大,clone 要花很长时间。
    4. 使用 LFS 后,因为各个用户终端配置不一样,可能有的人没有装 LFS ,提交后,其他人再 pull ,会出现很多奇怪的问题。

    感觉从 SVN 切换到 Git ,还是要慎重,至少要培训熟练。

    第 1 条附言  ·  2021-12-03 14:09:05 +08:00
    另外我感觉,在没有熟悉 GIit 之前,不要用各种 Git 插件或者第三方工具,不然出了错都不知道啥原因,也不了解原理,应该都用命令行。
    68 条回复    2021-12-21 12:11:36 +08:00
    haochen2
        1
    haochen2  
       2021-12-03 13:48:51 +08:00   ❤️ 1
    git 应该是一个合格开发人员最基本的技能了吧,对 pull 、push ,merge ,rebase 等等不熟可以在 github 上建个仓库练一练
    VeryZero
        2
    VeryZero  
       2021-12-03 13:50:01 +08:00
    统一培训很重要
    wdwwtzy
        3
    wdwwtzy  
       2021-12-03 13:52:40 +08:00   ❤️ 14
    2021 年了,git 应该是基本技能了,不会的开除好了 🙂
    JeepLi
        4
    JeepLi  
       2021-12-03 13:54:22 +08:00
    公司工具这么落伍,赶紧离职吧
    lixile
        5
    lixile  
       2021-12-03 13:55:08 +08:00   ❤️ 2
    1.理解问题无法解决 多用多学习 不要停留在 SVN 基础上
    2.及时提交 及时 commit 及时 push 及时 pull ,流程上注意区分开发分支,release 分支,个人分支。多看看 git flow 或者说叫 git 工作流
    3. git 大文件存储和二级制文件跟踪是不太好,建议重新迁移洗仓,写好通用.gitignore ,话说你们没配置管理的人吗
    4.研发环境统一话 建议采用编写通用工具安装脚本,毕竟很多开发 终究只是普通开发罢了 ,不关注工具,不关注流程,不关注代码仓本身也是交付件这回事
    kop1989
        6
    kop1989  
       2021-12-03 13:59:33 +08:00
    其实从文件管理角度讲,SVN 和 Git 在逻辑上没有区别。
    区别只在于本机的 Git 仓库和 Git server 的同步(推送、拉取)上。这块是 svn 没有的逻辑。

    如果想明白了这点,绝大多数智商正常的人都能熟练的从 SVN 的使用习惯迁移到 Git 。
    kop1989
        7
    kop1989  
       2021-12-03 14:01:23 +08:00   ❤️ 3
    还有就是 SVN 和 Git 是两种不同需求的产物,没有“先进”和“落伍”。
    murmur
        8
    murmur  
       2021-12-03 14:05:59 +08:00
    不习惯 git 装个图形客户端不行么,冲突了无外乎用你的,用我的,自己合完提交一个新的
    rm0gang0rf
        9
    rm0gang0rf  
       2021-12-03 14:07:47 +08:00
    不会 git 的飘过~基本的 pull 、push ,merge ,rebase..可以
    pengtdyd
        10
    pengtdyd  
       2021-12-03 14:08:06 +08:00   ❤️ 1
    没有系统的培训,出问题不是很正常吗
    xlsepiphone
        11
    xlsepiphone  
       2021-12-03 14:10:10 +08:00
    git 的图形化工具除了在解决冲突或者 diff 的时候挺方便的,其余的我觉得都没有命令行方便。
    kop1989
        12
    kop1989  
       2021-12-03 14:15:15 +08:00
    针对 append:不太理解为何第三方工具会导致“出了错都不知道啥原因,也不了解原理”。
    1 、第三方工具的操作,只是 git 命令的图形化。
    2 、第三方工具也会把他进行的操作输出。
    3 、第三方工具会自动根据场景提示接下来可能的操作以及其结果。出错的可能性反而更低。
    murmur
        13
    murmur  
       2021-12-03 14:15:28 +08:00
    @xlsepiphone 那可是乱说,提交的时候旁边显示下改动是基本功能,你命令行怎么做到点一个文件看一下哪里改了

    我习惯提交前最终确认一下,有时候我就发现按快捷键了但是快捷键没生效,倒是什么 C 啊 V 啊 F 啊都写到代码里去了。。
    murmur
        14
    murmur  
       2021-12-03 14:16:50 +08:00
    图形化操作:暂存所有 立即推送到 origin/master 提交 完事了,跟 svn 没区别
    gengchun
        15
    gengchun  
       2021-12-03 14:22:02 +08:00
    @JeepLi 一般来说,市场和生产资料比生产工具重要。

    软件开发培训和教程,几乎都是在教怎么拿着屠龙刀杀鸡。大部分公司的实际开发流程,其实也用不到太多 git 的特性。

    现在换 git 还是有点必要,主要是现在市场上配套的 CI/CD 和其它工作流工具都是基于 git 的,不切到 git ,后面很多时髦的东西就没有理由买了。
    quanjw
        16
    quanjw  
       2021-12-03 14:29:50 +08:00
    个人理解:svn 只有一个主干,git 可以有 master 、test 、dev 分支。人少随便用哪个都行,多人还是 git
    xmsz
        17
    xmsz  
       2021-12-03 14:42:15 +08:00   ❤️ 1
    这种就是传统思维下的历史成本
    不愿意抛弃已有的认知去学习新的东西

    ------



    当然,你用已有的知识去学习新东西是可行,但前提你得懂什么叫『抽象化』什么叫『融会贯通』(当然这个词选得不好)

    大概例子就是,比如你已经 [精通] 一门乐器,那你再学习另外一种 [同类型] 的乐器时,那你以往的知识就是有帮助的

    或者如果你掌握都是 [通用] 的 [方法论] ,那你学习什么都用得上。比如如何快速阅读一本书

    否则你只会被你以往的经验束缚,并且可能走错方向



    -----


    当然额外的说明

    像这种很 [通用] [现代] 的技术,或者 [新] 的技术方案,入门门槛难道会变得更难?
    如果更难,那不就退步了?


    或者说,如果你让一个没接触的人去学习,你会发现他学习非常的快
    sjzjams
        18
    sjzjams  
       2021-12-03 14:43:28 +08:00   ❤️ 1
    @quanjw 那你也太看不起 svn 了哈哈。。。
    \r\n
    这个管理工具怎么会有冲突,“svn 的思维去使用 git” 就很离谱啊,最基础的使用方式网上一看就知道。。怎么用 svn 还给用的固话思维了!!哈哈
    bitllion
        19
    bitllion  
       2021-12-03 14:58:50 +08:00   ❤️ 5
    https://learngitbranching.js.org/?locale=zh_CN 这个练习 git 不错用动画的形式展示
    CodeCodeStudy
        20
    CodeCodeStudy  
       2021-12-03 14:59:51 +08:00   ❤️ 1
    图形化工具很重要,可以尝试使用 IDEA 进行 git 操作
    liubaicai
        21
    liubaicai  
       2021-12-03 15:45:40 +08:00
    @murmur 你提交前都不测试的吗?
    murmur
        22
    murmur  
       2021-12-03 15:46:37 +08:00
    @liubaicai 测试非得用 git 的钩子么,本地跑完再提交不一样?
    liubaicai
        23
    liubaicai  
       2021-12-03 15:47:11 +08:00
    @quanjw 可惜你理解错了
    murmur
        24
    murmur  
       2021-12-03 15:48:25 +08:00
    @liubaicai 我的场景是这样

    比如 someFunction();<---此时光标再这里

    我按下 ctrl+shift+f 全文搜索,因为快捷键冲突,这个对话框大概率出不来,就成了

    someFunction();F

    因为 js 没有开严格模式,这个语句是不会报错的
    liubaicai
        25
    liubaicai  
       2021-12-03 15:50:42 +08:00
    @murmur 我不是说钩子。你本地跑完再提交,你那些 C 啊 V 啊什么的,不就发现了吗,难不成还能过测试?当然我承认 gui 工具确实好用,这个没得说。
    liubaicai
        26
    liubaicai  
       2021-12-03 15:51:22 +08:00
    @murmur 好吧,js 确实。大部分语言应该是过不了的
    justest123
        27
    justest123  
       2021-12-03 16:25:44 +08:00
    啊 优越感真可怕
    cnzjl
        28
    cnzjl  
       2021-12-03 16:33:42 +08:00
    @quanjw svn 也有分支功能
    Kimen
        29
    Kimen  
       2021-12-03 16:40:35 +08:00
    还好我接触版本控制的时候用的就是 git ,几乎没有用过 svn ,少了这些问题
    superrichman
        30
    superrichman  
       2021-12-03 16:43:28 +08:00
    git 的学习成本比 svn 大的多,很多时候 git 提供的那么多功能根本不会去用,大部分人只需要更新和提交,最多冲突了再加一个合并
    klgd
        31
    klgd  
       2021-12-03 16:50:25 +08:00
    更换后的镇痛是正常,过两天就好了,我们当初就是这样
    yohole
        32
    yohole  
       2021-12-03 16:58:02 +08:00
    题外话,idea 的对于 git 的支持和图形界面的交互体验,个人觉得远超其他独立的客户端
    dinghmcn
        33
    dinghmcn  
       2021-12-03 17:18:44 +08:00
    我们公司 git 还好,repo 一堆人不会用,但我们公司除了老旧代码基本都上 repo 了
    leeg810312
        34
    leeg810312  
       2021-12-03 17:21:16 +08:00
    很多时候就用 pull / push / merge ,网页版还会有 pull request 和 review ,rebase 我们平常都很少用。svn 过渡到 git 很平滑,没有感觉很难适应。刚用 git 时,用 IDE 或图形软件来操作可能比较方便,容易适应。
    statement
        35
    statement  
       2021-12-03 17:23:31 +08:00
    感觉 git 的复杂操作 使用起来挺难的
    比如各类回滚
    1.这类操作需要很慎重 会有畏惧心理
    2.使用场景很少,没有哪家公司天天回滚代码吧
    就导致学会了长时间不用就忘 不会你又不太敢用更畏惧了 能少用就少用 越不用越不会 恶性循环了属于
    lueluev
        36
    lueluev  
       2021-12-03 17:25:19 +08:00
    没事,过段时间就真香了
    securityCoding
        37
    securityCoding  
       2021-12-03 17:28:43 +08:00
    目前最好用的客户端应该是 idea 的 git 界面了
    madao100
        38
    madao100  
       2021-12-03 17:31:47 +08:00
    全离职吧
    corningsun
        39
    corningsun  
       2021-12-03 17:35:18 +08:00
    本来就不懂原理,还用命令行的话,会更乱。

    建议直接图形客户端走起,推荐一个: https://git-fork.com/
    JavaFirstMaster
        40
    JavaFirstMaster  
       2021-12-03 17:36:41 +08:00
    我这个部门就还在用 svn, 进来第一天就想跑路 (σ`д′)σ
    tuutoo
        41
    tuutoo  
       2021-12-03 18:11:18 +08:00 via Android
    一定要先培训好了再转 git
    ncepuzs
        42
    ncepuzs  
       2021-12-03 18:23:09 +08:00
    我觉得不熟悉 Git 的话更不应该用命令行,反而应该用可视化工具。
    ncepuzs
        43
    ncepuzs  
       2021-12-03 18:25:30 +08:00
    @corningsun 上次看的时候这两位开发者好像还是情侣,兼职开发。现在似乎是结婚了,全职维护 fork ?
    eycode
        44
    eycode  
       2021-12-03 18:26:22 +08:00
    sourcetree 了解下
    levelworm
        45
    levelworm  
       2021-12-03 19:04:09 +08:00 via Android
    只会用 jetbrain 编辑器里头的图形化 git ,还是很方便的。不过没搞清楚为啥 update 不能更新 branch 。。。每次都是直接 pull/fetch
    secondwtq
        46
    secondwtq  
       2021-12-03 19:06:59 +08:00
    代码检视是什么奇葩翻译,还是说你想说的其实是 Code Review ?
    没用过 SVN ,SVN 不能做 review 么?
    biguokang
        47
    biguokang  
       2021-12-03 19:10:10 +08:00
    这是人的坑,不是工具的坑

    做好人员培训很重要
    tzengshinfu
        48
    tzengshinfu  
       2021-12-03 20:20:57 +08:00 via Android
    @quanjw 雖然我司也是用 SVN 但也可以開分支
    dingwen07
        49
    dingwen07  
       2021-12-03 20:39:34 +08:00 via iPhone
    用 GUI 能解决掉你这里大多数问题
    villivateur
        50
    villivateur  
    OP
       2021-12-03 20:46:59 +08:00 via Android
    @secondwtq 求教,SVN 怎么做 review
    quanjw
        51
    quanjw  
       2021-12-03 21:34:57 +08:00
    @tzengshinfu @cnzjl @liubaicai 学习了 我对集中式管理的理解错误
    noparking188
        52
    noparking188  
       2021-12-03 22:25:25 +08:00
    没有准备就上新技术?
    我也经历过团队从 SNV 迁移到 Git ,前期做了不少准备工作,留了几个月时间通知到大家提前适应,后续迁移仓库过程中也相应制定了不少规范和约束,迁移完全部项目花了有大半年时间
    团队不少成员也没有系统去学习 Git 知识,找其它有使用经验的团队过来简单讲解了下,像是摸着 SVN 过河、依葫芦画瓢,借助 IDE 自带的 Git 功能集成
    dddd1919
        53
    dddd1919  
       2021-12-03 22:30:17 +08:00
    很久以前团队几个人从 svn 转到 git 为啥丝滑的一批?因为看文档了啊
    neetrorschach
        54
    neetrorschach  
       2021-12-03 23:13:18 +08:00
    自从用了 idea 的 git 再用 vs 的简直不能忍,操作太僵硬了,里面的 cherry pick 至今没看明白怎么用。
    Volekingsg
        55
    Volekingsg  
       2021-12-03 23:48:10 +08:00 via iPhone
    @securityCoding magit 不服🐶
    huangsen365
        56
    huangsen365  
       2021-12-04 00:13:21 +08:00 via iPhone
    有个东西叫 branch ,分支,多看看 git 的常用特性功能吧
    bzj
        57
    bzj  
       2021-12-04 00:35:34 +08:00
    如果是 10 年前我看到这个帖子并不会觉得诧异,但是都 2021 年了,还有人没用过 git ,并且因为自己不会使用吐槽 git 有坑,我真是服了。
    secondwtq
        58
    secondwtq  
       2021-12-04 01:19:00 +08:00   ❤️ 1
    @villivateur Code Review 这个过程本身和 VCS 工具,或者任何的外部工具没有必然关系啊 ... 就是你把一个 patch (或一组 patch ) share 给一组人,然后一起讨论改进的过程(也可以有机器跑一些自动化的流程),工具只是帮助 streamline 这个过程

    要说工具的话,https://en.wikipedia.org/wiki/List_of_tools_for_code_review 这里面不是有不少工具声称支持 SVN 。我知道的里面 Phabricator 前段时间停止开发了,然而一些知名开源项目例如 Blender 和 LLVM 之类的目前还是在用,当然这俩现在都用 Git ,但是比如 LLVM 也是最近才完全用 Git ,之前好像有段时间是 Git 和 SVN 并用,再之前应该是 SVN 。这个上古 patch https://reviews.llvm.org/rL237708 现在打开 URL 会被 301 到一个 Git 的 Commit ID ,但是 commit message 还保留着 SVN 的 revision number 。Review Board 现在还在开发,应该也比较靠谱。然后我也是刚发现这页面里面甚至还有 GvR 的一个副业 Rietveld ,我没用过这东西,但是我用过它的 fork Gerrit (只支持 Git ),AOSP 和其他的一票 Google 项目好像也在用。

    人家 Linux Kernel 和 GCC 用 mailing list 都好好的 ...
    0o0o0o0
        59
    0o0o0o0  
       2021-12-04 01:32:28 +08:00
    git 的确很强大,但是也得学一下,实际用一段时间才能摸清楚怎么用,你说的问题基本上都是小白会遇到的,好像也正常。。。我觉得不会的就讲一下分享一下经验,毕竟是团队合作。
    firemeteor
        60
    firemeteor  
       2021-12-04 02:28:40 +08:00 via Android
    在公司环境里面真的有必要用 git 么? git 的优势主要还是在于开源社区的分布式开发模式吧?
    Nnq
        61
    Nnq  
       2021-12-04 05:00:02 +08:00
    没有坑,git 分布式,svn 是集中式

    注意使用方法就好,开始有点难,后来应该都可以
    lopssh
        62
    lopssh  
       2021-12-04 05:04:42 +08:00
    内网环境怎么做 Pull Request??
    Shazoo
        63
    Shazoo  
       2021-12-04 09:20:11 +08:00
    叹气,不少人用 git 咋还用出优越感来了…… svn 不少场景是比 git 优秀的,权限部分也做的不错。迁移还真得需要认真考虑下。

    迁移工作本身比较棘手,需要做大量培训工作。早期可以费劲并行一段时间 (一些子项目用 git ,主项目用 svn )。scm 还得考虑很多历史遗留的自动脚本迁移……

    所以,迁移成本千万别太低估了。
    villivateur
        64
    villivateur  
    OP
       2021-12-04 10:17:53 +08:00 via Android
    @lopssh 自己搭建个 gitea
    l4ever
        65
    l4ever  
       2021-12-04 12:32:38 +08:00
    怎么大家都歪楼, 吐槽起版本管理工具了?
    svn 能根据目录设置权限, git 可以?
    git 有 git 好处, svn 有 svn 优点.

    没什么好喷的.
    wxw752
        66
    wxw752  
       2021-12-04 12:41:21 +08:00
    一个 git 有学习难度吗,当初看一天啥都会了
    JeepLi
        67
    JeepLi  
       2021-12-21 11:37:33 +08:00
    @gengchun 同意你的观点,你是站在公司的视角来看问题,层面更高。
    我是从技术人员成长的角度来说,都 2021 年了如果哪家公司还在用 svn ,要么说明这家公司技术对业务的贡献占比很小,要么说明这家公司技术管理者对技术和保守态度,这两种情况都对技术人员成长不利。
    gengchun
        68
    gengchun  
       2021-12-21 12:11:36 +08:00
    @JeepLi 做多了,能看到的仍是业务在赚钱。公司层面不仅仅是保守,而是非常保守。到了一定年龄,市场的公司招聘期待的已经不再是技术栈,而是是否有团队,能否带团队,能否独立做项目这些。

    我觉得对技术人员来说的话,至少刚入门就处理这种换代,需要协调不少人,做不少培训,也不失为一个不错的经验,至少是一个很有趣的观察窗口。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2744 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:05 · PVG 20:05 · LAX 04:05 · JFK 07:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.