深度解析如何使用Linux中的git操作
1.如何理解版本控制 →Git&&gitee||github
多版本控制面对善变的甲方
版本控制是一种用于管理文件或代码变更的系统,帮助团队或个人追踪项目的历史记录,并支持多方协作开发。它在软件开发和文档管理中尤为重要,但也适用于其他需要追踪更改的领域。版本控制系统(Version Control System,VCS)能让你查看文件的历史版本,合并多个贡献者的修改,并在出现问题时恢复到早期版本。
git是一个客户端也是一个服务器
git是一个版本控制器
gitee||github是一个基于gitee的网站管理平台
2.Git的历史
Git是一个分布式版本控制系统,由林纳斯·托瓦兹(Linus Torvalds)于2005年创建,用于管理Linux内核的开发。它的历史充满了技术突破和社区协作的故事,以下是Git的起源及其发展过程的简要概述:
背景:版本控制的需求
在Git诞生之前,Linux内核开发团队使用的是一个名为BitKeeper的专有分布式版本控制系统(DVCS)。尽管BitKeeper在技术上表现优异,但其闭源性质对自由软件社区来说始终存在争议。
- 事件导火索:BitKeeper的授权问题 2005年,BitKeeper的免费使用许可政策发生变化,Linux内核开发团队不再能够免费使用这款工具。这一危机促使林纳斯·托瓦兹决定开发一个开源的替代品,用于满足Linux内核开发的需求。
Git的诞生
林纳斯在几天内编写了Git的第一个版本,并于2005年4月7日公布。他的目标是创建一个:
-
快速的系统:能够处理大规模的代码库。
-
简单的设计:易于使用和维护。
-
分布式架构:允许开发者在本地进行版本管理,而无需依赖中心服务器。
-
强大的数据完整性:确保版本控制中的每一项变更都可以被验证。
名称的由来
“Git” 是林纳斯对自己“幽默的”描述——在英国俚语中,“git” 是一个贬义词,意为“愚蠢的人”。林纳斯选择这个名字,部分原因是他自嘲,同时也因为名字短小且易记。
Git的早期发展
-
首次发布(2005年4月7日)
Git的第一个版本是一个极简的实现,主要用作工具链的一部分,目标是实现Linux内核的高效管理。 -
快速迭代
在随后的几个月内,Git迅速完善,加入了许多核心功能,比如分支管理和合并机制。 -
社区贡献
尽管最初是为Linux内核开发设计的,Git很快吸引了其他开源项目的兴趣,成为主流的版本控制工具。
Git的核心特性
以下几个特性奠定了Git在版本控制领域的统治地位:
-
分布式架构:每个开发者都有完整的代码库副本,支持离线开发。
-
强大的分支模型:Git的分支操作快捷高效,方便团队并行开发。
-
数据完整性:所有数据都通过SHA-1哈希加密保存,确保版本历史的安全性。
-
高效性能:特别是在处理大规模代码库时表现突出。
Git的普及
-
GitHub的出现(2008年)
Git的流行离不开GitHub的贡献。2008年,GitHub作为一个基于Git的代码托管平台上线,提供了易于使用的图形界面和协作工具,使Git更加友好。随着GitHub成为开源项目的集中地,Git也被越来越多的开发者采用。 -
企业采用
随着Git的成熟,越来越多的企业开始采用Git作为其主要的版本控制系统,取代了传统的工具如SVN(Subversion)和CVS。
Git的现状和未来
到今天,Git已成为版本控制系统的事实标准,被用于从个人项目到大型企业软件开发的各种场景。其生态系统(如GitHub、GitLab、Bitbucket)也不断扩展,为开发者提供了全面的协作工具。
- 持续改进
Git的开发仍然活跃,不断添加新功能和优化性能,以适应现代软件开发的需求。
重要的里程碑
| 时间 | 事件 |
|---|---|
| 2005年4月 | Git诞生,用于替代BitKeeper。 |
| 2005年6月 | Git 2.6发布,首次实现了完整的分支和合并支持。 |
| 2008年 | GitHub成立,推动了Git在开源社区中的普及。 |
| 2010年代 | Git成为主流版本控制系统,被各大企业广泛采用。 |
| 2020年代 | Git仍然是版本控制的领导者,持续影响软件开发的最佳实践。 |
结语
Git的成功不仅仅是技术上的胜利,更是开源文化和协作精神的体现。从解决一个具体的技术问题,到如今统治全球软件开发领域,Git的历史展示了如何通过开放和创新改变世界。
3.Git的操作
我们使用yum install git进行git工具间的安装操作
然后可以使用命令git version进行当前git版本的查看操作

我们第一次使用的时候系统会让我们输入username 和我们email

我们先进行gitee仓库的创建,然后点击这个克隆/下载就行了

我们将这个链接进行复制的操作
就是相当于我们拿到了这个仓库的链接
我们现在这Linux中将我们的远端仓库拉取到我们的Linux终端里面
输入命令 git clone [https://gitee.com/caijiuuyk/c-learn.git](https://gitee.com/caijiuuyk/c-learn.git)将我们gitee中的仓库拉取到本地

然后我们就成功的将我们的远程仓库克隆到本地了

我们进入到这个克隆的仓库
可以看见我们的仓库里面的文件都被克隆下来了
我们可以发现我们的当前目录下存在一个.git文件,这是一个目录,这个被称为隐藏的本地仓库

.git里面包含的是我们所有的历史修改记录
git在提交的时候,只会提交变化的部分
那么现在我们就能在当前的目录下进行代码的新增操作了

我们创建一个code.c的文件,写下一段简单的代码保存并退出
所以我们当前文件夹下就多出了一个源文件了
但是我们的这个文件并没有被添加到.git仓库里面
我们使用命令git add code.c将我们的文件添加到.git仓库,但是还是没有添加到本地仓库里面
我们仅仅只是将文件添加到我们的暂存区里面
我们现在创建一个code1.c的文件,并且将我们的code.c的内容重定向操作到code1.c里面
[kk@hcss-ecs-28de c-learn]$ touch code1.c
[kk@hcss-ecs-28de c-learn]$ vim code1.c
[kk@hcss-ecs-28de c-learn]$ cat code.c
#include <stdio.h>
int main()
{printf("新年快乐!!!");return 0;
}
[kk@hcss-ecs-28de c-learn]$ cat code.c > code1.c
[kk@hcss-ecs-28de c-learn]$ cat code1.c
#include <stdio.h>
int main()
{printf("新年快乐!!!");return 0;
}
[kk@hcss-ecs-28de c-learn]$

我们再次将这个文件添加我们的暂存区
git add code1.c
这个暂存区可以进行多次的添加操作
这个时候我们.git内部就有一个git仓库了
那么现在我们能直接将我们前几次添加到暂存区的文件推送到我们的git仓库里面
那么有了这个暂存区我们可以在本地进行多次add,然后一次进行提交的操作

我们可以使用git status查看当前我们的暂存区中的新添加的文件有哪些
[kk@hcss-ecs-28de c-learn]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: code.c
# new file: code1.c
#
[kk@hcss-ecs-28de c-learn]$

如果我们不想让这个文件提交的话我们可以使用git reset HEAD <filename>将这个文件在暂存区进行删除操作。将添加的文件移除操作
那么现在我们想一次性将这两个文件提交到我们的本地仓库里面
我们使用命令git commit -m "新增两个源文件"
这里的-m就是我们的日志信息,这个选项我们一定要进行添加的操作
-m后面的介绍一定要清楚
我们可以使用git log查看我们的提交的历史

但是我们现在需要将我们本地的仓库和远端的仓库进行同步的操作,那么我们该怎么做呢?
那么这里的第三步就是git push了,提交/同步

我们需要记住我们的账号密码才能在Linux上面进行代码的提交操作
如果我们将本地的这个gitee的仓库删除了
我们想要查看我们历史提交的文件
我们直接再次将这个仓库克隆到本地就行了
因为我们的git的版本管理只进行管理源文件,所以像obj、exe后缀的文件我们是不接收的
但是我们怎么将这些文件进行忽略呢?
我们的git仓库里面存在一个隐藏文件gitignore
可以忽略掉非源文件

我们直接将obj类的文件添加到非上传的名单里面
我们添加两个.c文件
这里我们使用git status可以查看到系统检测到我们的的.gitignore文件是被修改了的
以及新增了一个test2.c文件
没有我们上面创建的obj文件,说明已经被忽略了

我们按照正常流程进行推送到gitee的操作
我们只会将我们的修改的gitignore和我们新增的源文件进行上传
其他的文件是会被忽略的
gitignore里面保存的是我们需要忽略的特定后缀的文件列表
下面是我们在Linux进行源文件的上传提交操作

在Windows里面进行git的操作
我们确保我们的Windows里面装了gitee
安装的地址:https://git-scm.com/downloads/win

我们直接在对应的命令行进行源代码文件的push就行了
我们如果在Windows版本下进行代码的更改操作的话,我们在Linux再进行更改一次的话这个我们是否能再次进行更改操作呢?

因为我们的这个代码文件冲突了,我们Windows里面已经对这个文件进行修改了
我们在Linux里面再次进行修改的话是不可行的
那么我们如何进行解决操作呢?
输入命令git pull将远端和本地进行同步操作
直接将我们在Windows上面进行的修改同步到了我们Linux这里了
远端仓库相比较任何人都是最新的
为什么会出现冲突?提醒本地用户,你要和远端仓库进行同步的操作
相关文章:
深度解析如何使用Linux中的git操作
1.如何理解版本控制 →Git&&gitee||github 多版本控制面对善变的甲方 版本控制是一种用于管理文件或代码变更的系统,帮助团队或个人追踪项目的历史记录,并支持多方协作开发。它在软件开发和文档管理中尤为重要,但也适用于其他需要追…...
el-table 合并单元格
参考文章:vue3.0 el-table 动态合并单元格 - flyComeOn - 博客园 <el-table :data"tableData" border empty-text"暂无数据" :header-cell-style"{ background: #f5f7fa }" class"parent-table" :span-method"obj…...
Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩
Redis 作为高性能的内存数据库,广泛应用于缓存场景。然而,在实际使用中,可能会遇到三大经典问题:缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致系统性能下降甚至崩溃。 1. 缓存穿透 问题描述 …...
常用字符串处理函数
常用字符串处理函数 strcspn函数原型参数说明返回值使用示例注意事项 strpbrk函数原型参数说明返回值使用示例 strcasecmp函数原型参数说明返回值使用示例注意事项 strcspn strcspn 是一个 C 和 C 标准库函数,用于计算一个字符串中不包含任何指定字符的最长前缀的长…...
Pathview包:整合表达谱数据可视化KEGG通路
Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包,其会先下载KEGG官网上的通路图,然后整合输入数据对通路图进行再次渲染,从而对KEGG通路图进行一定程度上的个性化处理,并且丰富其信息展示。(KEGG在线数…...
seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢
python 好的,使用 Python 来监控 Chrome 的调试数据并获取控制台信息,可以使用 websocket-client 库来连接 Chrome 的 WebSocket 接口。以下是一个详细的示例: 1. 安装必要的库 首先,你需要安装 websocket-client 库。可以使用…...
SQL中的数据库对象
视图:VIEW 概念 ① 虚拟表,本身不存储数据,可以看做是存储起来的SELECT语句 ② 视图中SELECT语句中涉及到的表,称为基表 ③ 针对视图做DML操作,对影响到基表中的数据,反之亦然 ④ 创建、删除视图本身&#…...
DeepSeek:性能强劲的开源模型
deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型 DeepSeek-V3 为自研 MoE 模型,671B 参数,激活 37B,在 14.8T token 上进行了预训练。 论…...
医疗可视化大屏 UI 设计新风向
智能化交互 借助人工智能与机器学习技术,实现更智能的交互功能。如通过语音指令或手势控制来操作大屏,医护人员无需手动输入,可更便捷地获取和处理信息。同时,系统能根据用户的操作习惯和数据分析,自动推荐相关的医疗…...
从企业级 RAG 到 AI Assistant , Elasticsearch AI 搜索技术实践
文章目录 01 AI 搜索落地的挑战02 Elasticsearch 向量性能 5 倍提升03 Elasticsearch 企业版 AI 能力全面解读04 阿里云 Elasticsearch 将准确率提升至 95%05 AI Assistant 集成通义千问大模型实现 AI Ops01 AI 搜索落地的挑战 在过去一年中,基座大模型技术的快速迭代推动了 …...
TypeScript语言的并发编程
TypeScript语言的并发编程 引言 随着现代应用程序的复杂性不断增加,性能和用户体验的重要性显得尤为突出。在这种背景下,并发编程应运而生,成为提升应用程序效率的重要手段。在JavaScript及其超集TypeScript中,尽管语言本身是单…...
benchANT 性能榜单技术解读 Part 1:写入吞吐
近期,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录。在…...
虚拟机防火墙管理
虚拟机防火墙管理 在网络防护方面,PVE提供了相当良好的防火墙管理功能,并且可以适用于节点实体机、客体机、让客体机内不需要另外再安装软体防火墙,对于效能与统一管理大有助益,管理者可以方便一次管理所有的防火墙规则࿰…...
Nginx反向代理请求头有下划线_导致丢失问题处理
后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到,搜索之后发现nginx默认request的header中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: unders…...
【STM32+CubeMX】 新建一个工程(STM32F407)
相关文章: 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步Cu…...
机器人避障不再“智障”:HEIGHT——拥挤复杂环境下机器人导航的新架构
导读: 由于环境中静态障碍物和动态障碍物的约束,机器人在密集且交互复杂的人群中导航,往往面临碰撞与延迟等安全与效率问题。举个简单的例子,商城和车站中的送餐机器人往往在人流量较大时就会停在原地无法运作,因为它不…...
H2数据库在单元测试中的应用
H2数据库特征 用比较简洁的话来介绍h2数据库,就是一款轻量级的内存数据库,支持标准的SQL语法和JDBC API,工业领域中,一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…...
部署HugeGraph
部署HugeGraph 这里以hugegraph1.2.0为例子,演示一下如何安装部署hugegraph 一、下载并安装JDK11 下载JDK11 https://www.oracle.com/java/technologies/downloads/#java11 使用scp命令将安装包上传到服务器 scp /path/to/local/file usernameserver_ip:/path/…...
2025年第三届“华数杯”国际赛A题解题思路与代码(Matlab版)
游泳竞技策略优化模型代码详解(MATLAB版) 第一题:速度优化模型 本部分使用MATLAB实现游泳运动员在不同距离比赛中的速度分配策略优化。 1. 模型概述 模型包含三个主要文件: speed_optimization.m: 核心优化类plot_speeds.m: …...
嵌入式基础 -- IMX8MP的 GPC 模块技术
General Power Controller (GPC) 模块技术文档 1. GPC 模块简介 1.1 模块功能 GPC(General Power Controller)模块是用于 i.MX8M Plus 应用处理器 的电源管理组件,支持以下功能: 管理 ARM Cortex-A53 和 Cortex-M7 平台的低功…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
