基于Git的代码工程管理——学习记录一

一、Git简概[1]

        Git是一个分布式版本控制系统,它跟踪任何一组计算机文件的更改,通常用于在软件开发过程中协调协作开发源代码的程序员之间的工作。其为实现快速、数据完整性以及分布式非线性工作流程(在不同计算机上运行数千个并行分支)服务。

        Git最初由Linus Torvalds于2005年编写,用于Linux内核的开发,其他内核开发人员也为Git最初的开发做出了贡献,自2005年以来,Junio Hamano一直是核心维护者。相比于大多数其它分布式版本控制系统,与大多数Client-server(客户端-服务器)系统不同,每台计算机上的每个Git目录都是一个成熟的repository(存储库),具有完整的历史记录和完整的版本跟踪能力,独立于访问网络或中央服务器。Git是在GPL-2.0-only license许可下的共享免费开源软件。

二、Github、Gitee与GitLab

        Github(Ⅰ)是一个Microsoft(微软)旗下的面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故命名为Github。Github于2008年4月10日正式上线,除了Git代码仓库托管及基本的Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱、代码片段分享等功能。目前,Github托管代码项目版本数量非常之多,而且不乏知名开源项目[2]。

        Gitee (Ⅱ)为开源中国旗下,国内第一大研发效能平台&全球第二大开源代码托管平台,主要产品为社区版、企业版、专业版、高校版、旗舰版。 Gitee 自2013 年上线以来共服务了 1000 万开发者用户,累计托管仓库超过 2500 万个,是国内首屈一指的开源软件技术交流平台; Gitee 企业版 & 专业版共服务了 26 万家企业,包括了 1200 家中大型私有化部署企业。

        GitLab(Ⅲ)是由GitLab公司开发的、基于Git的集成软件开发平台,更是最全面的人工智能驱动的DevSecOps平台(Development和Operations的混成词,是一种重视软件开发人员和IT运维技术人员之间沟通合作的文化或惯例)。GitLab具有Wiki以及在线编辑、issue跟踪、CI/CD等功能。GitLab CI/CD是GitLab内置的一款工具,用于通过持续方法论(页面存档备份)的软件开发,该持续方法论包含三个部分持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)以及持续部署(Continuous Deployment,CD)[3]。

三、Git代码项目管理实践

        本实践依托于Git-2.41.0.3Github代码项目托管平台。需要注意的是,公开仓库可以免费多人开发,而私人仓库仅限五人及以下开发。

使用Git操作文件时,文件的状态有以下三种[4]:

* 已修改(modified):修改了文件,但还没保存到本地数据库中。

* 已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

* 已提交(committed):数据已经安全地保存在本地数据库中。

针对Git文件的三种状态,从而引出了Git项目的三个工作区域[4]:

* 工作区(Working):对项目的某个版本独立提取出来的内容。简单的理解为在电脑里能看到的目录及文件内容,比如自己创建的本地项目。

* 暂存区(Staging):保存了下次将要提交的文件列表信息。按照Git的术语叫做“索引”。

* Git仓库(.git):工作区有一个隐藏的.git目录(在文件夹“查看”中勾上隐藏的项目即可显示),这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

Git常用命令[5][4]:

* git config --list                            查看配置信息

* git init                                        在工作文件夹下初始化Git管理

* git clone + 项目网页地址           克隆Github/Gitee上的开源项目到本地

* git status    查看工作区所有文件所处状态(已修改/已暂存/已提交)并提示文件跟踪状态

* git add + 文件名                         添加跟踪的新文件(即放入暂存区)

* git commit -m  + 提交日志名(版本名)提交暂存区的文件

* git diff         查看所有未暂存跟踪文件的修改差异(“-”表示修改前,“+”修改后)。若想查看具体文件,则后追加文件名。

* git diff --staged(或--cached)    查看所有已暂存跟踪文件的修改差异,具体文件同上。

git reset (+ 文件名)                重置命令,可以重置上一次操作(如移除暂存区)

   git reset --soft或--mixed或--hard + 版本可识别的独立哈希串前几位标识

   --soft     移动HEAD指针,仅回退到某个版本,保留工作区和暂存区,只回退commit信息

   --mixed  移动HEAD指向当前快照的内容来更新暂存区。回退到某个版本,只保留工作区,回退commit和add信息

   --hard    工作目录和暂存区全更新一致。彻底回退到某个版本,工作区也会变为上一个版本内容

* git restore --staged +文件名        移除暂存区文件(如日志文件、忽略文件)

  git restore + 文件名                     移除未暂存区文件(如日志文件、忽略文件)

* git log                                          查看提交日志(可获取版本标识哈希串)

  git log --pretty=oneline                 提交日志一行显示化

  git reflog                      查看引用日志(reflog保存的版本信息完整,只能自己拥有)

* git checkout -- + 文件名              从Git仓库中将上一次提交的内容检出覆盖到本地 

* git rm -f + 文件名                        强制删除未纳入版本库。同时本地与暂存区删除

  git rm + 文件名          删除已纳入版本库但未修改文件(该方式可以通过restore恢复文件)

  git rm --cached  + 文件名            移除暂存区文件但保留工作区本地文件

* git show HEAD@{reflog版本序列号}   了解具体版本变化信息

  git show HEAD~祖先迭代数        查看祖先版本,”~“和”\Lambda“为版本祖先字符

* git revert -n +  版本可识别的独立哈希串前几位标识      重做一个新版本,这个版本的内容与我们要回退的目标版本一样,但是HEAD指针是指向这个新版本,而不是目标版本。最后,需要手动commit

git revert -n 版本可识别的独立哈希串前几位标识-1~.. 版本可识别的独立哈希串前几位标识                                                           系列版本重做。起始版本不包括,即左开右闭

git revert --abort                          撤销版本重做

* git remote add 项目别名 + 远程仓库网址    添加远程仓库(先添加才能推送)

* git remote -v                                 查看远程仓库信息

* git push 远程仓库名 分支名(主支为master)  向远程仓库推送项目

* git remote rm + 远程仓库名           移除远程仓库

(一)本地Git项目对远程仓库的推送实践

        1、Github创建并添加远程仓库

        首先,初始化并提交(commit)新版本项目;然后,在项目托管平台创建好远程仓库;继而,基于”git remote add 项目别名 + 远程仓库网址“在本地添加远程仓库。

        2、Github与本地主机的认证授权(ssh)

        Github与本地主机认证授权有三种方式,分别为。选择其中一种授权认证即可,认证成功后,可在”控制面板-用户账户-凭据管理器-Windows凭据“查看网页ssh普通凭据。

        3、本地连接推送远程仓库

        基于”git push 远程仓库名 分支名(主支为master)“推送至远程仓库即可。

        4、移除远程仓库

        基于”git remote rm + 远程仓库名“移除远程仓库即可。

(二)本地克隆Github开源项目

        本实践以开发者yanx27提交的“Pointnet_Pointnet2_pytorch”开源项目为例进行(感谢yanx27无私伟大的开源精神),具体实践步骤如下:

        首先创建一个空的文件夹作为Git工作区,然后open Git Bash here,再者查找到开源项目的Local Clone HTTPS,最后执行命令“git clone + Local Clone HTTPS”即可。

(三)Git时光穿梭机实践(提交版本回溯)

        采用git_reset方式回溯版本,会使HEAD指针往回移动,从而丢失之后提交的信息;采用git_revert方式可以重做一个新的版本,这个版本内容与我们要回溯的目标版本一样,但是HEAD指针是指向这个新的版本的,而不是目标版本。

        实验过程中,使用revert重做版本时,我遇到了文件Conflict的报错,查阅了较多资料并未找到有效的解决方案,待后续学习进一步思考。

        值得注意的是,①修改后的文件需要加入暂存区再提交,这样保存的版本才是修改后的版本;②HEAD指针的切换会影响log记录;③在代码项目托管平台下载的代码仅能看到log文件,而没有reflog文件。

常用的远程仓库:

Ⅰ GitHub: Let’s build from here · GitHub

Ⅱ Gitee - 基于 Git 的代码托管和研发协作平台

Ⅲ The DevSecOps Platform | GitLab(托管控制、合规性检查、完整的数据和源代码隔离、数据驻留和专用网络,一般用于公司内网/自建服务器)

参考资料:

[1] https://en.wikipedia.org/wiki/Git

[2] 还不会使用 GitHub ? GitHub 教程来了!万字图文详解 - 知乎

[3] https://zh.wikipedia.org/wiki/GitLab

[4] 8_08-Git设计理念-三种状态三个区域_ev_哔哩哔哩_bilibili(张奇MAX)

[5] Git - Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/215628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# Convert.ToBoolean()字符串转布尔类型问题

文章目录 C# Convert.ToBoolean()字符串转布尔类型问题错误写法:Convert.ToBoolean("0") or Convert.ToBoolean("1")正确写法Convert.ToBoolean("true") or Convert.ToBoolean("false") C# Convert.ToBoolean()字符串转布尔…

Bat批处理知识点总结

批处理注释 rem 注释内容(不能出现重定向符号和管道符号)> nul echo 注释显示内容,类似于print(不能出现重定向符号和管道符号)> nul纯批处理延迟毫秒 rem 开始延迟1秒 call :delay 1000 rem 延迟结束::-------…

2、Redis变慢原因排查(下)

感觉Redis变慢了,这些可能的原因你查了没 ?(下) Redis变慢排查的上一篇【感觉Redis变慢了,这些可能的原因你查了没 ?(上)】,我们是基于Redis命令为入口,比如命令使用不得当,bigkey问题&#xf…

【Hive】——CLI客户端(bin/beeline,bin/hive)

1 HiveServer、HiveServer2 2 bin/hive 、bin/beeline 区别 3 bin/hive 客户端 hive-site.xml 配置远程 MateStore 地址 XML <?xml version"1.0" encoding"UTF-8" standalone"no"?> <?xml-stylesheet type"text/xsl" hre…

Ajax跨域请求

最近使用js构造请求时发生了CORS跨域问题&#xff0c;mark一下 ajax跨域&#xff0c;这应该是最全的解决方案了 | Dailc的个人主页Everything about dailchttps://dailc.github.io/2017/03/22/ajaxCrossDomainSolution.htmlAJAX - 廖雪峰的官方网站研究互联网产品和技术&#…

Java - JVM内存模型及GC(垃圾回收)机制

JVM内存模型 JVM堆内存划分&#xff08;JDK1.8以前&#xff09; JVM堆内存划分&#xff08;JDK1.8之后&#xff09; 主要变化在于&#xff1a; java8没有了永久代&#xff08;虚拟内存&#xff09;&#xff0c;替换为了元空间&#xff08;本地内存&#xff09;。常量池&#…

.NET Core 依赖注入 Microsoft.Extensions.DependencyInjection

文章目录 前言什么是依赖注入C# 使用依赖注入框架介绍 Microsoft.Extensions.DependencyInjectionNuget安装简单单例使用打印结果 自动装配举例自动装配测试用例打印结果自动装配执行顺序测试用例有歧义构造函数渐进式构造函数循环依赖 自动装配结论 手动装配手动注入别名注入 …

【AIGC】大语言模型的采样策略--temperature、top-k、top-p等

总结如下&#xff1a; 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索&#xff1a;GPT类模型的几个常用参数 Top-k, Top-p, Temperature

如何使用玻璃材质制作3D钻石模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

【Matlab算法】粒子群算法求解二维非线性优化问题(附MATLAB代码)

粒子群算法求解二维非线性优化问题 前言正文步骤分解代码可视化完整代码实现 前言 二维非线性优化问题是指在二维空间中寻找一个点&#xff0c;使得目标函数在该点取得最小&#xff08;或最大) 值&#xff0c;而这个目标函数是一个非线性函数。数学上&#xff0c;这类问题可以…

《Vue.js设计与实现》—Vue3响应系统的原理

一、响应式数据与副作用函数 1. 副作用函数 1-1 指令材料 在JavaScript中&#xff0c;副作用函数是指在执行过程中对外部环境产生可观察的变化或影响的函数。这种函数通常会修改全局变量、修改传入的参数、执行I/O操作&#xff08;如读写文件或发送网络请求&#xff09;、修…

计算目标检测和语义分割的PR

需求描述 实际工作中&#xff0c;相比于mAP项目更加关心的是特定阈值下的precision和recall结果&#xff1b;由于本次的GT中除了目标框之外还存在多边形标注&#xff0c;为此&#xff0c;计算IoU的方式从框与框之间变成了mask之间&#xff1b; 本文的代码适用于MMDetection下的…

gittee使用教学

一、git简介 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效的处理任何大小项目的版本管理。 核心功能&#xff1a; 项目的版本管理 团队协同开发 二、准备工作 1、下载 Git 2、除了选择安装位置以外&#xff0c;其他都无脑安装 3、检查一下安装情况 win…

C语言-每日刷题练习

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

【从零开始学习JVM | 第三篇】类的生命周期(高频面试)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。 在本文中&#xff0c;我们将深入探讨类的生命周期&#xff0c;从类加载到…

Docker Container(容器)——6

目录&#xff1a; 什么是容器&#xff1f;容器生活案例&#xff1f;为什么需要容器&#xff1f;容器的生命周期 容器 OOM容器异常退出容器暂停容器命令清单容器命令详解 docker createdocker rundocker psdocker logsdocker attachdocker execdocker startdocker stopdocker r…

用Sketch for Mac轻松创作无限可能的矢量绘图

在如今的数码时代&#xff0c;矢量绘图软件成为了许多设计师和创意爱好者的必备工具。而在众多的矢量绘图软件中&#xff0c;Sketch for Mac无疑是最受欢迎的一款。它以其简洁易用的界面和强大的功能&#xff0c;让用户能够轻松创作出无限可能的矢量图形。 首先&#xff0c;Sk…

Jmeter入门

一、下载jmeter 官网下载 下载之后解压&#xff0c;在目录/bin下面找到jmeter.bat双击之后即可启动Jmeter。 二、使用 如下左图&#xff0c;选择语言为中文&#xff0c;可以修改测试计划的名称。如下右图&#xff0c;添加线程组 添加线程组 添加http请求 路径传参方式 …

vue3-自定义组件的使用及传值!!!

1.在vue项目中创建一个自定义组件&#xff08;大多数页面中相同的样式&#xff0c;将其封装到组件中&#xff0c;可重复使用&#xff09; 2.将公共组件引入到你想使用的页面中 结果显示如下&#xff1a; 3.为公共组件传值 4.公共组件接收值&#xff0c;显示在组件上 注意事项&a…

wappalyzer基于插件的网站开发技术解析工具

一、wappalyzer 解释&#xff1a;这是一款强大的工具&#xff0c;其主要能提供一种快速、可靠地检测网站所使用技术栈的方法&#xff0c;也就说说&#xff0c;服务器发来的信息都会被它剖析&#xff0c;然后分析出前端的技术栈&#xff0c;有时后端所使用的技术栈如果网页特征…