电脑指南
第二套高阶模板 · 更大气的阅读体验

主干开发踩过的坑和几个实用配置建议

发布时间:2026-04-07 13:31:18 阅读:15 次

上周帮同事调一个 Git 冲突,他本地改了三天的代码,一 push 直接被拒——因为主干(main 分支)上刚合入了另一组人重构的配置模块,接口全变了。这种事在主干开发模式下太常见了,不是谁写得慢,而是没卡住节奏。

什么叫主干开发

简单说,就是所有人日常开发都基于 main 分支,不拉长期 feature 分支,提交前先 fetch + rebase,保证每次 push 都是线性、可测、可部署的。听起来理想,实际落地时,系统设置类功能最容易翻车:比如 Windows 组策略脚本更新、Linux systemd 服务配置热加载、macOS 的 defaults 命令批量写 plist……这些操作一旦出错,轻则服务起不来,重则整机配置错乱。

别等 CI 报错了再改

我们团队现在强制所有系统设置类提交带本地预检脚本。比如修改 /etc/sysctl.conf 后,必须跑一遍:

sysctl -p /tmp/test.conf && echo "OK" || echo "配置语法错误"

再比如改 Windows 注册表导入脚本(.reg 文件),用 PowerShell 先模拟执行:

reg import test.reg /reg:64 /quiet 2>&1 | Out-Null; if ($?) { Write-Host "注册表格式通过" } else { Write-Host "注册表键名或值类型有误" }

这类检查不耗几秒,但能拦下 70% 的低级错误。

环境变量和路径,别硬编码

有人写个 Bash 配置脚本,直接写 /home/alex/.bashrc,结果上线到新服务器,用户是 deploy,脚本就静默失效。主干开发里,这类细节暴露得特别快。我们统一改用:

CONFIG_HOME=${XDG_CONFIG_HOME:-"$HOME/.config"}

Windows 上也类似,用 %LOCALAPPDATA% 而非 C:\Users\xxx\AppData\Local

重启不是万能解

改完 systemd service 文件,很多人习惯 systemctl daemon-reload && systemctl restart xxx。但某些服务(比如 udev rules 或 kernel module 加载)需要 reload + trigger 才生效。我们加了一行检测:

udevadm control --reload-rules && udevadm trigger --subsystem-match=usb

改完就跑,不等发布后用户报“插U盘没反应”。

主干开发不是追求快,是让每次改动都足够小、足够确定、足够可逆。系统设置类变更尤其如此——它不像前端页面,坏了还能切回旧版;它动的是底座,一松就晃。