团队的代码仓库地址

[GitHub - Meng-XuanYu/JayJay-TeamVersionControl: A public repo for BUAASE2025 course homework: Teamw

团队完成 Task. HotFix! 后新建的代码仓库地址

GitHub - Meng-XuanYu/final-cleaned

代码仓库的分支图示

情况说明

操作失误

在进行Task.2的一次pr的时候,@孟烜宇 提出pr的时候误将dev分支合并到feature/emoji-2分支,虽然及时发现并且关闭了pr,但是@王怀阳 眼疾手快解决了冲突并允许了这次的pr,导致后续操作出现了一些问题。

发现问题之后,利用reset指令退回并完成了正确合并。

message未规范

一开始有些同学未阅读Commit Message的提交规范,后续均规范。

团队安排

DevOps 技术选型

本团队基于初期开发测试及用户量较少的情况,选择腾讯云北京六区单台服务器(2核CPU/4GB内存/3Mbps带宽),搭配220GB SSD存储及包年计费,兼顾性能、成本与扩展性;团队通过飞书实现高效沟通(消息状态追踪、云端文档协作)和GitHub分支管理推进代码开发,并配置了GitHub Actions自动化CI/CD流程(main分支推送触发依赖安装与Django测试),确保低成本、高协同的技术架构支撑项目初期运行与迭代优化。

团队代码管理

代码审查与工作安排

总的代码仓库管理由 PM @孟烜宇 负责,拟采用前后端分仓库进行管理开发的模式,同时部署到同一台服务器上,进行持续的部署与开发。 在代码审查方面,团队安排专人进行 Pull Request 的审查,解决潜在的代码冲突问题,具体安排为:

  • 前端 Pull Request 审查:@孟烜宇
  • 后端 Pull Request 审查:@曹玮琳

分支规范

  1. main 分支 线上在跑的版本

    1. 提供给用户使用的正式版本稳定版本
    2. ️ 所有版本发布Tag 操作都在这里进行;
    3. 不允许开发者日常 push,只允许从 release 合并。
  2. release 分支 将要上线的版本
    1. 从 develop 分支检出,只用于发布前的确认;
    2. 允许从中分出 fix 分支,修复的 commit 需要 push 回 dev;
    3. 不允许开发者日常 push,只允许从 dev 合并。
  3. dev 分支 日常开发汇总
    1. 开发者可以检出 feature 和 fix 分支,开发完成后 push 回 dev;
    2. 保证领先于 main;
    3. 不允许开发者日常 push,只允许完成功能开发或 bug 修复后通过 pull request 进行合并。
  4. feature 分支
    1. 从 dev 分支检出,用于新功能开发;
    2. 命名为 feature/name,如 feature/resume_generation
    3. 开发完毕,经过测试后合并到 dev 分支;
    4. 允许开发者日常 push.
  5. fix 分支
    1. 从 dev 或 release 分支检出,用于 bug 修复(feature 过程中的 bug 直接就地解决);
    2. 特殊情况下允许直接从 main 直接开 fix 分支进行修复;
    3. 命名为 fix/issue_id,如 fix/2 ;
    4. 修复完毕,经过测试后合并到原来的分支(dev/release/main),并且保证同时合并到 dev;
    5. 允许开发者日常 push.
  6. chore 分支
    1. 从 dev 分支检出,用于各项修正,如重构、风格优化等;
    2. 命名为 chore/name,如 chore/resume_generation
    3. 开发完毕,经过测试后合并到 dev 分支;
    4. 允许开发者日常 push.

潜在风险与应对措施

(一)代码冲突

提到风险,首当其冲的肯定是令人头疼的 conflict。在这次作业 Task 2 的合并任务中,同学们修改了同一文件的同一代码段,导致了 pr 时的冲突。解决方法是借助 git 的冲突解决功能,手动对比冲突部分代码,选择合适的代码保留。为减少这类问题的发生,我们制定了更加明确的开发规范,即:

  1. 开发新的 feature 前,先 pull 下来最新代码,确保本地代码是最新状态,再检出相应的 feature 分支
  2. 分工合作时尽量避免同时修改同一文件的相同区域。如果实在不可避免,那么任务重合的同学们要做好沟通。
  3. 在完成自己的代码准备发起 pr时,及时 rebase 准备合并新的分支,方便审查的同学进行整合和 review 。
(二)敏感数据

打到这行已经很困很困的时候,将 API 密钥,个人信息等敏感内容误推送到仓库也是有可能的。在此情况下,采用这次作业中介绍的 git-filter-repo 这样的工具也只能作为最终手段,亡羊补牢。

要从根源上防控此类风险,关键还是在于在搭建仓库伊始将可能含有敏感信息的配置文件都写入 .gitignore ,开发的同学时刻保持细心以及审查的同学在 review 时仔细审核、及时止损。

(三)数据丢失

虽然是小概率事件,但是不当的删除、故障的硬件、手滑的删库以及坏蛋的攻击都能导致数据丢失。因此,我们有必要对仓库做好备份,以及对 git history 进行适当的审计(此时,规范清晰的 commit message 就显得尤为重要),有备无患。

(四)依赖管理

项目往往依赖大量的外部库、框架和工具,这些依赖项的版本问题、兼容性问题还有其他神奇的小 bug 都可能影响项目的正常运行。对于我们这一意向展开跨平台开发的组而言,更需要关注处理好依赖管理问题。为此需要我们记录好依赖项版本与其他信息;同时,也要做好充分的软件测试,模拟不同的运行场景;最后在引入新的包时进行适当的讨论,不要写到哪加到哪,保障好项目的稳定。

心得体会

这次任务大家线下一起完成的,效率还算比较高。下面让我们来一起看看大家有什么心得吧。

https://kcndrjeyd269.feishu.cn/sync/SrfBdlj6SsNrpxbod85cNUManWe

https://kcndrjeyd269.feishu.cn/sync/KM3vdEJQEsHtwtbZ55NcCe4RnVh

我之前使用Git bash进行操作,导致分支变动等信息无法可视化,有些git操作理解起来略微困难,再加上我总找到种种借口不去系统学习Git,因此我对许多git操作都不理解。当遇到问题时,我只能删除本地仓库后重新克隆。但这次实践中,我在队友的帮助下使用VScode进行git操作,发现分支变动等信息都被可视化了,理解起来很方便,我也因此对git更熟悉了。

此外,关于团队如何使用版本管理系统进行协作,我有了更深的理解。每个分支都有其特定的功能和操作规范,每次commit信息要遵循特定的格式,每次分支合并要提出申请后由专门的审核人员进行操作......可以说,“如何协作”本身就是一门学问。

——小呆呆(卢裕轩)

最初接触Git是学习面向对象的时候,只需要add,commit,push和pull。后来是数据库的组队,虽然也是团队合作,但是没有使用到分支,而是两个人都向同一个分支做修改。这次的Git任务让我对于Git有了更新的认识,之前远远没有挖掘到Git的强大之处--分支。”Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次“。我通过这次任务,将会深刻地改变以后的开发方式。以往我会比较抗拒使用分支,感觉一不小心就会把所有事情弄乱。而当我真正开始尝试使用分支,发现一开始的磕磕绊绊都是值得的。这会让团队开发更加高效。

除此之外,各种规范也让我感受很深。在一个严肃的开发任务中,bug的提交,commit message的格式,分支的命名都是有一个格式的。可能一开始大家不喜欢这种条条框框,但是随着项目的推进,这是让一切变得有条不紊的保障。这次任务真的可以说是收获满满。

——迷糊老师(周佳琪)

这次任务中主要是学习了与git分支相关的知识,涉及到git branch, git checkout, git pull, git merge, git rebase等指令。

我之前使用github管理项目时,虽然能暂存,提交,并push到时候仓库里去,但一涉及到多人协作(比如自己从仓库里直接动一下文件),就进入到知识盲区。

但通过这次任务,我意识到git真正的强大之处其实恰恰在于多人协作的方便。首先是git pull,其实相当于一次刷新操作,将当前分支中别人的改动更新过来。git rebase是换基操作,只要理解了rebase就可以理解这条指令,也就是将当前分支原本基于的“底座”换成新的“底座”,主要用于在上传自己的分支前同步别人对底座的更改,这对于同步并行开发来说非常重要。git branch可以查看分支,git checkout可以切换分支,-b则也可以创建分支。merge则用于在提出pr后真正将两个分支内容合并。这一套指令大致形成了一套同步并行开发的方案。

在实际任务中,我认真读了git rebase指令的介绍,并在团队做task2时,遇到了分支合并问题的时刻提出了自己的解决方案,也就是将每个人新创建的分支先rebase到dev分支,手动修改后保留他人信息后上传,并提出pr请求,由管理员审核后合并分支,与大家商讨后解决了问题。

——猪猪侠(曹玮琳)

在本次任务中学习了很多关于分支管理和冲突处理的知识,以前学习git由于是个人项目的管理,也没有涉及pull request方面的知识。在这次项目中,感谢同学们帮助了我让我了解到了对比git bash更方便的,对分支和commit更加可视化的VSCode工具,此外,附录中的分支规范和commit message规范也给我留下了深刻的印象,该在哪个分支开发,又该在哪个分支debug,哪个分支是只用来发布产品,还有commit message用的规范比起以往我随意的命名可以让队友简单直观的了解这次commit的功能。

此外,团队协作也包括了安全性的保障,比如说每次pr都需要团队的管理员进行审核,在分支合并时候解决冲突,或者是出了问题之后回退到哪个版本,这些都需要管理员来协调。总体而言,本次任务学到了很多关于分支的知识,收获很大。

——阿托士(尹祺霖)

分支管理和合并冲突:在多名成员同时修改同一文件时,产生了合并冲突。我们通过团队讨论和实际操作,学会了如何解决冲突,使用 git merge 和 git rebase 确保代码合并的正确性,尽量避免在主分支上直接操作。 协作流程和规范:除了使用 Git,我们还需要明确团队的协作流程和规范。每个成员需要遵守提交信息规范(如使用 feat、fix 等标签),并按照分支规范(如 feature、dev、release)进行操作。每个任务完成后都需要提交 Pull Request(PR)并进行代码审查。 软件操作理解:我们通过实践深入理解了 git merge 和 git rebase 的差异。git merge 会将两个分支的历史保留并合并,而 git rebase 会将分支的提交“重写”到目标分支的顶端,使历史更清晰,适合保持主分支整洁。 任务分配与责任:每个成员都需负责自己的任务,并且协同完成合并和修复工作。出现问题时需要及时沟通,避免错误影响整体进度。

——波比(王寅)

[T.4] 团队项目:团队代码管理准备的更多相关文章

  1. Eclipse集成Git做团队开发:代码管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  2. TFS - 使用微软测试管理器实现跨团队项目的测试用例管理

    在团队项目之间实现测试用例和测试计划的共享,是很多客户关注的问题.尤其在开发产品+服务的团队中,对测试用例的共享要求比较高.下面就如何在Team Foundation Server中如何实现团队项目之 ...

  3. 团队开发的代码管理(VS)

    1.文档 代码需要一个文档说明代码的基本情况,使用的组件,代码逻辑层等等 2.源代码冲突(Git) 首先需要尽可能避免冲突,公共的工具基类尽可能不动,如果需要修改也交给专人修改不能谁都上去修改 项目按 ...

  4. Android项目svn代码管理问题[转]

    用svn控制版本,svn本身是不会识别哪些该传,哪些不该传,这就导致有些关于路径的东西(比如拓展jar的路径)也被上传了,而当别人下载后,那个路径对于这个人可能完全不存在,项目编译就会出问题.用ecl ...

  5. Android项目svn代码管理问题

    用svn控制版本,svn本身是不会识别哪些该传,哪些不该传,这就导致有些关于路径的东西(比如拓展jar的路径)也被上传了,而当别人下载后,那个路径对于这个人可能完全不存在,项目编译就会出问题.用ecl ...

  6. 在Azure DevOps Server (TFS) 中修改团队项目名称

    概述 [团队项目]: 在Azure DevOps Server (原名TFS)中,团队项目(Team Project)是一个最基本的数据组织容器,包含了一个团队或者信息系统中的所有信息,包括源代码.文 ...

  7. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  8. TFS 之 彻底删除团队项目

    方式一 通过选择“齿轮图标”打开团队项目集合的管理上下文. 打开要删除的团队项目的 上下文菜单. 如果未看到上下文图标 (),则你不是在访问 Visual Studio Online,或不是项目集合管 ...

  9. <p>在我们的实际软件项目中,管理团队事实上比写代码或者实现一个客户的需求更为的有挑战性。由于编程实际上是和机器打交道,而和机器打交道,仅仅要你符合机器预定的逻辑,</p>

    在我们的实际软件项目中,管理团队事实上比写代码或者实现一个客户的需求更为的有挑战性. 由于编程实际上是和机器打交道.而和机器打交道,仅仅要你符合机器预定的逻辑, 一步步迈向解决这个问题的道路上一点都不 ...

  10. [BI项目记]-搭建代码管理环境之创建团队项目

    此篇主要介绍如何基于TFS环境创建团队项目来进行项目代码的版本管理工作,这一系列将侧重于BI项目,当然对于其它项目也同样适用. 在TFS里开始一个项目,我们首先需要创建一个团队项目. 在Team Ex ...

随机推荐

  1. ABC 386 (A~F)

    赛时做的,结果一直在卡D题.打得很失败的一场. ABC 略. D 题意可以转化为:给定\(m\)个黑色或白色的格子,其中: 每个黑色格子和\((1,1)\)作为对角线顶点,构成一个黑色矩形 每个白色格 ...

  2. Hadoop 概述(三)

    HDFS shell API HDFS作为大数据的文件系统,可以放置数据文件,列举几个常用的shell脚本命令,用法和linux中的基本类似,不过这个是hadoop里的一套,所以我们要用hadoop ...

  3. 分库分表(1) --- ShardingSphere(理论)

    ShardingSphere---理论 ShardingSphere在中小企业需要分库分表的时候用的会比较多,因为它维护成本低,不需要额外增派人手;而且目前社区也还一直在开发和维护,还算是比较活跃. ...

  4. 揭秘10种主流PLC在ModbusTCP通信中的速度表现!

    大家好!我是付工. 通透!终于把ModbusRTU弄明白了 这样看来,ModbusTCP协议太简单了 太简单了!C#轻松实现Modbus通信 前面给大家介绍了一系列关于Modbus和ModbusTCP ...

  5. useMemo和useCallback的使用

    useMemo const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); 把"创建" ...

  6. 重写equals()方法(idea生成的高效方法)

    equals 方法Object 类中的 equals 方法用于检测一个对象是否等于另外一个对象.在 Object 类中,这个方法将判断两个对象是否具有相同的引用.如果两个对象具有相同的引用, 它们一定 ...

  7. XposedAPI pg walkthrough Intermediate

    nmap ┌──(root㉿kali)-[~/lab] └─# nmap -p- -A 192.168.226.134 Starting Nmap 7.94SVN ( https://nmap.org ...

  8. Google 常用语法说明

    Google 常用语法说明 背景 Google Hacking,作为一种利用谷歌搜索引擎的强大能力来挖掘互联网中敏感或未公开信息的技巧,已成为安全研究.漏洞挖掘及信息搜集领域的重要工具. 通过精心构造 ...

  9. Linux驱动---/sys接口

    目录 一.伪文件 sys 二.led_classdev结构体 三.注册/注销LED 3.1.led_classdev_register 函数 3.2.led_classdev_unregister 函 ...

  10. 洛谷P2789 直线交点数 题解

    解题思路 考虑将直线分组,每组内直线互相平行,任意两组直线间交点数量等于两组内直线数量乘积. 分组操作使用dfs,求出交点数量后加入set去重,输出set大小. 时间复杂度O(2NN2)有点鬼畜但是可 ...