2. 版本控制基础

说实话,很多嵌入式工程师觉得Git环境搭建就是“下一步下一步”的事。我以前也这么想,直到有次帮同事排查问题,发现他折腾了两天连不上GitHub,最后原因是SSH密钥权限设错了。嗯,这种坑踩过一次就记住了。

这一章我们就把三件事彻底搞定:装Git、配SSH、连远程仓库。不管你是Windows、Linux还是MacOS,跟着走一遍,以后就不会再被环境问题卡住。

2.1 各平台安装Git

Git的安装其实不复杂,但不同平台有各自的“脾气”。我个人的习惯是:能用包管理器就别去官网下载,省事,更新也方便。

2.1.1 Windows

Windows用户直接去 git-scm.com 下载安装包。安装时注意几个关键选项:

  • 选择默认编辑器:我建议选VSCode或Nano,别用Vim(除非你真的很熟)
  • 调整PATH环境变量:选“Git from the command line and also from 3rd-party software”
  • 换行符转换:选“Checkout Windows-style, commit Unix-style line endings”——嵌入式项目经常跨平台,这个设置最稳妥
我的经验:Windows上装完Git后,记得重启终端或者打开Git Bash。我曾经遇到过装完直接点“Git CMD”结果PATH没刷新的情况,白折腾了十分钟。

2.1.2 Linux(Ubuntu/Debian系)

Linux最简单,一行命令搞定:

sudo apt update
sudo apt install git
git --version

如果是CentOS/RHEL系:

sudo yum install git
# 或者
sudo dnf install git

装完验证一下版本。我个人建议版本不低于2.20,太老的版本有些功能不支持。

2.1.3 MacOS

Mac用户分两种情况:

  • 有Homebrew:brew install git,最干净
  • 没有Homebrew:去git-scm.com下载dmg安装包,或者装Xcode Command Line Tools(自带git)
注意:MacOS自带的git版本通常比较老。我建议用Homebrew装新版,避免后续遇到一些奇奇怪怪的兼容问题。

2.2 基础配置:你是谁

装完Git第一件事,告诉它你是谁。这个信息会写入每次提交:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

检查配置:

git config --global --list

这里有个细节:邮箱一定要和远程仓库注册的邮箱一致。我之前有同事用了不同的邮箱,结果GitHub上提交记录显示的是灰色匿名头像,查了半天才发现是邮箱不匹配。

2.3 配置SSH密钥

为什么要用SSH?说白了就是不用每次操作都输密码。HTTPS方式每次push都要输账号密码,烦不烦?SSH配好了,一劳永逸。

2.3.1 生成密钥对

ssh-keygen -t ed25519 -C "你的邮箱@example.com"

为什么用ed25519?它比RSA更安全,性能也更好。如果系统不支持(比如太老的Linux),可以用:

ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"

执行后会问保存路径和密码短语(passphrase)。密码短语建议设一个,虽然每次用要输一次,但安全很多。我有个同事没设密码短语,结果私钥文件被人拷走了……嗯,后果你懂的。

2.3.2 添加密钥到ssh-agent

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Windows用户注意:如果你用的是Git Bash,ssh-agent可能没自动启动。可以手动启动,或者用下面这个配置让它自动跑:

# 编辑 ~/.bashrc 或 ~/.bash_profile
eval "$(ssh-agent -s)" > /dev/null

2.3.3 查看公钥并添加到远程仓库

cat ~/.ssh/id_ed25519.pub

复制输出的内容,然后去远程仓库添加:

平台 添加位置
GitHub Settings → SSH and GPG keys → New SSH key
GitLab Preferences → SSH Keys → Add key
Gitee 设置 → SSH公钥 → 添加公钥
避坑指南:我曾经在GitLab上添加公钥时,忘记选“Key type”为“Authentication”。结果push时一直报权限错误,折腾了半小时才发现是类型选错了。

2.4 测试SSH连接

配置完别急着用,先测试一下:

ssh -T git@github.com
# 如果看到:Hi 用户名! You've successfully authenticated...
# 说明成功了

GitLab和Gitee类似:

ssh -T git@gitlab.com
ssh -T git@gitee.com

如果报错“Permission denied”,别慌。先检查:

  • 公钥是否已添加到远程仓库
  • 私钥是否已添加到ssh-agent
  • ~/.ssh目录权限是否正确(应该是700)

2.5 连接远程仓库:克隆与推送

SSH通了之后,就可以操作远程仓库了。先克隆一个项目试试:

git clone git@github.com:用户名/仓库名.git

如果是新建项目,流程是:

# 本地初始化
mkdir my-embedded-project
cd my-embedded-project
git init

# 添加远程仓库
git remote add origin git@github.com:用户名/仓库名.git

# 推送
git add .
git commit -m "初始提交"
git push -u origin main

这里有个小坑:默认分支名。GitHub现在默认是main,但有些老仓库还是master。推送前先确认一下远程仓库的默认分支名。

2.6 本章知识结构图

下面这张图把Git环境搭建的完整流程串起来了:

Git环境搭建流程 Git环境搭建核心流程 安装Git 基础配置(user.name/email) 生成SSH密钥(ed25519/RSA) 添加公钥到远程仓库 测试SSH连接 克隆/推送/拉取 💡 关键提醒 • 邮箱与远程仓库一致 • 私钥权限设为600 • 密码短语建议设置 🖥️ 平台差异 • Win: Git Bash + ssh-agent • Linux: 包管理器安装 • Mac: Homebrew推荐

2.7 常见问题与避坑

最后总结几个我踩过的坑,你遇到了可以直接翻到这里:

问题 原因 解决
Permission denied (publickey) SSH密钥未添加或权限不对 检查公钥是否添加到远程仓库,私钥权限设为600
Host key verification failed 首次连接未确认主机指纹 手动确认指纹,或检查known_hosts文件
git push 要求输入密码 使用了HTTPS而非SSH远程地址 改用 git@github.com:... 格式的地址
提交者显示为Unknown 未配置user.name/email 执行 git config --global 配置
重要:私钥文件(id_ed25519、id_rsa)绝对不能泄露。不要把它上传到Git仓库、云盘或者发给别人。我曾经见过有人把私钥提交到GitHub公开仓库,结果几分钟内就被机器人扫描并利用。