当前位置: 首页 > news >正文

git原理解释,windows 10 / ubuntu 24.04 安装使用 github

git的原理

git是赫赫有名的Linux之父Linus Torvalds从2005年起开发的文件版本管理系统,掌控Linux内核这样一个最为重量级的世界产品的Linus为什么要开发这个东西呢?因为Linux系统由全世界的程序员协作维护,对源代码文件的版本控制管理的需求超过了任何一个软件项目,因此Linus才会为此发力。

git以前的文件版本管理软件大多为集中管理式,即完整的文件历史记录只存在于服务器,其它用户只获取自己当前工作需要的那一小部分内容,这样产生的问题就是一旦服务器不可连接,大家就无法协作,一旦服务器硬盘被损坏,整个文件的历史就丢失了,所以,这样的模式注定是脆弱的。

于是git应运而生,Linus的做法是,每个用户的电脑上都和服务器上一样有完整的历史记录,相当于每个用户的电脑都给服务器做了一个镜像备份,这样,即使服务器不可连接,用户也拥有完整的历史记录,如果服务器损坏,不仅不影响用户的使用,还能从用户的镜像备份中自我恢复,可以说,git是去中心化的典型,Linus不仅是伟大的程序员,更是伟大的思想家。

git为Linux内核的开发而诞生,因此它从一开始就有着极高的规格:

1. 极速

2. 简明

3. 支持并行开发(想想Linux有多少个发行版)

4. 分布式(每个用户都有完整的历史记录镜像)

5. 支持超大规模的项目(比Linux内核更大的项目也不多了吧)

git在文件管理技术上的革新是将以往的差异存储(delta)改为拍照存储(snapshot),也就是说,git以前的文件版本管理系统是保存每个文件的变化量,以此为基础来合成各个时期的文件版本,而git没有存储文件的变化量,它存储的是文件发生变化时的整体拍照,也就是用更多的存储空间获得更快的使用效率。一个是穷人思维,一个是富人思维,穷人总是舍不得丢弃旧东西,把时间花在修补缝合上,富人是只要出了新品那就买全新的,节省时间。这里的哲学是,如果一系列的操作被频繁地使用来产生某个固定的结果,那么,这个固定的结果就应该被缓存起来,以避免不断重复的操作所消耗的时间,因为时间永远都比任何其它的东西贵重,只要能缩短需要的时间,人类会为此付出任何代价。

git使用SHA-1算法来验证文件的内容和目录的结构,此算法产生的校验和(checksum)被git十分看重,git的数据库存储了所有的文件内容和目录结构的校验和,以此来确保文件内容和目录结构不被篡改。这其实就是区块链的做法,git从2005年诞生起就采用了这样的做法,从技术架构上来看,区块链引发的第三次信息技术革命的始祖其实是git。

因为git在本机保存有完整的文件历史镜像,与服务器的内容一样,因此我们绝大多数时候都只需要在本机操作,只在一切完成妥当以后,将本地的镜像与服务器同步。

我们用 git init 命令创建一个git仓库,它会创建一个名为 .git 的隐藏文件夹,里面存放的东西主要是以下两部分内容:

1. 完整的文件历史镜像,也叫 repository,这就是正式的文件仓库,存放的是已经提交的(commit)文件。

2. staged区,这里存放的是准备提交到repository的文件的快照,我们用 git add <a_file> 命令的时候,就是将 a_file 的内容拷贝到了 .git 的 staged 区,拷贝完毕以后我们可以接着修改 a_file 的内容而不会影响已经存放在staged区的 a_file 的快照内容。

.git 隐藏文件夹所在的目录下的其它文件和文件夹叫做工作区(workspace),就是我们日常修改文件的地方。

因此,git的使用流程通常如下:

1. 在工作区修改文件,到了一个满意的程度时,将它add到staged区,使用 git add <a_file> 命令。

2. 将所有需要提交到repository的文件都add到staged区以后,用git commit命令将它们提交到repository. 

3. 用git push命令将本地的repository的新内容同步到服务器的repository. 

创建账号、access token和repository

首先在github注册账号

创建一个repository,比如 https://github.com/SiJinmin/buda

生成access token

现在github用git push上传文件的时候不能用用户名+密码的方式授权,要用 access token的方式授权,因此我们要先在github上生成access token。

点击github网站上右上角的头像,选择settings,

选择左边底部的developer settings,

点击左边personal access tokens下面的tokens(classic),

点击generate a personal access token

1. note 下填写 linux git push

2. expiration 选择 no expiration

3. select scopes: 只需要勾上 repo下面的public_pro即可,其它的都不用勾

点击generate token按钮,及时保存好它,仅此一面之缘。

Windows 10 下载安装git

Git - Downloading Package

https://github.com/git-for-windows/git/releases/download/v2.45.2.windows.1/Git-2.45.2-64-bit.exe

安装过程中,除了以下2步,其它步骤使用默认选项

choosing the default editor: visual studio code

configuring the line ending conversions: checkout as-is, commit as-is

安装完毕以后从开始菜单中将git bash固定到任务栏,打开git bash, 即为git的命令行界面。

Ubuntu 24.04 安装git

# sudo apt install git

设置第一次输入用户名和密码后保存access token,免除后续输入,36000000表示每10000个小时以后需要重新输入密码。

# git config --global credential.helper cache  

# git config --global credential.helper 'cache --timeout=36000000'

使用git的常用操作 (windows和linux相同)

在git的命令行中注册github账号

# git config --global user.email "jinmin.si@outlook.com"
# git config --global user.name "SiJinmin"

设置运行 git init 命令时默认的 branch 名称

# git config --global init.defaultBranch main

查看注册的信息是否正确

# git config --list

初始化一个git repository的两种方法,一种是git clone, 另一种是git init。

1. git clone: 将远程repository拷贝到本地 (不支持断点续传)

# cd /d/code

# git clone https://github.com/SiJinmin/buda

git clone 虽然是进行项目初始化的最简单方法,但在国内对github使用git clone命令时很慢且容易断线,不能断点续传,因此有时候我们可能需要使用下面的第二种方法进行项目的初始化。

2. git init: 为本地常规文件夹添加 git repo (支持断点续传)

# cd /d/code && mkdir buda && cd buda

创建 .gitignore 文件用来设置不需要上传的本地文件,比如node_modules。

# git init

# git remote add origin https://github.com/SiJinmin/buda

# git fetch

# git checkout main

git fetch/pull 命令支持断点续传。

修改文件、查看状态

在本地文件夹 /d/code/buda 中增删改文件,查看文件的修改状态、目前所在的 branch

# git status

上传到github

# cd /d/code/buda

# git add -A && git commit -m "init files" && git push

查看修改内容

# git diff

初次上传时会提示输入密码

参考资料

Git - Book

Github断点续传(git clone 经常失败)_git clone断点续传-CSDN博客

https://www.cnblogs.com/upstudy/p/15870787.html

https://juejin.cn/post/6844903830195273736

【已解决】fatal: Authentication failed for ‘https://github.com/.../‘-CSDN博客

如何让Git记住你的GitHub Token,避免每次都要重复输入?-腾讯云开发者社区-腾讯云

相关文章:

git原理解释,windows 10 / ubuntu 24.04 安装使用 github

git的原理 git是赫赫有名的Linux之父Linus Torvalds从2005年起开发的文件版本管理系统&#xff0c;掌控Linux内核这样一个最为重量级的世界产品的Linus为什么要开发这个东西呢&#xff1f;因为Linux系统由全世界的程序员协作维护&#xff0c;对源代码文件的版本控制管理的需求…...

requests post json/data;requests response 接收不同数据

1、requests post json/data 在Python的requests库中&#xff0c;当你发送POST请求时&#xff0c;可以选择使用json参数或data参数来传递数据。这两者之间的主要区别在于它们如何被序列化和发送到服务器。 json参数&#xff1a; 当你使用json参数时&#xff0c;requests库会自…...

【qt】平面CAD(计算机辅助设计 )项目 上

CAD 一.前言二.界面设计三.提升类四.接受槽函数五.实现图形action1.矩形2.椭圆3.圆形4.三角形5.梯形6.直线7.文本 六.总结 一.前言 用我们上节课刚刚学过的GraphicsView架构来绘制一个可以交互的CAD项目! 效果图: 二.界面设计 添加2个工具栏 需要蔬菜的dd我! 添加action: …...

C++中bool类型的使用细节

C中bool类型的使用细节 ANSIISO C标准添加了一种名叫bool的新类型(对 C来说是新的)。它的名称来源于英国数学家 George Boole&#xff0c;是他开发了逻辑律的数学表示法。在计算中&#xff0c;布尔变量的值可以是true或false。过去&#xff0c;C和C一样&#xff0c;也没有布尔…...

Java 面向对象 -- Java 语言的封装、继承、多态、内部类和 Object 类

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 007 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南

目录 &#x1f497;1. 准备工作和环境配置&#x1f495; &#x1f496;安装OpenCV&#x1f495; &#x1f496;安装Dlib&#x1f495; 下载并编译TensorFlow C API&#x1f495; &#x1f497;2. 下载和配置预训练模型&#x1f495; &#x1f496;2.1 下载预训练的ResNet…...

HTML5 Web SQL数据库:浏览器中的轻量级数据库解决方案

在HTML5时代&#xff0c;Web开发迎来了一系列创新特性&#xff0c;其中之一便是Web SQL数据库。尽管Web SQL标准已被W3C废弃&#xff0c;转而推荐IndexedDB作为替代&#xff0c;但了解Web SQL对于学习Web存储技术的演进历程仍有其价值。本文将详细介绍Web SQL数据库的基本概念、…...

C++ const关键字有多种用法举例

C const关键字有多种用法 可以用来修饰变量、指针、函数参数、成员函数等。可以看到const在C中有多种用法&#xff0c;主要用于保证数据的不可变性&#xff0c;增强代码的安全性和可读性。在实际编程中&#xff0c;根据需要选择适当的const用法&#xff0c;可以有效避免意外修…...

Makefile-快速掌握

引用 本文完全参照大佬的文档写的&#xff0c;写这篇文章只是为了梳理一下知识 https://github.com/marmotedu/geekbang-go/blob/master/makefile/Makefile%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md 介绍 Makefile是一个工程文件的编译规则&#xff0c;描述了整个工程的编译…...

定个小目标之刷LeetCode热题(20)

这题与上一题有一点不同&#xff0c;上一题是判断链表是否存在环&#xff0c;这题是寻找入环的第一个节点&#xff0c;有一个规则是这样的&#xff0c;在存在环的情况下&#xff0c;运用快慢指针判断是否有环结束时&#xff0c;把快指针指向头结点&#xff0c;慢指针不变&#…...

短剧分销小程序:影视产业链中的新兴力量

一、引言 在数字化浪潮的推动下&#xff0c;影视产业正迎来一场深刻的变革。短剧分销小程序作为这场变革中的新兴力量&#xff0c;正以其独特的魅力和价值&#xff0c;逐渐在影视产业链中崭露头角。本文将探讨短剧分销小程序在影视产业链中的新兴地位、其带来的变革以及未来的…...

使用fvm切换flutter版本

切换flutter版本 下载fvm 1、dart pub global activate fvm dart下载fvm 2、warning中获取下载本地的地址 3、添加用户变量path&#xff1a; 下载地址 终端查看fvm版本 fvm --version 4、指定fvm文件缓存地址 fvm config --cache-path C:\src\fvm&#xff08;自定义地址&…...

python通过selenium实现自动登录及轻松过滑块验证、点选验证码(2024-06-14)

一、chromedriver配置环境搭建 请确保下载的驱动程序与你的Chrome浏览器版本匹配&#xff0c;以确保正常运行。 1、Chrome版本号 chrome的地址栏输入chrome://version&#xff0c;自然就得到125.0.6422.142 版本 125.0.6422.142&#xff08;正式版本&#xff09; &#xff08;…...

【C++】开源项目收集

C 是一种强大的、静态类型的通用编程语言&#xff0c;它的开源生态系统非常丰富&#xff0c;拥有众多高质量的项目。以下是一些知名的C开源项目&#xff1a; Boost: 这是一个庞大的库集合&#xff0c;提供了大量的实用工具和组件&#xff0c;如文件系统、网络编程、智能指针等&…...

爬虫相关面试题

一&#xff0c;如何抓取一个网站&#xff1f; 1&#xff0c;去百度和谷歌搜一下这个网站有没有分享要爬取数据的API 2, 看看电脑网页有没有所需要的数据&#xff0c;写代码测试调查好不好拿&#xff0c;如果好拿直接开始爬取 3&#xff0c;看看有没有电脑能打开的手机网页&a…...

Spring Cloud Netflix 之 Ribbon

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言前言1、负载均衡1.1、服务端负载均衡1.2、客户端负载均衡 2、Ribbon实现服务…...

C语言怎样记住那么多的颜⾊?

一、问题 ⾚、橙、⻩、绿、⻘、蓝、紫&#xff0c;如此之多的颜⾊&#xff0c;数字不好记&#xff0c;英⽂看程序还可以&#xff0c; 直接写也不好写。那么怎样记住那么多的颜⾊呢&#xff1f; 二、解答 颜⾊枚举值如下&#xff1a; enum COLORS {BLACK, /*O⿊*/BLUE, …...

LabVIEW软件开发任务的工作量估算方法

在开发LabVIEW软件时&#xff0c;如何准确估算软件开发任务的工作量。通过需求分析、功能分解、复杂度评估和资源配置等步骤&#xff0c;结合常见的估算方法&#xff0c;如专家判断法、类比估算法和参数估算法&#xff0c;确保项目按时按质完成&#xff0c;提供项目管理和资源分…...

【已解决】引入 element 组件无法使用编译错误 ERROR Failed to compile with 1 error

如果大家使用这个vue 配合 element 框架不熟练&#xff0c;当你顺利按照文档安装好 vue 和 element 的时候想要使用element 的组件时候确无法展示出来&#xff0c;甚至报错。不妨看看是不是这个问题&#xff0c; 1.首先使用element 的时候&#xff0c;前提是把必须要的 elemen…...

Prometheus的四种指标类型

目录 一、Counter 计数器 1.1Counter 是计数器类型 1.2Counter 类型示例 二、Gauge 仪表盘 2.1Gauge是测量器类型 2.2Gauge 类型示例 三、Histogram 累积直方图 3.1Histogram 作用及特点 3.2使用 histogram 柱状图 四、Summary 摘要 一、Counter 计数器 1.1Counter …...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...