git原理与上传

news2024/11/26 19:56:22

言:

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的其他操作,我们有多余时间可以进行学习,把最重要的几个命令和原理一定要掌握好。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3DMax使用 MCG实现简单克隆修改器

3DMax中的MCG工具集允许用户创建几种不同类型的插件。在这个例子中,我们正在创建一个简单的克隆修改器。 将修改器添加到对象时,将使用“数量”整数值克隆网格n次,并使用X、Y和Z中的“缩放”、“旋转”和“移动”微调器控制每个网格的偏移。…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第二个BOSS燥郁的毛里克

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作游戏第二个BOSS燥郁的毛里克 1.导入素材和制作相关动画1.5处理玩家受到战吼相关行为逻辑处理2.制作相应的行为控制和生命系统管理3.制作战斗场景和战斗…

springboot-整合多数据源配置

简介 主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。 一、表结构 在本地新建两个数据库,名称分别为db1和db2,新建一张user表,表结构如下: SQL代码: CREATE TABLE `user` (`id` int(11) NOT …

LeetCode 热题100 之 回溯1

1.全排列 思路分析1(回溯):要生成一个不含重复数字的数组 nums 的所有可能全排列,我们可以使用回溯算法。这种算法通过递归的方法探索所有可能的排列组合,并在合适的时机进行回溯,确保不会遗漏任何排列。回…

笔记整理—linux驱动开发部分(4)驱动框架

内核中,针对每种驱动都设计了一套成熟的、标准的、典型的驱动框架,实现将相同部分实现,不同部分留出接口给工程师自行发挥。具有以下特点:①简单化;②标准化;③统一管控系统资源;④特定化接口函…

靠谷歌广告赚了100美刀,程序员可以照这个思路去干

复制网站盈利尝试:谷歌广告收入之路的挑战与反思 背景介绍 在互联网的浩瀚海洋中,网站复制现象屡见不鲜。近期,我尝试复制了一个名为网站B的核心代码,并成功发布了自己的网站。通过谷歌搜索引擎的优化(SEO&#xff0…

Windows 10/11 设置锁屏密码的方法以及设置PIN密码

Windows 10/11 设置锁屏密码的方法 一、打开设置: 按 Win I 快捷键打开“设置”。 二、进入账户设置: 在设置窗口中点击“账户”。 三、选择登录选项: 在左侧菜单中选择“登录选项”。 四、添加密码: …

Python并发编程库:Asyncio的异步编程实战

Python并发编程库:Asyncio的异步编程实战 在现代应用中,并发和高效的I/O处理是影响系统性能的关键因素之一。Python的asyncio库是专为异步编程设计的模块,提供了一种更加高效、易读的并发编程方式,适用于处理大量的I/O密集型任务…

当软件质量遇上计划性报废:测试行业该如何应对?

那天,我像往常一样开车在路上,车窗外的风景飞快掠过。就在这时,我在听的一档播客里,突然提到了一个让我不得不停下来思考的词——“计划性报废”。这个词让我愣了一下,伴随着车轮的转动,我的思绪也随之转了…

【Seed-Labs】SQL Injection Attack Lab

Overview SQL 注入是一种代码注入技术,利用的是网络应用程序与数据库服务器之间接口的漏洞。当用户输入的信息在发送到后端数据库服务器之前没有在网络应用程序中进行正确检查时,就会出现这种漏洞。 许多网络应用程序从用户那里获取输入,然…

linux笔记(DNS)

一、概念 DNS(Domain Name System)DNS 是一种分布式网络目录服务,主要用于将人类易于记忆的域名(如 www.example.com)转换为计算机可识别的 IP 地址(如 192.168.1.1)。它就像是互联网的电话簿&a…

【计网】实现reactor反应堆模型 --- 框架搭建

没有一颗星, 会因为追求梦想而受伤, 当你真心渴望某样东西时, 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 前言2 框架搭建3 准备工作4 Reactor类的设计5 Connection连接接口6 回调方法 1 …

minikube 的 Kubernetes 入门教程--(五)

本文记录 Minikube 在 Kubernetes 上安装 WordPress 和 MySQL。 这两个应用都使用 PersistentVolumes 和 PersistentVolumeClaims 保存数据。 在深入这些步骤之前,先分享来自kubernetes.io教程。 链接>>使用持久卷部署 WordPress 和 MySQL | Kubernetes 获…

算法详解——链表的归并排序非递归解法

算法详解——链表的归并排序非递归解法 本文使用倍增法加上归并排序操作实现了对链表的快速排序,比起一般的递归式归并排序要节省空间并且实现要简单的多,比起一般的迭代式归并排序实现也要简单。 1. 题目假设 给定链表的头结点 head ,请将其…

【网络-交换机】生成树协议、环路检测

路由优先级 路由优先级决定了在多种可达的路由类型中,哪种路由将被用来转发数据包。路由优先级值越低,对应路由的优先级越高,优先级值255表示对应的路由不可达。一般情况下,静态路由的优先级为1,OSPF路由优先级为110&a…

确定图像的熵和各向异性 Halcon entropy_gray 解析

1、图像的熵 1.1 介绍 图像熵(image entropy)是图像“繁忙”程度的估计值,它表示为图像灰度级集合的比特平均数,单位比特/像素,也描述了图像信源的平均信息量。熵指的是体系的混乱程度,对于图像而言&#…

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

Module 16 Wire Editing 这个章节的学习目标是学习如何在innovus中手工画线,切断一根线,换孔,更改一条net shape的layer和width等等。这个技能是每个数字IC后端工程师必须具备的。因为项目后期都需要这些技能来修复DRC和做一些手工custom走线…

除草机器人算法以及技术详解!

算法详解 图像识别与目标检测算法 Yolo算法:这是目标检测领域的一种常用算法,通过卷积神经网络对输入图像进行处理,将图像划分为多个网格,每个网格生成预测框,并通过非极大值抑制(NMS)筛选出最…

ProCalun卡伦纯天然万用膏,全家的皮肤健康守护

受季节交替、生活环境变化、空气污染等方面因素的影响,加上作息不规律导致的免疫力降低,我们或多或少会出现一些如湿疹、痤疮、瘙痒之类的皮肤问题,且反复概率很高。很多人盲目用药,甚至诱发激素依赖性皮炎。所以近年来&#xff0…

Vue 自定义icon组件封装SVG图标

通过自定义子组件CustomIcon.vue使用SVG图标&#xff0c;相比iconfont下载文件、重新替换更节省时间。 子组件包括&#xff1a; 1. Icons.vue 存放所有SVG图标的path 2. CustomIcon.vue 通过icon的id索引对应的图标 使用的时候需要将 <Icons></Icons> 引到使用的…