Git、GitHub 与备份
您的代码值得一张安全网。用 Git 给一切做版本管理,用 GitHub 把它存到别处并分享出去,再加一套真正的备份策略,让您永远不丢东西,哪怕机器烧了。
本文目录
本文核对于 3 个月前,部分命令可能已有变化。 如有出入,请告诉我们。
要点速览
在让 agent 写代码之前,先用 Git 给所有东西做版本管理,再把一份副本推送到 GitHub:每个 commit 都是一个还原点,机器丢了代码也还在。把迷你 PC 连上 GitHub 最简单的办法是 GitHub CLI(gh auth login,选 SSH 协议),并在第一次 commit 之前写好 .gitignore,绝不推送任何密钥。至于不在 Git 里的东西(.env 文件、数据库、配置),用 restic 执行 3-2-1 规则,让备份自动运行,并至少测试一次还原。
请先完成: 什么是 AI 智能体(agent)?
您刚装好一个会飞快写代码的 agent。在它碰任何要紧东西之前,我们先把网铺好:Git,让每一次改动都可回退;以及 GitHub,让您的工作活在这台小盒子之外的地方。因为一台迷你 PC 可能会烧掉、被偷,或者吃下一个多余的 rm。而您的代码,绝不该跟着一起消失。
为什么这事不容商量(尤其是有了 agent)
一个代码 agent 跑得快,而且很自信。多数时候这很棒;偶尔它会弄坏点什么。Git 把这变成一件无关紧要的小事:
- 每一次提交都是一个还原点。 agent 把一切都搞砸了?
git restore或git reset,一秒钟您就回到了之前的状态。这是终极的「撤销」。 - 您能看清究竟改了什么。
git diff一行一行地告诉您 agent 动了哪里。您在点头前先审一遍,这就是这门手艺的核心(见 保护访问安全)。 - GitHub 让您的代码远离灾难。 硬盘坏了、被偷了、误操作:您的代码在 GitHub 上,完好无损。您能在任何一台机器上用一条命令把它取回来。
- 而且您可以分享。 给同事开权限、多人协作、开源出去:全都经由 GitHub。
在机器上配置 Git
三行,一劳永逸。Git 需要知道您是谁(这会签署您的提交):
git config --global user.name "您的姓名"
git config --global user.email "[email protected]"
# 几个明智的默认值
git config --global init.defaultBranch main # 默认分支叫 "main"
git config --global pull.rebase false # 可预期的 pull 行为
让机器获得访问 GitHub 的权限
您的机器得向 GitHub 证明它有权推送。两条路;选您顺眼的那条。
已完成 0 步,共 2 步 勾选记录只保存在此浏览器中。
-
最简单的:GitHub CLI(gh)
官方工具
gh替您处理认证,连令牌也一起搞定。# 从 Ubuntu 软件源安装 gh sudo apt install -y gh # 把机器连到您的账号, 回答问题,它会打开浏览器 gh auth login选「GitHub.com」,再选「SSH」作为协议:
gh会自动生成并安装密钥。完成后,您的机器就能克隆、推送、创建仓库了。这是我推荐的入门选项。Ubuntu 的软件包往往落后好几个版本(Ubuntu 26.04 里是 2.46,而截至 2026 年 10 月 1 日 GitHub 已发布 2.102)。用来登录和推送足够了;如果缺了某个新命令,请从 GitHub 官方软件源 安装
gh。 -
手动选项:一把专属于这台机器的 SSH 密钥
如果您想完全掌控,就创建一把专属于这台迷你 PC 的 SSH 密钥(一机一钥更稳妥):
ssh-keygen -t ed25519 -C "mini-pc-github" cat ~/.ssh/id_ed25519.pub # 复制显示出来的内容把公钥粘到 GitHub → Settings → SSH and GPG keys → New SSH key。然后验证:
ssh -T [email protected] # 应该用您的 GitHub 用户名跟您打招呼
您的第一个仓库,以及用它的 agent
cd ~/mon-projet
git init
# 那个告诉 git 要忽略什么的文件, 至关重要
cat > .gitignore <<'EOF'
node_modules/
.env
*.log
dist/
EOF
git add -A
git commit -m "Premier jet"
# 创建远端仓库并推送(用 gh,一行就够)
gh repo create mon-projet --private --source=. --push
到位之后,让您的 agent 替您管 git:「定期提交,写清晰的提交信息」「为这个功能创建一个分支」「开一个 pull request」。您甚至可以把它写进您的 记忆文件:「每一步验证通过后提交,使用约定式的提交信息,未经我同意不要推到 main。」
备份:3-2-1 法则
GitHub 保住了您的代码。但您的迷你 PC 里还装着许多不在 git 里的东西:您的 .env 文件、您的数据库、生成的数据、系统配置。对这些,我们套用备份的黄金法则:
已完成 0 步,共 4 步 勾选记录只保存在此浏览器中。
-
决定备份什么
- 代码 → 已经在 GitHub 上,无需多做。
- 密钥(
.env、各种 key)→ 加密备份,绝不明文。 - 真正要紧的数据(数据库、生成的文件、自己写的配置)。
- 不要备份 Ollama 模型和
node_modules:它们能重新下载,没必要备份。
-
选一个工具和一个目的地
restic 是理想的工具:加密、去重、增量备份。您可以把它发往一个 NAS、另一块硬盘,或者云存储。
sudo apt install -y restic # 初始化一个备份仓库(例如:发往挂载的 NAS) restic -r /mnt/nas/backups init # 第一次备份 restic -r /mnt/nas/backups backup ~/projets ~/configs如果想瞄准云存储(客户端侧加密),
rclone是一个很好的替代方案。 -
自动化,手动备份迟早会被忘掉
安排一个每日的 systemd 定时器或
cron任务。您的 agent 两分钟就能写好:让它「创建一个 systemd 服务,每天凌晨 3 点跑我的 restic 备份」。 -
测试您的恢复
一个您从未恢复过的备份不是备份,那是一种指望。至少做一次这个练习:
restic -r /mnt/nas/backups restore latest --target /tmp/test-restore,然后确认您的文件确实都在。
三个只有在恢复时才会发现的陷阱
用卷标定位磁盘,永远不要用路径
外置硬盘不一定每次都挂在同一个地方。如果目录已经存在,桌面环境会加一个数字,挂到 /media/您/1TB1,把 /media/您/1TB 留在原地,变成系统盘上的一个空目录。
天真的 [ -d "$DEST" ] 判断照样通过。于是您的备份安安静静地写进了系统盘,还以为自己写在外置盘上。
# 用卷标解析,并且要求它必须是一个真正的挂载点
DEST="$(findmnt -rn -S LABEL=1TB -o TARGET 2>/dev/null | head -1)"
[ -n "$DEST" ] && mountpoint -q "$DEST" \
|| { echo "外置 SSD 未挂载,备份中止"; exit 1; }
写死的清单会漏掉新来的
一个手工罗列数据库的脚本,永远不会备份您上个月新建的那个项目。而且它不会吭声。请扫描真正在跑的东西:
for c in $(docker ps --format '{{.Names}}'); do
# 探测工具是否存在,而不是去匹配镜像名:
# 这样连 pgvector、timescaledb 之类的衍生版也能一并抓到
docker exec "$c" sh -c 'command -v pg_dumpall' >/dev/null 2>&1 || continue
docker exec "$c" pg_dumpall -U postgres | gzip > "$DEST/$c.sql.gz"
done
破坏性重建必须是原子的
一个先删库再重建的脚本,万一中途挂掉,您手上就什么都不剩了。请在旁边建好,然后改名:在同一个文件系统内,改名是原子操作。
sqlite3 base.sqlite.tmp < schema.sql
# … 填充 …
mv base.sqlite.tmp base.sqlite # 要么瞬间切换,要么什么都不发生
切换之前还要核对:完整性、索引数量、行数下限。否则一次只完成了一半的重建,看上去也像成功。
本文全部命令
常见问题
Git 和 GitHub 有什么区别?
Git 是在您机器上运行的版本控制工具,在本地记录文件的历史。GitHub 是一个在线服务,您把这份历史的副本推送到上面。Git 是航海日志,GitHub 是远程保险箱,两者缺一不可。
编码智能体把东西全搞坏了,怎么回退?
只要工作用 Git 做了版本管理,每次提交就是一个还原点:git restore 或 git reset 一秒钟就能把文件恢复到之前的状态。而且在批准之前,git diff 会逐行显示智能体改动了什么。
API 密钥被推送到 GitHub 上了怎么办?
即使在私有仓库里,也要视为已泄露:立即吊销并重新生成。为了避免这种情况,请在第一次 git add 之前写好 .gitignore 文件,至少包含 .env 和 node_modules。
Ollama 模型和 node_modules 文件夹需要备份吗?
不需要,它们可以重新下载。应该备份的是别处没有的东西:.env 文件和密钥(务必加密)、数据库、生成的文件以及您自己的配置。代码本身已经在 GitHub 上了。
为什么备份可能失败却没人察觉?
因为有些陷阱会悄无声息地失败:外接硬盘以另一个名字挂载,备份就写到了系统盘上;写死的数据库清单会漏掉新项目;中途中断的重建会被当成成功。请按卷标定位硬盘,扫描实际在运行的服务,并先在旁边构建好再重命名。
本文涉及的术语: GitCommit(提交)开源(对比开放权重)
发现错误?
命令失效了,价格变了?
这些工具每个月都在变。请告诉我这篇文章哪里不对,我会改正并更新日期。