终于到了要掌握 branch 这一步
搭 Mastodon 就开始偷别人的 branch 用,现在终于到了想试试用 branch 管理代码的这天。
因为代码是我的 Thesis 相关分析,所以维护人只有我一个,并没有真的让 branch 发挥最大作用。但就这样吧,以后有多人协作的时候再水一篇。
总体思路
在库中的代码应该有如下简单结构:
1 | repository/ |
main 分支
代码的稳定版本
仅用于存储经过验证的、稳定的分析流程和结果。
所有面向他人共享或写论文前的代码版本,均以 main 为准。
合并到 main 前,代码应先通过 development 分支验证。
development 分支
开发版本
用于集成 daily-dev 的更新或功能模块,做阶段性整合和测试。
可以多人协作,完成后合并进 main。
较 daily-dev 更稳定,但仍可能频繁更新。
daily-dev 分支
日常维护
用于日常开发和维护,比如 bug 修复、分析修改、新图测试等。
自由度最高,适合个人工作。
重要变更建议定期合并进 development。
Tag(标签)的作用
用于记录关键的版本节点,方便快速回溯。
常用于标记:
- 某次分析的正式版本(如 v0.2.1-analysis)
- 提交给导师或合作作者的版本
- 某个数据/包版本对应的代码快照
初始化和初次 push
在 GitHub 创建一个要存代码的空库,然后在本地执行如下操作:
1 | git init |
这里的操作和基本使用一样。还可以进一步使用 tag
:
1 | git tag stable-0.0.1 |
标记这一份代码是一份能跑通的稳定代码。
分支
创建新的开发分支:
1 | git checkout -b development |
这个新的分支会默认基于当前分支,如果需要基于某个分支,可以先切过去,比如基于 main 的话:
1 | git branch # 查看当前处于哪个分支 |
或直接指定分支:
1 | git checkout -b development main |
创建分支后推送到远程库:
1 | git push -u origin development |
-u
表示将本地分支和远程分支绑定,之后只需用 git push
就可以自动推送到对应远程分支。
使用同样的办法来创建日常开发所用的分支,但记得检查想要基于哪个分支。日常开发一般基于 development
:
1 | git checkout -b daily-dev development |
日常操作都在 daily-dev
上进行,包括代码实验、小修改、调试。稳定后可通过如下方式合并到 development
:
1 | git checkout development |
然后 git push
推送更新后的 development。
单人 vs 多人
如果是单人开发,目前的步骤已经够用。日常用 daily-dev
,某些部分稳定之后可以适时合并到 development
,代码全部稳定之后就合并到 main
。不需要频繁重建分支,只要保持分支更新同步。即:
- 日常开发全部在 daily-dev 分支进行
- 某个功能或分析稳定之后,可以合并到 development 分支
- 整体代码成熟、分析结果稳定时,再将 development 合并进 main,用于归档发布
- 注意:不需要频繁重建分支,只要注意分支间保持同步更新,避免长时间分支内容差异太大
如果是多人开发,日常维护的分支可能需要频繁基于最新的 development
重建,再以最新代码为基础做修改。具体如下:
- 所有人都从最新的 development 分支拉取一个自己的功能分支(例如 feature-x, fix-y, userA-dev 等),基于该分支进行开发
- 每次开发前务必同步更新 development 分支,确保基于最新代码。如果已有分支落后较多,应基于最新的 development 重建分支
- 开发完成后发起 Pull Request(PR)合并回 development,进行代码审查、测试等
- 当多个功能合并并验证无误后,再由维护者将 development 合并到 main,形成一个稳定版本
- 注意:为每个功能或任务使用新的临时分支,完成后清理,以保持分支结构清晰可控。