团队的代码仓库地址

[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. runoob-matplotlib(python)

    https://www.runoob.com/matplotlib/matplotlib-tutorial.html Matplotlib 教程 Matplotlib 是 Python 的绘图库,它能 ...

  2. 分布式事务---2PC和3PC原理TCC事务

    分布式事务(1)---2PC和3PC原理 分布式事物基本理论:基本遵循CPA理论,采用柔性事物特征,软状态或者最终一致性特点保证分布式事物一致性问题. 分布式事物常见解决方案: 2PC两段提交协议 3 ...

  3. AI编程:Coze + Cursor实现一个思维导图的浏览器插件

    这是小卷对AI编程工具学习的第3篇文章,今天以实际开发一个思维导图的需求为例,了解AI编程开发的整个过程 1.效果展示 2.AI编程开发流程 虽然AI编程知识简单对话就行,不过咱要逐步深入到项目开发中 ...

  4. IDEA打开多个项目

    IDEA默认的情况下只能打开一个项目,即使添加了一个项目也会弹出一个窗口,将添加的项目显示在新的窗口中.通过下面操作可以,使IDEA打开过个项目. 1.1 打开项目结构 1.2 添加多个项目 点击&q ...

  5. 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)

    一.基础原则 1️⃣ 说人话最重要 "不用专业术语,就像和朋友聊天一样描述需求". ️ 错误示范:"请用SWOT分析法输出新能源汽车行业报告". 正确示范:&q ...

  6. python接入百度智能云API实现ai对话

    python接入百度智能云API实现ai对话 千帆大模型平台-百度智能云千帆 代码段: import requests import json # 获取访问令牌的函数 def get_access_t ...

  7. 甲壳虫ADB助手-让你轻松不用电脑就能卸载电视自带软件

    甲壳虫ADB助手是一款非常使用的安卓ADB调试工具,它适用于各种安卓系统设备,包括手机.平板.手表和电视等等,可以帮助用户直接在手机上对设备进行ADB调试,而且不需要ROOT,支持无线配对连接,让用户 ...

  8. 【BUUCTF】Hack World 1

    [BUUCTF]Blacklist (SQL盲注) 题目来源 收录于:BUUCTF CISCN2019 华北赛区 Day2 Web1 题目描述 纯粹的SQL注入题 当输入1时,返回字符串:Hello, ...

  9. Ai 系列 —— DeepSeek 初步介绍

    DeepSeek 初步使用介绍 背景 Ai 正在慢慢在改变我们的生活,比如老一辈可能已经在用豆包(字节跳动推出的AI聊天机器人) 前端开发,某些公司内部已在使用图生文(设计稿生成前端代码) 网上也有许 ...

  10. 仿京东短信验证码UI效果(鸿蒙)

    整体思路: 外层Stack布局,里面TextInput组件用来调起键盘,Row布局中循环出四个Text组件,Row布局覆盖在TextInput组件上,用来展示输入的数字. 定义两个参数,code用来接 ...