3、Git与代码管理:Git安装与配置、克隆PX4源码、分支管理、子模块更新
做嵌入式开发,尤其是搞飞控这种复杂项目,版本管理是基本功。我见过不少新手,代码改着改着就乱了,最后只能重头再来。其实用好 Git,这些坑都能避开。
这一章,咱们就聊聊怎么把 Git 装好、配好,然后把 PX4 的源码拉到本地,再学会怎么管理分支和更新子模块。说白了,就是让你能稳稳地驾驭代码版本。
3.1 Git 的安装与基础配置
Git 的安装没什么难度,但不同系统有点小区别。我个人的习惯是,不管用哪个系统,装完后第一件事就是配好用户名和邮箱。
3.1.1 各系统安装方式
| 操作系统 | 安装方式 | 验证命令 |
|---|---|---|
| Ubuntu 20.04/22.04 | sudo apt install git |
git --version |
| macOS | brew install git 或安装 Xcode Command Line Tools |
git --version |
| Windows | 下载 Git for Windows 安装包,一路默认即可 | git --version |
3.1.2 全局配置
装好之后,先配身份信息。这一步很重要,因为每次提交代码,Git 都会记录是谁干的。
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
嗯,这里要注意。邮箱最好跟你 GitHub 账号绑定的邮箱一致,不然提交记录里头像显示不出来。我曾经因为这个查了半天,还以为代码丢了。
再配个默认分支名,现在主流都用 main 而不是 master:
git config --global init.defaultBranch main
配完后,可以用 git config --list 看看效果。
3.2 克隆 PX4 源码
源码从哪来?从 GitHub 上拉。PX4 的官方仓库地址是:https://github.com/PX4/PX4-Autopilot.git。
克隆命令很简单:
git clone https://github.com/PX4/PX4-Autopilot.git
但这里有个坑。PX4 仓库很大,包含很多历史记录和子模块。直接克隆,网络不好的话很容易断。我建议加个 --depth=1 参数,只拉取最新版本,省时省力。
git clone --depth=1 https://github.com/PX4/PX4-Autopilot.git
--depth=1。否则还得再拉一遍完整历史,反而更麻烦。
克隆完成后,你会看到一个 PX4-Autopilot 文件夹。进去看看:
cd PX4-Autopilot
ls -la
你会看到一堆文件夹和文件。别慌,这就是飞控固件的全部家当。
3.3 分支管理
分支是 Git 最强大的功能之一。你想想看,如果所有人都在一条主线上改代码,那不乱套了?分支让你可以独立开发新功能,互不干扰。
3.3.1 查看分支
先看看当前仓库有哪些分支:
git branch -a
本地分支前面没有 remotes/ 前缀,远程分支有。当前所在分支前面有个 * 号。
3.3.2 创建与切换分支
假设你想基于 main 分支,创建一个自己的开发分支:
git checkout -b my-dev-branch
这条命令等于:
git branch my-dev-branch
git checkout my-dev-branch
我个人习惯用 git switch 来切换分支,更直观:
git switch my-dev-branch
3.3.3 合并分支
开发完了,要把代码合并回主分支。先切回 main,然后合并:
git switch main
git merge my-dev-branch
如果没冲突,合并就完成了。有冲突的话,Git 会告诉你哪些文件冲突了,手动解决后再提交。
git status 看清楚。
3.4 子模块更新
PX4 项目依赖很多第三方库,比如 mavlink、uavcan 等。这些库不是直接放在 PX4 仓库里的,而是以「子模块」的形式引用。
子模块说白了,就是在一个 Git 仓库里嵌套另一个 Git 仓库。拉取主仓库时,子模块不会自动拉取,需要单独操作。
3.4.1 初始化子模块
克隆完 PX4 源码后,第一件事就是初始化子模块:
git submodule update --init --recursive
这条命令会拉取所有子模块的代码。如果网络慢,可以加个 --jobs 4 参数,并行拉取:
git submodule update --init --recursive --jobs 4
3.4.2 更新子模块
当 PX4 官方更新了子模块的版本,你需要同步更新:
git submodule update --recursive --remote
这个命令会把子模块更新到远程仓库的最新提交。注意,这可能会引入不兼容的改动,所以更新后最好编译测试一下。
3.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以对照着看,心里有个谱。
3.6 常见问题与避坑
- 克隆太慢:换国内镜像源,或者用
--depth=1浅克隆。我一般用中科大的镜像:git clone https://gitclone.com/github.com/PX4/PX4-Autopilot.git。 - 子模块拉取失败:网络问题居多。可以手动进入子模块目录,单独拉取:
cd src/modules/mavlink && git pull。 - 分支混乱:养成好习惯,开发前先
git branch看看当前在哪个分支。我吃过亏,在main上直接改代码,结果提交时才发现。 - 合并冲突:别慌。用
git mergetool或者手动编辑冲突文件,解决后git add再git commit。
git status 看看有没有未提交的修改。干净的工作区,编译起来心里踏实。
好了,Git 这块就聊到这儿。你把这些命令敲一遍,基本就能应付 PX4 开发中的日常操作了。记住,熟能生巧,多练几次就顺手了。