gitlab项目代码仓库管理指南(自用)

2023-11-17

gitlab项目管理流程

注意事项

  1. 任何项目开始即创建对应项目仓库;
  2. issues应覆盖项目从原始需求->项目结题过程中各环节,记录问题、解决思路等;
  3. 及时整理,及时归档;

流程图

workflow.png

git常用命令图

git_commands.png

创建项目团队

注意事项

  1. 正式项目应所属团队,对于新项目,先创建团队,再创建项目;

建立新团队

  • 选择团队Groups -> Explore groups -> Your groups

    创建子团队New Project -> New subgroup

  • 直接创建团队 Groups -> Your groups -> New Group

  • 填写团队信息

创建项目仓库

注意事项

  1. 新建项目时,注意项目名中不要出现中文;
  2. 正式项目应所属于项目团队;
  3. 项目描述应尽量简洁明了;
  4. 内部开发项目的可见性应为Private;

建立项目

通过更改Project slug修改所属团队

  • 创建项目New project

  • 填写Project nameProject slugProject description, 在Project URL选择项目团队或个人,在Visibility Level选择项目的可见性。

  • 完成空白项目创建。

在子团队下创建项目

  • 打开子团队页面
  • 创建项目 New Project
  • 填写项目信息

编辑项目

  • 编辑项目信息Settings -> General

  • 删除项目Settings -> General -> Remove -> project -> Confirm

构建项目代码目录

注意事项

  1. gitlab作为代码管理仓库,目录应仅包含必要的程序及示例,善用.gitignore进行过滤;
  2. 代码目录层级清晰,命名能反映其中内容,例如:srcexamplesmodelsasset(image...);
  3. 在初次保存提交前,应编写好readme.md文件,其中应包含如下内容:
    • 项目名称
    • 项目说明
    • 代码结构说明(可使用tree命令生成代码树)
    • 运行(Quick Start):包含运行依赖、运行步骤或使用说明
    • Changelog:版本历史说明
    • 其它说明文档(例如:FQA,接口说明,注意事项,错误码说明等)
  4. 在需要进行说明的子目录中,添加 readme.md

.gitignore

  • 操作如下:
    # 添加.gitignore至跟踪列表
    git add .gitignore
    # 查看状态,包括忽略的文件
    git status --ignored
    
    # .gitignore没起作用? 因为忽略的文件已在跟踪列表中,需要先清除
    git rm -r --cached .                    # 清除缓存 -r 表示递归删除(如果有文件夹的话) . 表示所有文件
    
    # 查看一下具体效果
    git status --ignored
    git add .                               # 重新trace file
    git commit -m "update .gitignore"       # 提交和注释
    

配置全局git信息

  • 安装Git后,打开终端,Ctrl + Alt + T(Linux) 或 Git bash here(Windows)。
  • git config --global user.name "Your name"
  • git config --global user.email "Your email"
  • 通过git config --list查看git全局信息配置

推送项目仓库

方式一: 创建新的项目仓库并推送

  • 本地创建新的文件夹,在其路径下克隆.git文件 git clone git@xxx.git
  • 创建README文件 touch README.md
  • 跟踪新增文件 git add README.md
  • 保存修改 git commit -m "add README.md"
  • 提交修改至远程仓库 git push -u origin master

方式二: 推送现有的文件

  • 切换至现有文件目录 cd existing folder
  • 初始化git配置 git init
  • 连接远程仓库 git remote add origin git@xxx.git
  • 跟踪目录下所有文件 git add .
  • 保存修改 git commit -m "Initial commit"
  • 提交修改至远程仓库 git push -u origin master

方式三: 推送现有的项目仓库

  • 切换至现有项目仓库 cd existing repo
  • 初始化git配置 git init
  • 连接远程仓库 git remote add origin git@xxx.git
  • 提交修改至远程仓库 git push -u origin --all
  • 提交版本信息至远程仓库 git push -u origin --tags

利用issues协作开发

注意事项

  1. issues应包含项目全周期中遇到的问题和解决的过程;
  2. 项目开始即可创建里程碑和issue;
  3. 按照项目需要,按照规范创建issues的相关label;

创建里程碑

  • 选择MilestonesIssues-> Milestones -> New milestone

    • 填写里程碑信息

创建labels

  • 选择labelsIssues-> labels -> New label

  • 基础labels: 按照任务所处的阶段大体分为5个基础label

    1. 需求: Demand #0033CC
    2. 设计: Design #69D100
    3. 开发: Develop #8E44AD
    4. 测试: Test #CC0033
    5. 部署: Deploy #AD8D43
  • 自定义label: 项目技术负责人可以根据issue的实际内容进行label review, 新建、修改labels,为issue增加labels。一个issue可以有很多标签,当issue较多时便于搜索和管理。

创建issues

  • 选择项目,创建issue;

  • Issues -> New issue -> 填写issue详情 -> Submit issue

  • 可通过建立issue指派任务,并选择时间节点、里程碑和标签信息。项目成员在创建issue后,请在评论区@项目技术负责人,对issuelabelsmilestoneDue Date进行确认。

  • issue建立后,相关项目人员可在该issue下,通过markdown编辑评论。

代码开发与提交

注意事项

  1. 开发人员在开发过程中应将代码提交至自己相关分支下,而不应该提交到master分支下。为保证这点,项目的权限分配就应限制除了项目负责人的开发权限为maintainer外,其他开发成员的权限均为developer
  2. 提交到master分支的代码应进行了充分的测试,确保其可用性。
  3. 代码提交前,要先拉取仓库的最新代码,并解决冲突,否则可能会造成混乱。
  4. 代码commit时,应使用正确的格式,在commit信息的开头应使用如下标签,使你的提交内容更清晰。
    feature      # 新增功能
    update       # 更新功能
    fix          # 修复漏洞
    delete       # 删除内容
    
  5. 代码commit时,可在commit的内容中添加issue的编号,将issuecommit内容绑定。
  6. 若你的项目仓库中需要包含其他的项目仓库,可使用子模块功能。合理使用子模块可以促成代码的分支,提高各项目成员开发效率。

创建开发分支

本地创建开发分支,上传至远端仓库

  • 首先需要克隆文件到本地,初始化git配置,连接远程仓库(见第3节)
  • 查看本地分支 git branch
  • 查看远程分支 git branch -r
  • 创建本地分支(不切换) git branch [name]
  • 切换本地分支 git checkout [name]
  • 创建并切换到本地分支 git checkout -b newbranch
  • 删除分支git branch -d [name] (-d选项只能删除已经参与了合并的分支,强制删除请使用-D)
  • 将名称为[name]的分支与当前分支合并 git merge [name]
  • 创建远程分支(本地分支push到远程) git push origin [name]
  • 删除远程分支 git push origin :heads/[name]

issue上创建开发分支

  • 在项目的代码开发,应该有相应的issue对应,可以在对应的issue上创建新分支,新建分支名格式:dev-*

  • 点击对应issue详情页 -> Create merge request边上下拉按钮

    1. Create merge request and branch: 创建分支并创建合并请求,合并请求信息可以再进行编辑,默认为WIP状态,这种方式创建的分支,在合并完成后会自动关闭issue

    2. Create branch: 只创建分支;

gitlab上创建开发分支

  • 在指定项目中创建分支: Repository -> Branches -> New branch

  • 从远程仓库拉取分支至本地: git pull 或者 git pull origin [name]

代码提交

  • 拉取最新代码 git pull,解决冲突(若存在)
  • 保存修改 git commit -m "update: information"
  • 保存修改并绑定issue git commit -m "fix: #issue_ident_1 #issue_ident_2"
  • 提交修改至远程仓库分支 git push origin newbranch
  • 提交修改至远程仓库主分支 git push origin master
  • 提交修改至远程仓库,同时创建新分支 git push origin newbranch:newbranch

子模块

  • 添加子模块git submodule add <仓库地址> <本地路径>
    添加成功后,在父仓库根目录将自动增加.gitmodule文件。
     [submodule "sub"]
     path = lib
     url = ssh://git@xxx/sub/sub.git
    
    并且在父仓库的git配置文件中加入了submodule段。
     [submodule "sub"]
     url = ssh://git@xxx/sub/sub.git
    
  • 初始化本地配置文件git submodule init
  • 子模块更新git submodule update
  • 快捷更新子模块git submodule update --init --recursive
  • 删除子模块git rm --cached <本地路径>

分支合并

注意事项

  1. 若希望确保请求在完工后再合并,开发人员应在merge requests的标题开头加入WIP:记号或者在评论区输入/wip。加入此记号后,除非项目负责人点击了Resolve WIP status,否则请求将无法被合并。
  2. 开发人员可以在merge requests的描述中绑定相关issue(如:fix/close #1),支持批量操作。
  3. 合并请求的审查与操作应由项目负责人负责,如有异议应及时通知相关开发人员。

开发人员发起合并请求

  • 创建合并请求Merge Requests -> Create merge request

项目技术负责人审核代码,进行合并

  • 项目技术负责人审查merge requests Todo -> Merge Requests

  • 合并分支(如需合并WIP分支,选择Resolve WIP status),点击Merge

  • 分支被成功合并

完成里程碑节点

注意事项

  1. 当项目完成一个里程碑节点时,应及时使用标签标记。标记的版本必须保证经过了充分测试,能够稳定运行。这一操作通常由测试人员完成。

  2. 标签描述应遵循打标规则。通常情况下,描述中必须写清当前的版本号,以及版本更新内容。

  3. release版本必须从对应tag标签中输出;

  4. 发布版本中需要添加日期信息; VX.Y.Z_YYMMDDhhmmss,例如V1.0.1_20211104

    描述项 说明 必须
    V 版本号起始位 True
    X 初始值为1,主版本号,1位数字 True
    Y 初始值为0,次版本号,1位数字 True
    X 初始值为0,修订号,1位数字 True
    YYMMDD 日期,年月日 False
    hhmmss 可选,24h制 False

    a. 主版本号,一般不变动,除非为全新开发,或完全重构;

    b. 次版本号,比较大的功能修改,后面更新也只针对新版本,的功能性新增;

    c. 修订号,小的修改,bug修复;

标签操作

  • 创建本地标签git tag <tagName>
  • 为特定提交打标签git tag -a v1.0 [SHA] -m "v1.0: information"
  • 推送标签git push origin :<tagName>
  • 推送所有标签git push origin --tags
  • 查看本地某个标签的详细信息git show <tagName>
  • 查看本地所有标签git taggit tag -l
  • 查看远程所有标签git ls-remote --tags origin
  • 本地标签删除git tag -d <tagName>
  • 远程标签删除git push origin :refs/tags/<tagName>
  • 检出标签git checkout -b <branchName> <tagName>
  • 切换标签git checkout <tagname>

完成开发后,输出上线版本并备份(待完善)

注意事项

  1. 详见Gitlab官方发布的Release API

整理开发相关文档

注意事项

  1. 项目结项后,为保证资料的完整性,应及时整理项目资料,并上传项目代码仓库;

  2. 对于比较大的文档文件,外网上传至百度网盘公共账号,内网上传至文档云,并在说明文档中提供链接;

  3. 按如下内容检测项目文档的完整性:

    • 项目需求相关文档
    • 项目设计相关文档
    • 代码说明文档
    • 部署相关说明文档
    • 运维文档

归档

注意事项

  1. 项目结项后,应将代码仓库归档。归档后,该仓库将默认不可见。可以通过在Gitlab修改显示设置浏览归档仓库,或取消归档属性。
  2. 归档时,为便于管理,应根据即时人员信息,修改项目成员内容。

项目归档

  • 归档Settings -> General -> Archive project

  • 查看归档仓库:下拉Last updated选择Show archived projects(only)

  • 查看已归档仓库内容(只读)

  • 解除归档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gitlab项目代码仓库管理指南(自用) 的相关文章

  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • 更改目录时 Gitlab CI 运行程序作业失败退出状态 1

    我正在使用我的个人机器作为使用 Fastlane 的 iOS 项目的运行程序 这主要是因为共享运行器没有为 iOS 设置 因为它们没有安装 Xcode 更改目录时我的作业立即失败 它是一个 shell 运行程序 根本没有其他自定义配置 有什
  • git 从存储中删除文件

    我有一个藏匿处 里面有一堆文件 但由于文件冲突 我无法应用我的存储 我已经在我的存储中发现了有问题的文件 我想将其删除 如何从存储中删除单个文件而不破坏整个文件 存储是一次提交 或者实际上是两次甚至有时是三次提交 并且您无法更改提交 那么
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont
  • 如何摆脱 gerrit 中的错误依赖关系

    看起来 当使用 gerrit 时 默认情况下所有更改都依赖于前一个更改 我不会分支进行新的更改 我只是在主分支上工作 然后将提交的更改推送到远程源 主分支 即使两次提交彼此无关 每次都会创建依赖关系 我遇到了一些问题 这让我认为我没有正确地
  • 从预提交挂钩中排除某些文件类型

    我想要一个预提交 git 钩子来检查 如果可能的话 自动删除 尾随空格 In 让 git 在提交之前自动删除尾随空格 https stackoverflow com questions 591923 make git automatical
  • git checkout HEAD -- 和有什么区别?和 git reset --hard HEAD?

    我已经查看了这个 stackoverflow 链接 但我认为我所要求的之间的细微差别是使用HEAD在结账命令中 因为他们的建议似乎不起作用 git reset hard HEAD 和 git checkout 之间有区别吗 https st
  • 执行 git stash 、 git checkout mybranch 、 git stash pop 的管道命令是什么?

    我想创建一个执行以下操作的脚本 1 git 存储 2 git checkout myBranch 3 git stash 弹出 有哪些 git 管道命令可以替代上述 git 瓷器命令 Edit 根据 Mark Adelsberger 和 T
  • git commit -m 与 git commit -am

    看起来很容易 但我就是不明白 我在我的应用程序的根目录中 这是我的工作流程 git add git commit m added a new feature some files changed git push heroku master
  • 以编程方式将工作项关联到拉取请求

    我可以得到 https www visualstudio com en us docs integrate api git pull requests get a pull request https www visualstudio co
  • 如何正确设置 Azure DevOps 和 GitHub 之间的双向同步

    我想通过执行以下操作在 Azure DevOps 和 GitHub 之间创建双向同步 使用 CI 触发器创建 Azure DevOps 管道 将更改从 Azure DevOps 存储库推送到 GitHub 中的分支 创建第二个管道 用于侦听
  • Git 只获取一个目录

    我有一名开发人员负责一个文件夹 另一名开发人员负责另一个文件夹 我想使用特定文件夹更新产品 我正在寻找类似的命令 cd myproject git pull myfolder 并期望只有 myfolder 会被更新 是否可以 好吧 我重新表
  • 有没有办法在 GitLab CI 作业中使用 OR 条件满足需求

    我正在尝试使用 gitlab ci yml 文件中的 needs 为前一阶段作业创建具有 OR 条件的作业依赖项 但无法找到解决方案 gitlab ci yml 文件 gt stages build test deploy Build jo
  • 如何更新我的裸存储库?

    我创建了一个裸存储库来发布我的存储库 但我不知道如何使用主存储库的当前状态更新裸存储库 如果您想复制主存储库中的所有对象 请在主存储库中执行此操作 git push all
  • 撤消多个文件和文件夹“git add”[重复]

    这个问题在这里已经有答案了 我执行了 git add 现在我想恢复 git add 我怎样才能做到这一点 git reset 这相当于git reset HEAD 将取消 add 更常见的是 取消暂存 所有文件 In Git revert用
  • 如何修复 Centos 上的 Git Segmentation 错误

    我收到分段错误错误 无法在服务器上提取代码 Centos 7 这就是我遇到错误的方法 通过使用以下命令来验证我的服务器是否使用 bitbucket 进行身份验证 ssh T email protected cdn cgi l email p
  • git 索引到底包含什么?

    Git 索引到底包含哪些内容 可以使用什么命令查看索引内容 感谢您的所有回答 我知道索引充当暂存区 提交的内容是在索引中而不是工作树中 我只是好奇索引对象由什么组成 我猜它可能是文件名 目录名 SHA 1 对的列表 也许是一种虚拟树 在 G
  • 本地分支显示在 GitHub 的“网络”视图上

    我们使用 Git 我们的工作流程由 dev 和 master 分支组成 它们位于 GitHub 和每个开发人员的本地存储库上 不会直接在 master 或 dev 上执行任何工作 而是在本地分支中执行工作 并且仅在 dev 上进行合并 然后

随机推荐

  • 搭建区块链底层网络Fisco-Bcos+WeBase+Ubuntu(保姆级别)

    目录 一 前言 1 所需要准备的环境 Ubuntu20 04 2 具体虚拟机教程请参考手把手教会你安装Ubuntu虚拟机 保姆级教程 pjlpjlpjl的博客 CSDN博客 2 本文章主要讲解 3 所需文件 build chain sh c
  • 2022年数维杯数学建模C题 电动汽车充电站的部署优化策略求解全过程文档及程序

    2022年数维杯数学建模 C题 电动汽车充电站的部署优化策略 原题再现 近年来 随着化石能源的逐渐枯竭和环境污染的不断加剧 电动汽车 EV 作为传统燃油车的主要替代品之一 得到了快速的发展 据国际能源署统计 2019年全球电动私家车已达 7
  • 【Python时间复杂度和空间复杂度】

    时间复杂度和空间复杂度 1 测试运行时间示例 2 时间复杂度 2 1列表数据结构时间复杂度计算 2 2 字典数据结构时间复杂度计算 3 空间复杂度 4 参考链接 算法分析是基于每种算法使用的计算资源量来比较算法 我们比较两个算法 说一个比另
  • 解决阿里推送sdk 3.0以上初始化报“init cloudchannel failed -- errorcode:10212 -- errorMessage:静默连接进程未初始化”的问题

    解决方案如下 Override public void onCreate super onCreate 注意 这句要放到最前面执行 必须是 在 android process channel initCloudChannel this 我的
  • 顺序查找(C语言)

    include
  • 一道面试题就能测出你的JavaScript水平

    function Parent this a 1 this b 1 2 this a this c demo 5 this show function console log this a this b this c demo functi
  • 单片机通信数据延迟问题排查

    1 问题说明 笔者在最近的项目中 发现系统的响应延迟较高 经过排查 排除了单片机运行卡死的问题 2 原因分析 具体排查过程这里就不细致说明了 直接给出排查后原因 任务执行周期规划不合理 导致freertos队列发送接收到的命令有延迟 为了便
  • sublime 代码提示插件

    Sublime Text 2是个相当棒的编辑器 这一点异次元和Lucifr的文章都介绍的很充分了 用了一段时间觉得Sublime确实 性感 而 强大 只是Sublime Text 2毕竟是一款 编辑器 而非 集成开发环境 IDE 在很多ID
  • Vue3.0组件—banner轮播图(渐入渐隐效果)

    Vue3 0组件 banner轮播图 渐入渐隐效果 组件产生 最近遇到一个需求 项目首页banner轮播 开始是直接使用element3 0的el carousel走马灯效果 但是产品觉得切换太快 给用户的体验效果不好 经过多次修改产品给出
  • 【网络编程】应用层协议——HTTP协议

    文章目录 一 HTTP协议基本认识 二 URL的认识 2 1 urlencode和urldecode 三 HTTP协议格式 3 1 HTTP请求与响应格式 3 2 如何保证请求和响应被应用层完整读取 3 3 请求和响应如何做到序列化和反序列
  • 查看用户表空间

    权限大的能查询权限小的内容 dba tablespaces 系统级别的管理员查看的数据字典 dba users 系统级别的管理员查看的数据字典 user tablespaces 普通用户以及系统级别管理查看的数据字典 user users
  • 数学:凸包算法详解

    一 概念 凸包 Convex Hull 是一个计算几何 图形学 中的概念 在一个实数向量空间V中 对于给定集合X 所有包含X的凸集的交集S被称为X的凸包 X的凸包可以用X内所有点 X1 Xn 的线性组合来构造 在二维欧几里得空间中 凸包可想
  • 海思芯片(hi3516dv300)uboot镜像生成过程详解

    1 前言 1 本文介绍的uboot编译过程是基于海思提供SDK包里的uboot源码进行编译 具体的编译参数是根据hi3516dv300芯片来设置的 编译生成的uboot烧录镜像也是用于hi3516dv300芯片的uboot镜像 2 对于Ma
  • 4.1 独立键盘检测

    题目 用数码管的前两位显示一个十进制的数 00 59变化 开始显示00 每按下S2键一次 数值加1 每按下S3键一次 数值减1 每按下S4键一次数值归零 按下S5键一次 利用定时器功能使数值开始自动每秒加1 再按下S5键 数值停止自动加1
  • Sqlite研究系列-1

    文章目录 简介 架构 简介 sqlite是一个开源的嵌入式关系型数据库 与常规数据库不同的地方是 零配置 没有账号概念 客户端和服务端运行在应用程序的进程空间 不需要网络配置 sqlite可以编译到应用程序中 依赖于文件系统 占用资源少 支
  • mpu6050数据实时发布到mqtt服务器

    vcc 5V SDA i2c数据 pin3 SDL i2c时钟 pin5 GND import smbus import SMBus module of I2C import time import math import json imp
  • 顺序表插入元素

    顺序表在插入元素时应注意 1 插入元素不可以插在最后一个位置 2 插入元素不可以插在超过顺序表的长度 代码实现 include
  • iOS下XMPP开发之XMPP开发环境配置(二)mac上搭建openfire服务器

    一 下载并安装openfire 1 到http www igniterealtime org downloads index jsp下载最新openfire for mac版 比如 Openfire 3 8 1 下载后的文件 openfir
  • XSS跨站脚本攻击(一)----XSS攻击的三种类型

    一 简介 什么是XSS 百度百科的解释 XSS又叫CSS Cross Site Script 跨站脚本攻击 它指的是恶意攻击者往Web页面里插入恶意html代码 当用户浏览该页之时 嵌入其中Web里面的html代码会被执行 从而达到恶意用户
  • gitlab项目代码仓库管理指南(自用)

    gitlab项目管理流程 注意事项 任何项目开始即创建对应项目仓库 issues应覆盖项目从原始需求 gt 项目结题过程中各环节 记录问题 解决思路等 及时整理 及时归档 流程图 git常用命令图 创建项目团队 注意事项 正式项目应所属团队