ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

RuoYi-Vue二次开发:拉取项目与切换分支全解析

2026/10/6 12:55:46 拓冰建站 浏览量
RuoYi-Vue二次开发:拉取项目与切换分支全解析 开篇为什么二次开发的第一件事是“把项目拉下来”而不是“改代码”很多人拿到RuoYi-Vue这样的明星级后台管理框架第一反应是打开官网文档对着功能列表挨个研究或者直接去改登录页、换Logo。但我自己的经验是二次开发最忌讳一上来就动代码因为你对项目结构的理解、对官方分支策略的认知决定了后面所有改动的代价。尤其是RuoYi-Vue这种前后端分离、多仓库、多标签持续维护的项目如果你第一次就拉错了分支或者拉下来之后不知道当前处于哪个版本的代码状态后面排查问题时你会怀疑人生——你改了一个前端页面发现行为不符合预期查了半天结果发现基线本身就跟你以为的不一样。这第一篇文章我定的主题很朴素拉取项目并切换分支。别小看这一步它涉及三个高频问题从哪里拉、拉哪个分支、怎么切换。这三件事背后涉及Gitee的仓库托管习惯、RuoYi-Vue的官方分支策略、Git的底层工作区/暂存区/引用机制以及多人协作时的分支命名规范。把这些整明白了你后面的“二次开发”才有地基。这篇文章适合谁看准备基于RuoYi-Vue做毕设或公司项目的学生、刚接手若依二开任务但没梳理过仓库结构的初级工程师、以及想规范团队分支协作的Tech Lead。看完你至少能回答为什么官方仓库叫RuoYi-Vue却在Gitee上还有别的前缀、master和main分支到底哪个能用、命令行切分支和用TortoiseGit切分支有没有本质区别。1. 拉取前必须搞清楚的仓库结构与分支策略1.1 为什么首选Gitee而不是GitHubRuoYi-Vue的代码托管主阵地在Gitee码云不是GitHub。这不是偶然而是因为若依的主要用户群体在国内Gitee的克隆速度和访问稳定性对国内开发者更友好。如果你用GitHub的镜像仓库或者通过某些代理方式去克隆大概率会遇到大文件下载失败、连接重置、库拉一半断掉的问题。我自己的实测在同样的网络环境下git clone https://gitee.com/y_project/RuoYi-Vue.git的速度明显快于从GitHub克隆同名仓库尤其在拉取ruoyi-ui前端的node_modules依赖时Gitee的带宽优势更明显。所以第一步就是认准Gitee地址不要凭习惯去GitHub碰运气。Gitee上的RuoYi-Vue官方仓库地址没有变化过数十万星标也基本都集中在那个仓库下。克隆时建议直接使用HTTPS协议SSH协议虽然免密但需要提前配置密钥对新手不友好。公司内网用户如果访问外网受限可以把Gitee仓库镜像到内部的GitLab但这是后话第一篇先解决标准流程。1.2 官方分支命名背后的规则不看会踩坑拉取之前按下性子先看仓库的分支列表。RuoYi-Vue官方仓库的分支策略和很多开源项目不一样它不是把前端后端混在一个分支里而是有明确的“前后端分离”痕迹master主干分支后端Java代码的主线也是历史最长的分支。main新版主干分支部分版本迁移后采用的标准命名。RuoYi-Vue注意这个分支名它对应的是前后端分离版本的前端主线Vue代码所在的分支之一。ruoyi-vue-plus增强版相关分支不是官方主仓库的同一条线。js、diy这类非主流分支属于社区贡献或临时功能分支不建议作为二开基线。标题里说的“切换分支”大部分场景指的是从默认的master或main切到某个稳定版本的发布分支。因为RuoYi-Vue的迭代节奏比较快官方经常打tag但不一定给每个tag单独开长期维护分支。所以你在二次开发时如果没有特殊需求直接以master或官方最新release tag为基线即可不要追新尤其是不要用那些名字看起来很牛但没经过验证的分支。如果你用Git命令方式来拉取git clone默认会把你带到默认分支通常是master或main。但如果你是想拉取一个指定版本的分支比如某个历史稳定版本正确的做法是先克隆完再切分支而不是试图用git clone -b一步到位——虽然命令上可行但如果你对分支名不熟悉很容易因拼错分支名导致克隆失败反而浪费更多时间。2. 拉取项目前的环境准备清单2.1 本机Git环境版本别太老用户信息必须配拉取RuoYi-Vue对Git版本没有苛刻要求别低于2.20就行。推荐2.30以上版本因为新版本对分支跟踪、pull --rebase的默认行为更友好。但真正容易出问题的不是Git本身而是你的全局配置。打开终端敲git --version git config --global user.name git config --global user.email如果user.name和user.email是空的那你在切换分支、提交代码时会有隐患即便只是本地切分支不影响但一旦你把改动推到自己的远程仓库提交记录会变成一串无意义的ID。这个我也踩过坑——协作时对方看到提交记录里一堆“unknown”作者排查责任时头大。配置方法很直接git config --global user.name 你的名字 git config --global user.email 你的邮箱有的团队用公司邮箱、有的用Gitee注册邮箱确保你配置的邮箱和你在Gitee上的邮箱一致否则推送代码时会提示权限问题。2.2 JDK、Maven、Node的版本组合一门心思对应版本RuoYi-Vue后端是Spring Boot项目前端是Vue项目所以你的本机至少要准备三样东西JDK、Maven、Node。JDKRuoYi-Vue官方要求JDK 1.8以上实测用JDK 8或JDK 11跑最新版都行。但如果你要用JDK 17需要留意Spring Boot版本是否兼容——RuoYi-Vue的某些版本是基于Spring Boot 2.x的JDK 17能编译但可能出现依赖冲突。我建议稳妥用JDK 8不是因为它新而是官方文档和社区的排错经验都围绕JDK 8展开。Maven要求3.5以上推荐3.6.3或3.8.x。Maven配置里要设置好本地仓库路径和阿里云镜像否则拉依赖能拉到你怀疑人生。Node前端ruoyi-ui是基于Vue 2或Vue 3不同版本有差异对应Node版本要求一般是10.x到16.x之间。RuoYi-Vue新版前端用Vue 3时建议Node 16以上。装Node时顺手把npm registry切到国内镜像这个对后续npm install很重要。# 检查本机环境 java -version mvn -v node -v npm -v这些版本信息最好先确认齐全。实战中我最常遇到的情况是项目拉下来了后端能启动前端npm install装了一堆依赖然后Node版本不对导致编译报错。这个坑放在后面专门讲但环境准备阶段把Node版本卡到位能省很多事。2.3 IDE准备IDEA为主但别忽视前端IDE后端二次开发用IntelliJ IDEA毫无争议社区版就够用。但RuoYi-Vue是前后端分离前端代码虽然能用IDEA打开体验一般我还是推荐你用VS Code或WebStorm来跑前端工程。IDEA打开ruoyi-ui目录也可以但如果你同时开着后端工程内存占用会非常夸张16G内存的机器都会卡。环境准备阶段还有一件事容易被忽略给IDEA配好Maven的settings.xml。RuoYi-Vue的pom.xml里依赖非常多如果你用IDEA内置的Maven默认去中央仓库拉第一次构建大概要下载几百MB的依赖没有镜像基本会超时。正确姿势是先修改settings.xml把阿里云镜像加进去再在IDEA的Maven设置里指向这个文件。mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror拿到这个配置后再执行Maven的clean和install速度会快一倍以上。3. 从Gitee拉取项目三种方式与切换分支的本质3.1 命令行方式最通用也最推荐这是我最推荐的方式因为命令行方式不依赖IDE版本也不受GUI工具的缓存干扰。操作流程如下# 第一步克隆RuoYi-Vue主仓库 git clone https://gitee.com/y_project/RuoYi-Vue.git # 第二步进入项目目录 cd RuoYi-Vue # 第三步查看所有分支 git branch -a # 第四步切换到目标分支 git checkout RuoYi-Vue注意第四步这里git branch -a列出的远程分支名是类似remotes/origin/RuoYi-Vue这种但你checkout的时候不需要写remotes/origin/前缀直接写RuoYi-VueGit会自动建立本地分支并跟踪远程分支。切换分支的核心逻辑我用一个生活化类比解释一下git checkout的本质是“移动HEAD指针”到目标提交上然后更新你的工作区文件。也就是说你切分支的时候本地那堆文件会跟着变——切到后端分支目录里就是Java代码切到前端分支目录里就是Vue文件。RuoYi-Vue的情形比较特殊主仓库的master分支里包含的是完整的后端和前端目录结构ruoyi-admin、ruoyi-ui等都在同一个仓库里所以不存在“切到前端分支才能开发前端”的物理隔离。但官方对不同粒度功能的版本做了分支隔离比如一些历史版本的前后端代码存放在不同分支中。因此第一次拉取后先看目录结构再确认分支比先无脑切分支更重要。如果你需要拉取一个指定tag的版本正确姿势是git clone https://gitee.com/y_project/RuoYi-Vue.git cd RuoYi-Vue git fetch --tags git checkout v3.8.7切到tag之后工作区会处于一个“detached HEAD”状态意思是你的HEAD不指向任何分支而是直接指向一个具体提交。此时如果在这个状态下改代码再提交会导致分支丢失。正确做法是git checkout -b my-dev v3.8.7基于tag新建一个分支再开干。3.2 TortoiseGit方式Windows用户的图形化选择在网上热搜词里出现了tortoisegit 切换分支说明大量Windows用户习惯用乌龟Git来操作。TortoiseGit本质上只是Git命令行的一层GUI壳它做的事情和命令行一模一样但对不熟悉命令的人来说确实直观。用TortoiseGit拉取RuoYi-Vue的步骤在本地新建一个空文件夹右键选择“Git Clone”。URL填写https://gitee.com/y_project/RuoYi-Vue.git指定目标目录。点OK等待克隆完成。克隆完成后右键项目文件夹选择“TortoiseGit” - “Switch/Checkout”。在弹窗里选择远程分支origin/RuoYi-Vue点OK。TortoiseGit的“Switch/Checkout”和命令行git checkout完全等价。我最开始用TortoiseGit时犯过的错是在“Revision”区域手动填了一个不存在的分支名结果Git弹了一堆英语错误我看不懂最后只能删除重拉。后来明白了GUI工具虽然友好但它的报错信息比命令行更不直观因为它把Git原本的英文错误做了二次包装。所以我的建议是你可以用TortoiseGit操作但心态上要清楚它在背后跑的是Git命令遇到看不懂的错误时打开命令行工具跑一下同样的操作看原始报错。3.3 IDEA内置VCS适合只在一个IDE里工作的场景IDEA自带Git集成File - New - Project from Version Control输入仓库地址也能拉项目。这个方式的优势是不需要切出IDE劣势是IDEA的Git集成在切换分支时偶尔会出现“本地文件未提交导致切不过去”的状况。比如你改了pom.xml没提交然后IDEA里点分支切换Git提示工作区有改动你如果选了“Force Switch”可能会丢掉改动。所以无论如何我建议工作区保持干净再切分支。干净的意思是git status输出除了Untracked目录外没有已修改的跟踪文件。这个习惯比用哪款GUI工具都重要。3.4 切换分支后必做的验证动作很多人在这一步栽跟头切完分支以为万事大吉直接开始在IDE里看代码发现版本不对又回去切。其实切完分支有四个动作建议立刻执行git branch——确认当前所在分支高亮带*号的就是你当前分支。git status——确认工作区干净没有残留的冲突文件。看项目根目录的pom.xml或package.json——确认版本号和你预期的分支匹配。刷新IDEA的Maven面板或npm依赖管理——确保依赖刷新跟你切过来的分支版本对应。其中第4条最容易被忽略。RuoYi-Vue的ruoyi-ui目录下有package.json不同分支下这个文件内容可能完全不同Vue 2版本和Vue 3版本的依赖差异巨大如果只切分支不刷新依赖前端启动大概率直接挂。4. 刚拉完项目最容易翻车的三个细节4.1 后端Maven依赖下载困难镜像与私服缺一不可RuoYi-Vue的后端依赖数量庞大ruoyi-framework、ruoyi-system这些模块层层依赖首次构建需要下载的jar包大概在几百个左右。如果不配镜像用默认中央仓库下载在上午网络高峰时大概率会卡在某个依赖上。配了阿里云公共镜像之后理论上已经畅通了。但有个细节RuoYi-Vue的pom.xml里有些依赖不在公共镜像里比如某些Oracle驱动或者需要特定版本这时你需要在Maven的settings.xml里再加一个spring的镜像mirror idspring-milestones/id mirrorOfspring-milestones/mirrorOf urlhttps://repo.spring.io/milestone/url /mirror经验之谈首次构建时不要用mvn package而用mvn clean install -Dmaven.test.skiptrue。原因很实在RuoYi-Vue的测试类很少跳过测试能省下大量编译时间也避免个别测试用例在本地环境跑不通导致构建中断。4.2 前端依赖装不上或装得太慢registry镜像先切好ruoyi-ui的前端依赖由npm管理默认源是https://registry.npmjs.org/国内访问很慢。建议先执行npm config set registry https://registry.npmmirror.com然后在ruoyi-ui目录下执行npm install这里有个很多人没注意的点RuoYi-Vue的package-lock.json里锁定的下载源路径和你执行npm install时的生效源可能不一致。如果你遇到安装到一半突然卡在某个包上删掉node_modules目录重新设置registry再执行npm install。npm install完成之后先别急着跑npm run dev用npm run build做个预编译能提前暴露代码里的语法错误和依赖缺失。我自己就是在改了几个页面后才发现有一个组件的导入路径大小写写错了直接npm run build报错比开发模式下报错更直观。4.3 项目启动顺序与端口占用后端起不来前端白搭RuoYi-Vue的启动顺序是先启动后端RuoYiApplication再启动前端npm run dev。后端默认端口是8080前端默认端口是80端口80可能被占用需要改配置文件。后端启动需要配置数据库——RuoYi-Vue默认使用MySQL你要先在本地建一个数据库然后把ruoyi-admin/src/main/resources/application-druid.yml里的数据库地址、用户名、密码改成你自己的初始数据脚本在项目根目录的sql文件夹下。如果后端一直起不来大概率是数据库连接没配对错误信息里会明确告诉你连接超时或拒绝访问。这里提示一下RuoYi-Vue默认数据库密码是root/123456之类的测试值生产环境必须改二次开发阶段可以先用默认但要注意如果你的MySQL版本是8.x驱动配置里的driver-class-name要确认是com.mysql.cj.jdbc.Driver否则会报驱动类找不到。5. 团队协作视角下的分支管理建议5.1 二开项目最好基于官方tag建私有分支单机自己玩的时候在master分支上直接改没关系。但如果是团队协作我强烈建议不要在官方主干分支上做改动。理由有两条第一官方会持续更新仓库如果你直接在master上改后续官方更新时你合并代码会痛苦万分第二团队协作时谁都有可能在主干上产生一次意外提交污染基线。我的推荐做法# 基于一个明确的tag创建二开分支 git checkout -b feature/my-project-dev v3.8.7 git push -u origin feature/my-project-dev这样你的团队所有成员都在这个feature/my-project-dev分支上开发官方更新时你可以把master合并过来筛选需要保留的官方修复然后继续自己的功能开发。5.2 “拉取-切换-更新”是一个循环不是一次性动作很多人的误区是“项目拉下来切好分支后面就一直用这个”。实际上二次开发过程中你经常需要拉取官方更新比如官方修复了一个安全漏洞你需要把修复合入你的二开分支。这个场景下的标准操作是# 在二开分支上暂存本地改动 git stash # 切换到master拉取最新代码 git checkout master git pull # 回到二开分支并合并master git checkout feature/my-project-dev git merge master # 恢复之前暂存的改动 git stash pop这段操作看着基础但顺序不能乱。尤其是在git merge master之前如果你的工作区有未提交的改动合并冲突会裹挟着你的半成品代码一起报错排查起来特别辛苦。先把改动stash再合并冲突范围会小很多这是我用了无数次的稳妥流程。5.3 分支切换时本地未提交改动的三种处理策略再展开一下这个高频场景你正在开发一个功能改了几个文件突然需要临时切回master查一个东西怎么办三种处理策略git stash把改动藏起来切分支查完切回来git stash pop恢复适合改动不大、不想提交的情况。git commit如果这个改动是一个完整的逻辑单元直接提交到自己的分支再切走适合功能已经成型的情况。git diff patch.diff把改动导出成一个补丁文件适合跨电脑同步改动、不方便提交的情况。我自己的习惯是改动半成品时一律stash绝不commit。因为半成品的提交记录会误导团队成员别人看你提交了一个“好像没写完的功能”不知道要不要继续。5.4 切换分支后IDEA的Maven和依赖必须同步刷新再强调一次因为这个问题翻车率太高切换分支后IDEA不会自动刷新Maven依赖和npm依赖。你从master切到RuoYi-Vue分支后pom.xml可能变了但IDEA的Maven面板还显示旧的依赖列表此时直接跑应用可能会报NoClassDefFoundError之类的错误。正确操作是切完分支后在IDEA右侧Maven面板点击刷新按钮蓝色的循环箭头或者直接敲mvn clean。前端则到ruoyi-ui目录重跑npm install。宁可多花这几分钟也别让诡异报错耽误一下午。6. 从“能跑”到“会用”理解分支背后的版本演进6.1 RuoYi-Vue的前端框架迁移带来的历史包袱RuoYi-Vue最开始的版本是Vue 2 Element UI后来官方逐渐出了Vue 3 Element Plus的版本。如果你在Gitee仓库里看到了不同的分支/标签它们对应的前端技术栈可能完全不同。这就意味着同一个仓库的master分支是Vue 2还是Vue 3取决于你拉取的版本时间点。切换分支时如果发现ruoyi-ui目录下的结构变了比如多出了vite.config.js而非vue.config.js那就是Vue 3版本你本地Node必须是16以上。这个知识点看起来无关紧要但实际中我见过有人在Vue 2分支上按Vue 3的文档改配置改了半天全是空的根源就是分支没对应上。6.2 后端模块结构在分支间的差异新增模块与移除模块RuoYi-Vue的模块结构整体稳定但随着版本演进官方会在master分支里新增模块比如代码生成器、定时任务等也会在某些历史分支里移除旧模块。你如果从最新分支切到旧版分支发现ruoyi-generator模块不见了这是正常的不是拉取失败了。理解这一点能防止你在排查问题时误判方向。6.3 用tag还是用branch做基线我的取舍观点无论是官方仓库还是你的二开仓库我倾向于在项目启动时选一个tag作为基线然后从这个tag拉出二开分支。理由很简单tag是静态的它不会变你记录在项目文档里的“基线版本”无论过多久都能复现而分支是动态的官方一更新分支头就漂移了你无法保证所有团队成员拉到的内容一致。所以我第一篇这篇的开头说“拉取项目并切换分支”完整实操流程其实是克隆 - 查看tag - 基于目标tag建二开分支 - 推送远端 - 团队基于此分支开发。这个决策花费的时间不超过10分钟但它决定了你之后是“顺风开发”还是“逆风合并”。结尾一个小习惯让拉取和切换本身变成零风险操作最后分享一个多年实践留下的习惯在项目根目录建一个README.branch.md文件里面记录几行关键信息——# 分支基线说明 - 基线tag: v3.8.7 - 二开分支: feature/my-project-dev - 前端目录: ruoyi-ui (Vue2 Element UI) - Node版本要求: 12 - 后端JDK版本: 1.8每次有新成员入职或换电脑先看这个文件再克隆、切分支。这个小文件解决了一个看似琐碎但极其致命的问题——团队成员之间的版本认知不一致。代码永远能在几分钟内拉下来但版本认知一旦错位后面排查问题的成本远超你的想象。下一篇我会接着写“RuoYi-Vue二次开发二”重点讲后端启动前的数据库初始化与配置解读确保项目真正在你本地跑起来再往下才能放心去改造业务逻辑。如果你按照本文的流程走完了拉取和切换分支恭喜你已经赢在了二次开发的第一步。