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

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

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

相关文章

亚信安全新一代WAF:抵御勒索攻击的坚固防线

近年来,勒索攻击已成为黑客的主要攻击手段。新型勒索攻击事件层出不穷,勒索攻击形势愈发严峻,已经对全球制造、金融、能源、医疗、政府组织等关键领域造成严重危害。如今,勒索攻击手段日趋成熟、攻击目标愈发明确,模式…

Selenium 高频面试题及答案

在求职面试中,Selenium的相关知识已经成为自动化测试工程师们无法避开的热门考点。想要脱颖而出,提前了解Selenium的高频面试题及其答案显得尤为重要。这篇文章将带你快速掌握Selenium的核心考点和解答,帮助你在面试中应对自如! …

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽,行高,隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…

微服务实战系列之玩转Docker(十八)

导览 前言Q:如何保障容器云环境下etcd集群的数据安全一、安全机制身份认证必学必看1. 启动参数2. 授权命令3. 开启认证 二、应用实践1. 访问容器2. 查看认证是否开启3. 查看是否已创建用户4. 创建用户5. 开启认证6. 验证是否开启7. 验证数据 结语系列回顾 前言 etc…

如何基于pdf2image实现pdf批量转换为图片

最近为了将pdf报告解析成为文本和图片,需要将大量多页的pdf文件拆分下单独的一页一页的图像,以便后续进行OCR和图像处理,因此就需要实现将pdf2image,本文主要结合开源的pdf2image和poppler,实现了pdf转换为png格式图片…

Python小游戏23——捕鱼达人

首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 运行效果展示 接下来是示例代码: 【python】 import pygame import random # 初始化Pygame pygame.init() # 屏幕尺寸 SCREEN…

如何调整pdf的页面尺寸

用福昕阅读器打开pdf,进入打印页面,选择“属性”,在弹出的页面选择“高级” 选择你想调成的纸张尺寸,然后打印,打印出来的pdf就是调整尺寸后的pdf

《重学Java设计模式》之 原型模式

原型模式主要解决的问题就是创建重复对象,而这部分对象内容本身比较复杂,生成过程可能从库或者RPC接口中获取数据的耗时较长,因此采用克隆的方式节省时间。 案例:上机考试抽题,要求打乱题目、答案数据 工厂结构 选择题…

八,附录 A:其他发现流程示例

八,附录 A:其他发现流程示例 八,附录 A:其他发现流程示例8.1 修改后的发现流程8.2 优化后的发现流程8.3 高级发现流程 八,附录 A:其他发现流程示例 以下部分提供了关于修改后的、优化后的和高级的发现流程…

实战:看懂并分析执行计划——Clustered Index Scan

这是 Clustered Index Scan 的执行计划详情,以下是对每一行的含义及其对查询性能的可能影响的解释。 Clustered Index Scan (Clustered) 解释 Physical Operation: Clustered Index Scan (Clustered) 物理操作,表明数据库引擎在整个聚集索引上进行扫描。Clustered Index Sc…

Jenkins声明式Pipeline流水线语法示例

系列文章目录 docker搭建Jenkins2.346.3版本及常用工具集成配置(ldap、maven、ansible、npm等) docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法 文章目录 系列文章目录jenkins流水线基础1、pipeline1.1、什么是pipeline?1.2、为什么使用pi…

OceanBase中,如何解读 obdiag 收集的火焰图 【DBA早下班系列】

1. 前言 在之前的文章 遇到性能问题,如何给OceanBase“拍CT“(火焰图与扁鹊图)中,分享了obdiag 快速收集火焰图的方法,那么,紧接着的问题便是:收集到火焰图和扁鹊图之后,该如何解读…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块,适用于执行简单的命令,不支持特殊符号 案列01,批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

短期电力负荷

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月8日9点40分 论文发表 来自《IEEE Transactions on Smart Grid》2022年7月的13卷第4期,《IEEE Transactions on …

linux tigerVNC使用

简介 TigerVNC是VNC的一种高性能、平台中立实现(虚拟网络计算),一种客户端/服务器应用程序,允许用户启动远程图形应用程序并与之交互机器。TigerVNC提供运行所需的性能级别3D和视频应用程序,并尝试保持普通外观并尽可…

基于redis实现API接口访问次数限制

一,概述 日常开发中会有一个常见的需求,需要限制接口在单位时间内的访问次数,比如说某个免费的接口限制单个IP一分钟内只能访问5次。该怎么实现呢,通常大家都会想到用redis,确实通过redis可以实现这个功能&#xff0c…

uni-app小程序开发(1)

下载软件就不多赘述了。 直接上代码,写过wep端的vue看这个小程序就简单很多,不需要搞那么多麻烦事情,直接编译器就创建好了基础模版。 1、项目结构 暂时知道这么多,后续再补充 2、页面创建、导航栏设置、基础属性设置 在pages中…

【C++】哈希表封装 unordered_map 和 unordered_set 的实现过程

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

SQL,力扣题目1709,访问日期之间最大的空档期

一、力扣链接 LeetCode_1709 二、题目描述 表: UserVisits ------------------- | Column Name | Type | ------------------- | user_id | int | | visit_date | date | ------------------- 该表没有主键,它可能有重复的行 该表包含用户访问…

第七篇: BigQuery中的复杂SQL查询

BigQuery中的复杂SQL查询 背景与目标 在数据分析中,我们通常需要从多个数据源中获取信息,以便进行深入的分析。这时,BigQuery提供的JOIN、UNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例,介绍如何…