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
小提示:Windows 用户安装时,记得选「Use Git from the Windows Command Prompt」,这样在 cmd 和 PowerShell 里都能直接用 git 命令。

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 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以对照着看,心里有个谱。

Git 与代码管理知识体系 Git 版本管理 安装与配置 克隆源码 分支管理 子模块更新 apt/brew/安装包 --depth=1 浅克隆 创建/切换/合并 init + update 核心逻辑:先装 Git → 配身份 → 克隆源码 → 管理分支 → 更新子模块,环环相扣

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 开发中的日常操作了。记住,熟能生巧,多练几次就顺手了。