Juntong20XX Pages

Git 仓库规范

这篇是我之前在战队时,根据实际的经验写给嵌入式组用来规范 GIT 仓库的。尽管完成后也没有用到,但我希望将其公开作为学习交流使用。虽然它的写作目的是教程,它也可作为给新手的教程或是工具手册。


(速览)

仓库样式:

.
├───.git      # git 仓库
├───.idea     # CLion 配置
├───include   # 头文件
├───lib       # 第三方库
├───src       # 代码
└───test      # 测试
  1. 当你开发完成一部分,代码可以正常编译,且不影响他人代码时,再提交到远程仓库。
  2. 别忘了上机测试提交的代码。

举例,A组要开发UI功能

假如此时将UI需要的库文件加入了项目,可以提交:

git add -A
git commit -m "func: add ui lib"

接下来A组使用库实现了车辆状态显示功能:

git add -A
git commit -m "func: up date car state"

在功能添加并提交到后,A组确定代码能顺利编译

此时应该将代码提交到远程分支了:

git pull                        # 同步代码
git push                        # 上传

最后补充一下:提交信息最好使用英语(就是 Strong 显得我们国际化一点)。


(正文)

目录

设计思路

仓库的设计目的是在按照规范操作时,开发者尽量不会接触到其他人(或者组)的代码。

因此在设计中,开发时可以从 dev 中随便拉一个下来“做锅底”。其表现为:dev 分支应当是可以通过编译的(也就是说即使有 bug 也有概率不会影响到其他功能开发),带有版本号的节点应当是可用的(也就是通过测试,但暂时不能保证实际使用中没有问题),而带有无版本号的节点是稳定的(即可以信任的)。

第二,我希望整个提交树是清晰的,可以看到开发的轨迹,也就是在 dev 树中会看到很多分支,看到某个功能是基于哪个版本又跨越了哪些版本开发出的(这也是使用 merge --no-ff 的原因)。

分支规范和开发流程

远程仓库分支为 maindev,各位开发者应在本地建立一个 feature 分支作为开发时的“主分支”。

请勿将 `feature` 等任何本地分支提交到远程仓库

,如需同步代码,请新建仓库。

开发流程

常规流程为如下五步:

  1. 在本地新建名为 feature 的分支,作为本地开发时的主要分支,开发时请勿操作 dev 分支,更不应该对 main 进行任何操作。
  2. 当你开发完成一部分,代码可以正常编译,且不影响他人代码时,可以将 feature 分支合并到 dev 分支上,合并时,需要使用 git merge --no-ff 操作。

    请尽量合并通过测试或非常自信的代码,也不要过多或过少合并,例如写完了一个马上被调用的函数,就提交一下;而你写了一个未必用到的工具集,那就等写差不多了再提交。

  3. 合并后,请为刚才的提交打上标签,并提交到远程仓库。

    推送提交和推送标签分别是 git pushgit push --tags,需要操作两次。

    强烈建议提交后立即切回 feature 分支并合并 dev 代码,避免遗漏

  4. 尽快测试提交到 dev 分支的代码。
  5. 确认功能开发完成后,告知仓库管理员,他会将在进行代码审查后提交到 main 分支里。

    devmain 合并时,应当使用 --no-ff 参数。

开发时若需要从 dev 更新本地开发中的代码,请在更新本地dev后,通过 git merge 更新本地的 feature 分支,注意不要使用 rebase。

初次开发

开始第一次开发时,你需要将保存在服务器的代码下载到本地:

git clone {仓库地址}

接着,选择你开发时的初始版本,也就是将哪次提交拉到你接下来创建的 feature 分支上。考虑你的任务需要依赖什么:如果可以推荐基于 main 的最新提交。你可以通过以下命令找到提交。

git switch main
git describe --tags

如果 main 分支太旧了,那么次一级选择是 dev 分支带有标签的最新提交。

git switch dev
git describe --tags

如果带有标签的提交不能满足你,那你可能需要 dev 分支的最新提交,切换到 dev 分支就是了。

下一步,创建 feature 分支作为你本地开发的主要分支:

git switch --detach {你瞄准的标签或分支}
git switch -c feature

接下来跟着开发流程走就行。

意外处理

本地开发建议

标签规范

标签的由“版本号”和”尾缀“两部分组成,样式为 v{版本号}-{尾缀}

标签以”v”开头是为方便查找记录时快速从哈希值和标签中筛选出标签。

成员提交的所有标签应当带alpha尾缀,只有完成测试和代码审查后才提交无尾缀标签。

此规则大量参考了语义化版本 2.0.0,推荐阅读。

版本号

版本号格式:{主版本号}.{次版本号}.{修订号}

版本号递增规则如下:

次版本号数量应当由组会根据派发给每个小组的任务决定,且每个版本号应当对应指定的功能,并及时写在文档中。

版本号举例:

基于 1.10.3 开发了表格, 完成时 dev 最新版本是 1.10.5

提交新的版本号是 1.11.0

后期有微调,1.12.3 -> 1.12.4

尾缀

尾缀代表不确保稳定,所有未经过反复测试和代码审查的代码都应带有尾缀,只有组长才可提交无尾缀标签。

基础的尾缀是 alpha,其余尾缀待定。

意外处理

推荐git项目配置

git conifg pull.rebase   true
git config core.autocrlf false
git config core.safecrlf true
git config merge.ff      only

(修订记录)

版本号 日期 发布者 信息
V1.0 2022-8-17 \ 初始版本
V1.1 2022-8-17 \ 修复了html部分目录无法跳转的问题
V1.2 2023-4-28 \ 删去了隐私信息
V2.0 2023-5-4 \ 简化了仓库要求
V3.0 2024-5-16 \ 审阅,删去隐私信息
V3.1 2024-5-22 \ 修改错误,优化语言
V3.2 2024-5-24 \ 写了“设计思路”和“初次开发”