git原理与上传

言:

git是一个软件,gitee/github是一个网站,这里有什么联系吗?我们身为一个程序员不可能不知道github,但是毕竟这是外国的网站,我们不翻墙的情况下,是无法访问的(或者就是太慢了,或者就是英语不好的同学不想使用),所以可以使用中国的平替gitee。我们一般通过它用来上传代码,但是各位可能都不清楚这到底是个啥?

因为我们以后可能会进行系统重装,所以一定要把文件上传到gitee/github中

今天我们就要来彻底搞懂它。

一、版本控制

这里引入一个小故事:

        你的老师今天布置了一个作业,也就是C语言实验报告。此时你的朋友张三很积极,直接就完成了,并交给了老师,老师看了说:“同学,你这个代码无法运行,回去修改一下。”之后张三回去修改了一番并有交给了老师,但是老师又给张三打了回去,说错误还是很多。张三又修改又交给了老师,老师不耐烦了说:“你把第一个原始内容给我就行了。”张三傻眼了,他根本不知道他的初始报告。

        但这时你就很聪明,你向张三进行了取经,知道了这个老师很刁钻,于是你先把你的第一版本交给老师,老师说不行,回去改。于是你在你电脑上拷贝了一份版本1(对于git来说就是记录修改日志),之后修改完以后又给老师,老师说不行。于是你又复制复制一份版本2,之后又修改交给老师,老师说:“哎呀,把你的第二版给我就行了。”于是你早有预备,之后就直接把版本2交给老师,老师又说:“哎呀,也不行,把你第一版给我就行了。”于是你又把第一版给他。那么好,你老师就老实了,AUV?这人不好搞啊,于是就让你过了。

        此时你的同学们也有很多人没有提交,你就把你的二维码贴到了教室门口,就是说大家都把文件交给你,你负责管理他们给你的这些文件(注意这是例子),你帮他们存储起来,当他们老师要特定版本的时候,你就发给他们。

        但是人太多了,你压力山大,没有那么多的精力搞这些。于是你就写了一个XX.exe执行程序,专门来存储这些文件。之后你就把这个XX.exe程序放在了一个服务器上。

        于是大家现在扫码就会下载一个程序,之后大家就把自己写的文件直接放在这个XX.exe中即可。

        此时你的XX.exe程序被一个清华大学的小王同学发现了,他感觉很好用,于是他把你的XX.exe程序升级成了一个网站(具体做法我也无从得知,毕竟人家是清华的),它允许所有人把文件上传到这个网站,当然这个网站就是根据你的程序做的。

以上我们说的XX.exe程序就相当于git,升级成为的网站就相当于gitee/github。

我们随意向老师提交各个版本,这也就叫做版本控制。

二、为什么要提交到网站上?

在window/Linux中的操作叫做git本地版本控制(这也叫做去中心化)。但是如果此时电脑坏了或者磁盘坏了,就需要去进行网络连接,也就是说gitee/github也就像云盘一样,会帮你把文件都保存在其他服务器上。

所以每一个人都可以把自己的文件都同步到服务器上。这个过程就叫同步。git也就是去中心化分布式的进行数据存储。

提交到网站上可以方便你的保存你的代码,以便你的磁盘出现问题无法修复。 

这里还有一个小故事:

        git的作者是谁?最开始的时候都是一些闭源的公司做这些项目的,但是LinuxOS是一直升级的,它就需要来保存历史版本。但是我们的林纳斯·本纳第克特·托瓦兹(也就是Linux作者)不会搞这些东西,但是有git这样的软件公司找Linux合作,免费记录各个Linux的版本,于是Linux历史版本也就保存在这个软件公司。但是后来Linux中有贡献代码的人爆出了这个软件公司的bug,软件公司很生气,于是就终止了与Linux的合作。

        但是合作期间,由于要开源别人才能看你的代码,所以林纳斯·本纳第克特·托瓦兹了解很多关于软件公司的源代码,又因为闭源不符合开源的精神,于是林纳斯托瓦兹写了一个开源的git(据说是花费了两个星期),所以git的作者就是林纳斯托瓦兹。

我们平时使用的是gitee,这是中国基于git写的网站,加快了访问速度(因为github是国外的)。

三、git原理和提交

1.git命令集合

git clong 链接 --- 获取远端仓库

git status --- 查看git仓库的状态

git add test.c --- 文件添加到git中(git的暂存区)

git commit -m "" --- 比如: git commit -m "添加第一个源代码test.c"

git push --- 进行本地仓库和远地仓库的同步

git log --- 查看git提交信息

git pull --- 同步远端仓库

2.创建仓库

我们必须先下载git。

sudo yum install -y git

 此时我们需要有gitee/github账号,以下使用gitee举例。

首先要新建仓库

这个仓库的名字为git_delete,之后点击克隆。

此时我们把仓库克隆下来: 

本地仓库就是把修改记录保存在本地中,此时我们进入本地仓库(仓库本职业就是文件夹):

之后创建一个test.c文件,并写入以下内容:

此时我们创建了一个test.c文件放在了这个git_delete文件(仓库)中,但此时test.c和git没有任何关系。

当我们把源文件放入仓库中,默认这个源文件与项目没有任何关系。

add + commit才是正式把文件添加到本地git当中。

3.git仓库的结构

我们先来看git仓库的结构:

4.提交步骤 

当我们add的时候,先提交到.git的暂存区中(index文件中),commit生成id添加到objects文件中。

我们commit之后tree .git查看文件目录: 

此时我们再次进行状态查询:

此时我们就可以去官网查看我们提交的代码是否成功了:

此时查看git提交日志:

5.(.gitignore文件)

接下来我们看.gitignore文件的作用。

此时我们再.gitignore文件中添加*.txt内容。

此时我们再新建一些文件,其中包含test.txt文件:

此时打开网站观察结果:

6.配置git

当你首次执行git的push时可能会有这两条语句:

git config --global user.name "Your Name"
git config --global user.email you@example.com

此时我们可以配置以下,以便以后减少bug。 

7.Windows和Linux共同管理仓库

此时还有一些问题,我们在Windows中新建了一个仓库,之后又在Linux中建了一个仓库,能不能同时对一个仓库进行管理呢?

前提是Windows中也要下载对应软件(git,小乌龟等)。此时在Windows中复制仓库连接,克隆在一个文件夹中。

此时在Windows中新建一个Windows文件夹并向其中写一个HelloWindowsGit.c的文件:

并提交这个git_delete文件(仓库),步骤一样:add , commit,  push。

之后页面点击OK,之后点击"commit":

之后就是一路OK即可。此时去网站上查看:

但是此时你的Linux中仓库并没有修改。

此时我们先将之前的进度条代码再Linux中上传到远端仓库中(注意还是先add + commit):

此时有冲突,所以此时我们要先同步远端仓库,之后才能提交(要求本地仓库和远端仓库必须保持一致)。此时需要执行git pull,将远端仓库在本地同步:

因为我们刚才已经add + commit了,所以此时直接push即可。

所以Windows中也会存在同样的问题,此时我们也需要pull一下。 

8.代码的修改 

此时我们在Windows中将process文件中的test.c进行修改:

并也在Linux中的processbar文件中修改test.c代码:

并在Windows中提交:

此时我们在Linux中add + commit之后push,输入密码之后发现报错,此时pull一下(一定要先add + commit),并打开test.c文件发现我们要手动修改:

修改完成之后,再次add + commit + push,最后在Windows中pull一下即可,之后观察代码:

Linux和Windows同时使用会冲突,利用pull解决冲突。如果修改了同一个文件的.git不会覆盖,会把修改暴露出来,交由程序员解决。 

9.Windows红点的问题 

此时我们先来看一个问题,此时你又新建了一个文件并add,但是你给关掉了add的界面,此时你就无法上传该文件,要这样解决:

此时你想又把整个git_delete文件上传到远端仓库中,但是你会发现它发不现你的新文件,此时右击该文件(你可以看到上传成功的文件都有绿点,没有上传成功的是红点)。

总结:

git是一个非常优秀的发明,方便我们对项目进行版本控制,大家可以多去操作熟悉里面的命令,熟能生巧。至于git的其他操作,我们有多余时间可以进行学习,把最重要的几个命令和原理一定要掌握好。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go语言的常用内置函数

文章目录 一、Strings包字符串处理包定义Strings包的基本用法Strconv包中常用函数 二、Time包三、Math包math包概述使用math包 四、随机数包(rand) 一、Strings包 字符串处理包定义 Strings包简介: 一般编程语言包含的字符串处理库功能区别…

React 入门课程 - 使用CDN编程React

1. 第一个React 注意&#xff1a;在vscode里&#xff0c;使用Live Server来运行html文件。 index.html <html><head><link rel"stylesheet" href"index.css"><script crossorigin src"https://unpkg.com/react17/umd/react.de…

苍穹外卖day09超出配送范围前端不提示问题

同学们在写苍穹外卖项目day09时调用了百度地图api来判断用户地址是否超出配送范围&#xff0c; 但是在黑马官方的课程或资料中&#xff0c;出现这样的问题时只会向用户端的控制台报错并不会提醒用户 如下图&#xff1a; 解决方法&#xff1a; 其实解决方法很简单只需要找到向…

ARXML汽车可扩展标记性语言规范讲解

ARXML: Automotive Extensible Markup Language &#xff08;汽车可扩展标记语言&#xff09; xmlns: Xml name space &#xff08;xml 命名空间&#xff09; xsd: Xml Schema Definition (xml 架构定义) 1、XML与HTML的区别&#xff0c;可扩展。 可扩展&#xff0c;主要是…

【开源项目】经典开源项目数字孪生智慧小镇——开源工程及源码

飞渡科技数字孪生小镇管理平台&#xff0c;依托自研数字孪生引擎平台&#xff0c;将5G、物联网、大数据、人工智能等数字化技术融合应用&#xff0c;采集、整合、应用小镇的规划、运营、管理等数据&#xff0c;实现特色小镇全域管理系统化以及精细化。 基于地理信息系统&#x…

探索 Move 编程语言:智能合约开发的新纪元

目录 引言 一、变量的定义 二、整型 如何在Move中表示小数和负数&#xff1f; 三、运算符 as运算符 布尔型 地址类型 四、什么是包&#xff1f; 五、什么是模块&#xff1f; 六、如何定义方法&#xff1f; 方法访问权限控制 init方法 总结 引言 Move 是一种专为区…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3

本系列文章记录“智能提醒助理”产品建设历程&#xff0c;记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级的过程&#xff0c;遇到的问题和解决方案。 一、需求出发点 智能提醒小程序 当前使用的是jdk8&#xff0c;springboot2.3,升级到jdk21和springboot3.3 学…

算法|牛客网华为机试31-40C++

牛客网华为机试 上篇&#xff1a;算法|牛客网华为机试21-30C 文章目录 HJ31 单词倒排HJ32 密码截取HJ33 整数与IP地址间的转换HJ34 图片整理HJ35 蛇形矩阵HJ36 字符串加密HJ37 统计每个月兔子的总数HJ38 求小球落地5次后所经历的路程和第5次反弹的高度HJ39 判断两个IP是否属于同…

第六十三周周报 GCN-CNNGA

文章目录 week 63 GCN-CNNGA摘要Abstract1. 题目2. Abstract3. 文献解读3.1 Introduction3.2 创新点 4. 网络结构4.1 数据分析4.2 混合深度学习框架的发展4.3 Mul4.4 CNN block4.5 GCN block4.6 GRU block4.7 注意力机制4.8 模型评估标准 5. 实验结果5.1 不同邻接矩阵的性能评价…

人工智能——小白学习指南

知孤云出岫 目录 1. **智能评测系统**2. **个性化学习路径推荐**3. **虚拟学习助手**4. **学习行为分析**5. **数据驱动的教学决策**6. **自动化课程推荐**7. **数据隐私与安全保护** 人工智能知识点的总结和学习路线&#xff0c;以数据表格形式呈现&#xff0c;并附带在教育行…

「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用

在鸿蒙应用开发中&#xff0c;Canvas 组件不仅用于基础绘图&#xff0c;还提供了处理复杂路径和渐变效果的多种手段&#xff0c;帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。 关键词 Canvas 组件复杂路径绘制渐变填充 一、Canv…

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可&#xff0c;无特殊要求 PyCharm 2023.3.5&#xff08;下最新版本即可&#xff0c;无特殊要求&#xff09; 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…

【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

鸿蒙进阶篇-网格布局 Grid/GridItem(二)

hello大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天让我们来继续学习鸿蒙进阶篇-网格布局 Grid/GridItem&#xff0c;上一篇博文我们已经学习了固定行列、合并行列和设置滚动&#xff0c;这一篇我们将继续学习Grid的用法&#xff0c;实现翻页滚动、自定义滚动条样式&…

【笔记】变压器-热损耗-频响曲线推导 - 04 额定功率处损耗特性

0.最大的问题 - 散热 对变压器这类功率器件&#xff0c;最大的问题是散热的效率。因为传统的电路基板热导率并不高&#xff0c;几乎和良性导热材料有近乎两个数量级的导热差异&#xff0c;所以&#xff0c;会采用特殊的导热技术&#xff0c;把热量尽可能快地传导到散热片。 传…

MATLAB中eig函数用法

目录 语法 说明 示例 矩阵特征值 矩阵的特征值和特征向量 排序的特征值和特征向量 左特征向量 不可对角化&#xff08;亏损&#xff09;矩阵的特征值 广义特征值 病态矩阵使用 QZ 算法得出广义特征值 一个矩阵为奇异矩阵的广义特征值 eig函数的功能是求取矩阵特征值…

深入理解单位根:如何通过单位根检验分析序列的平稳性

在时间序列分析中&#xff0c;平稳性是至关重要的概念。大多数时间序列模型&#xff08;如 ARMA 模型&#xff09;都假设序列是平稳的&#xff0c;即其统计特性&#xff08;均值、方差、自相关性&#xff09;不随时间变化。然而&#xff0c;许多实际数据并不满足这一条件&#…

书生大模型第三关Git 基础知识

关卡编号&#xff1a;L0G3000 任务一 破冰行动 fork仓库&#xff0c;注意这里不要勾选Copy branch Only!!!&#xff0c;因为后面课程中会使用到class分支&#xff1a; 克隆仓库&#xff1a; 移动分支&#xff1a; 创建自己的分支&#xff1a; 创建id.md文档&#xff0c;…

由中文乱码引来的一系列学习——Qt

前言 解决中文引起的乱码&#xff0c;并不难&#xff0c;网上一搜就有好几个方法任君选择&#xff0c;但是解决乱码的这些方法的原理是什么&#xff0c;我一直没太明白。 这次项目需要在Android环境下运行&#xff0c;而根据Qt跨平台的特性&#xff0c;我一般是在Windows环境…

python基础——05函数

一、函数 1.1 函数定义 函数定义&#xff1a;实现特定功能的代码块 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改可提高代码的可拓展性 函数三要素&#xff1a;功能、参数、返回值 函数定义的语法格式&#xff1a; 函数分类&#xff1a; 从定义的角度—…