Git学习笔记

Git学习笔记

文章目录

  • Git学习笔记
    • 一、版本控制
    • 二、Linux基础命令
    • 三、Git的环境配置
    • 四、Git的基本理论(核心)
    • 五、Git项目的搭建
    • 六、Git文件操作
    • 七、使用码云
    • 八、IDEA集成git
    • 九、Git分支

一、版本控制

什么是版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。

常见的版本控制工具

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • Visual Studio Online
  • RCS(GNU Revision Control System)、

版本控制分类

  1. 本地版本控制
    记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件适合个人用,如RSC

    在这里插入图片描述

  2. 集中版本控制 SVN
    所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
    在这里插入图片描述

  3. 分布式版本控制Git

    每个人都拥有全部的代码!(存在安全问题)

    所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有的版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或者用户哪里,由于每个用户保持的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储的空间占用。
    在这里插入图片描述

    优点:不会因为服务器损坏或者网络问题造成不能工作的情况。

Git和SVN的主要区别

  1. SVN集中式版本控制系统版本库是集中放在中央服务器,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器集中式版本控制系统必须联网才能工作,对网络带宽要求较高。

  2. Git分布式版本控制系统没有中央服务器每个人的电脑就是一个完整的版本库工作的时候不需要联网了因为版本都在自己电脑上协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改
    了。
    Git是目前世界上最先进的分布式版本控制系统。

二、Linux基础命令

1)  cd : 改变目录。
2)  cd . . 回退到上一个目录,直接cd进入默认目录
3)  pwd : 显示当前所在的目录路径。
4)  ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
5)  touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
6)  rm: 删除一个文件, rm index.js 就会把index.js文件删除。
7)  mkdir: 新建一个目录,就是新建一个文件夹。
8)  rm -r : 删除一个文件夹, rm -r src 删除src目录
9)  mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
10) reset 重新初始化终端/清屏。
11) clear 清屏。
12) history 查看命令历史。
13) help 帮助。
14) exit 退出。
15) #表示注释

三、Git的环境配置

启动Git

Git下载完成后的目录:右键任意文件夹下也可以看到对应的程序
在这里插入图片描述

  • Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
  • Git CMD:Windows风格的命令行
  • Git GUI:图形界面的Git,不建议初学者用,先熟悉常规命令

Git相关的配置文件

  • Git\etc\gitconfig : Git 安装目录下的 gitconfig --system 系统级
    在这里插入图片描述

  • C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局这里可以直接编辑配置文件,通过命令设置后会响应到这里。[这个只有设置完邮箱后才会有]
    在这里插入图片描述

Git配置

查看系统配置:git config --system --list
查看配置:git config -l
查看本地配置:git config --global --list

设置用户名与邮箱(用户标识,必要)[重点]

邮箱的配置信息保存到C:\Users\Administrator\ .gitconfig

当你安装Git后首先要做的事情是设置你的用户名称与e-mail邮箱。这是非常重要的,因为每次Git提交都会使用该信息。它将永远的嵌入到你的提交中。

git config --global user.name "XXX"   #名称
git config --global user.email XXXXX@qq.com   #邮箱

Git卸载

直接反安装即可,然后清理环境变量,环境变量只是为了全局使用而已。

四、Git的基本理论(核心)

工作区域

Git本地有三个工作区域工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

在这里插入图片描述

  • Workspace工作区,就是你平时存放项目代码的地方
  • Index / Stage暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD[分支情况]指向最新放入仓库的版本
  • Remote:远程仓库托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换 如**{Gitee}**

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
在这里插入图片描述

  • Directory:使用Git管理的一个目录,也就是一个仓库包含我们的工作空间和Git的管理空间
  • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
  • .git存放Git管理信息的目录,初始化仓库的时候自动创建
  • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
  • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)
  • Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

工作流程

git的工作流程一般是这样的:

  1. 在工作目录中添加、修改文件;
  2. 将需要进行版本管理的文件放入暂存区域;
  3. 将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

在这里插入图片描述

五、Git项目的搭建

创建工作目录与常用命令

**工作目录(WorkSpace)**一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文

日常使用只要记住下图6个命令:
在这里插入图片描述

本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库

  1. 创建全新的仓库,需要GIt管理项目的跟目录执行
# 在当前目录新建一个Git代码库----创建成功出现一个.git文件夹[关于版本等的所有信息都在这个目录里面。]
git init
  1. 克隆远程仓库
# 克隆一个项目和它的整个代码历史(版本信息),关于版本等的所有信息都在这个目录里面。
$ git clone [url]
# git clone 'https://gitee.com/kuangstudy/kuang_livenote.git'

在这里插入图片描述

六、Git文件操作

文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过 git add状态变为 Staged .
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为 Modified . 如果使用 git rm 移出版本库, 则成为Untracked 文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过 git add可进入暂存 staged 状态, 使用git checkout则丢弃修改过, 返回到 unmodify 状态,这个 git checkout 即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行 git commit将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为 Unmodify 状态. 执行 git reset HEAD filename 取消暂存, 文件状态为
    Modified

查看文件的状态

#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
# git add . #将当前问价增加到暂存区 
# git status #看是否已添加暂存区
# git commit -m "new file hello.txt"  # 将暂存区的hello.txt文件提交到本地仓库   -m 提交信息
git commit -m "消息内容"

忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件
在主目录下建立".gitignore"文件此文件有如下规则

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符问号(?)代表一个字符方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

七、使用码云

github是有墙的,比较慢,在国内的话,我们一般使用gitee,公司中有时候会搭建自己的gitlab服务器

  1. 注册账号,完善个人信息

  2. 设置本机绑定SSH公钥,实现免密登录!(免密登录,这一步挺重要的,码云是远程仓库,我们平时工作在本地仓库)

    # 进入 C:\Users\Administrator\.ssh 目录
    # 生成公钥命令     -t rsa加密算法
    ssh-keygen -t rsa
    
  3. 将公钥信息public key添加到码云账号中即可!
    在这里插入图片描述

  4. 使用码云创建一个自己的仓库

创建

在这里插入图片描述

创建完成

在这里插入图片描述

克隆到本地 git clone ‘地址’

在这里插入图片描述

八、IDEA集成git

1、新建项目,绑定git。

  • 将我们的远程的git目录拷贝到项目中[文件夹下的所有信息]
  • 或者创建和远程仓库一样的项目名git clone ‘地址’

2、修改文件,使用IDEA操作git。

  • 添加到暂存区
  • commit提交
  • push到远程仓库

在这里插入图片描述

3、上传到远程服务器

当commit后的数据提交到本地仓库后,就可以使用git push命令,提交到远程服务器

九、Git分支

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
#切换分支
git checkout branchName
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

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

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

相关文章

Linux线程 --- 生产者消费者模型(C语言)

在学习完线程相关的概念之后,本节来认识一下Linux多线程相关的一个重要模型----“ 生产者消费者模型” 本文参考: Linux多线程生产者与消费者_红娃子的博客-CSDN博客 Linux多线程——生产者消费者模型_linux多线程生产者与消费者_两片空白的博客-CSDN博客…

RedisTemplate和StringRedisTemplate的区别、对比

学习 Jedis、RedisTemplate、StringRedisTemplate之间的比较 博客中提到:一. Jedis是Redis官方推荐的面向Java的操作Redis的客户端。 二. RedisTemplate,StringRedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更…

想解锁禁用的iPhone?除了可以使用电脑之外,这里还有不需要电脑的方法!

多次输入错误的密码后,iPhone将显示“iPhone已禁用”。这种情况看起来很棘手,因为你现在不能用iPhone做任何事情。对于这种情况,我们提供了几种有效的方法来帮助你在最棘手的问题中解锁禁用的iPhone。你可以选择使用或不使用电脑来解锁禁用的iPhone。 一、为什么你的iPhone…

Mysql数据库管理

一、数据库基本概念 数据 使用一些介质进行存储,例如文字存在文档中 数据库可以完成数据持久化保存快速提取 那么想要实现以上功能,需要编写一系列的规则--》SQL语句 SQL语句 按功能分类: 增删改查 数据库类型:关系型数据库、非关系型数据库…

javaScript:七夕特辑-对象的认识与应用(包含日期对象及相关案例)

目录 一.前言 二.认识对象 在js中声明对象的方法 1.直接使用{}声明对象 2.使用构造函数创建对象 获取属性的值 执行对象方法 解释 三.对象的应用 代码 效果图 ​编辑 四.日期对象 1.Date 日期对象 2. getFullYear() 获取当前年份 3.getMonth() 获取当前日期对象…

协议的分层结构

1.1TCP/IP 协议 为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP 协议(族). 注意TCP /IP 协议族指的不只是这两个协议 而是很多协议, 只要联网的都使用TCP/IP协议族 为了减少 协议设计的复杂度 ,大…

每日后端面试5题 第八天

1.UDP和TCP协议的区别 1.UDP无连接,速度快,安全性低,适合高速传输、实时广播通信等。 2.TCP面向连接,速度慢,安全性高,适合传输质量要求高、大文件等的传输,比如邮件发送等。 (还…

Grafana 安装配置教程

Grafana 安装配置教程 一、介绍二、Grafana 安装及配置2.1 下载2.2 安装2.2.1 windows安装 - 图形界面2.2.2 linux安装 - 安装脚本 三、Grafana的基本配置3.1 登录3.2 Grafana设置中文 四、grafana基本使用 一、介绍 Grafana是一个通用的可视化工具。对于Grafana而言&#xff0…

基于IDEA使用maven创建hibernate项目

1、创建maven项目 2、导入hibernate需要的jar包 <!--hibernate核心依赖--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.1.Final</version></dependency><!--…

ChatGPT影响大学生思想行为模式的三个维度

ChatGPT作为新一代AI技术的代表&#xff0c;深刻嵌入并影响着大学生的日常学习和生活场景&#xff0c;其在提升学习研究效率、拓宽认知阈限、重塑人机互动模式等方面带来极大突破&#xff0c;也会对大学生的思想行为模式产生潜在的影响&#xff0c;这些影响可以从个体、关系与社…

MinDoc:针对IT团队的文档、笔记系统

作为一名IT从业者&#xff0c;无论是在公司团队中&#xff0c;还是在平时自己写一些笔记、博客等文档&#xff0c;我都习惯使用markdown来进行书写。在使用过许多支持markdown语法的系统或软件&#xff08;如Typora、未知、我来、思源、觅道等&#xff09;后&#xff0c;我总觉…

C++信息学奥赛1135:配对碱基链

#include <iostream> #include <string> using namespace std;int main() {string arr;cin >> arr; // 输入字符串for (int i 0; i < arr.length(); i) {if (arr[i] A) {cout << "T"; // 如果当前字符是A&#xff0c;则输出T}else if…

安防监控视频平台EasyCVR视频汇聚平台和税务可视化综合管理应用方案

一、方案概述 为了确保税务执法的规范性和高效性&#xff0c;国家税务总局要求全面推行税务系统的行政执法公示制度、执法全过程记录制度和重大执法决定法制审核制度。为此&#xff0c;需要全面推行执法全过程记录制度&#xff0c;并推进信息化建设&#xff0c;实现执法全过程的…

整理mongodb文档:聚合管道

个人博客 整理mongodb文档:聚合管道 个人博客&#xff0c;求关注&#xff0c;电脑版看体验更加&#xff0c;如果不够清晰&#xff0c;请指出来&#xff0c;谢谢 文章概叙 文章主要通过几个常用的聚合表达式来介绍聚合管道的使用&#xff0c;以及从索引的角度来介绍聚合管道…

MQTT 常用客户端库介绍 (全面涵盖c,c++,java,c#,python)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的通信协议&#xff0c;被广泛应用于物联网和分布式系统中。它以其简单、可靠和高效的特性而备受推崇&#xff0c;成为连接设备和应用程序的首选协议。MQTT的重要性不言而喻&#xff0c;它为实时通…

无涯教程-Perl - wait函数

描述 该函数等待子进程终止,返回已故进程的进程ID。进程的退出状态包含在$?中。 语法 以下是此函数的简单语法- wait返回值 如果没有子进程,则此函数返回-1,否则将显示已故进程的进程ID Perl 中的 wait函数 - 无涯教程网无涯教程网提供描述该函数等待子进程终止,返回已故…

云计算技术应用专业实训室建设方案

一、 云计算技术应用系统概述 云计算技术是一种基于互联网的计算模式&#xff0c;通过将计算资源&#xff08;如服务器、存储、数据库、网络、软件等&#xff09;提供为一种服务&#xff0c;使用户能够按需获取和使用这些资源&#xff0c;而无需拥有和管理实际的物理设备。云计…

【Leetcode】118.杨辉三角

一、题目 1、题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1: 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例2: 输入: numRows = 1 输出: [[1]]提示: …

安防视频能力平台EasyNVR视频汇聚平台关闭匿名登陆的问题的解决步骤

EasyNVR是基于RTSP/Onvif协议的安防视频能力平台&#xff0c;它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发等视频能力服务&#xff0c;可覆盖全终端平台&#xff08;pc、手机、平板等终端&#xff09;&#xff0c;在智慧工厂、智慧工地、智慧社区、智慧校园等…

4G工业路由器的功能与选型!详解工作原理、关键参数、典型品牌

随着工业互联网的发展,4G工业路由器得到越来越广泛的应用。但是如何根据实际需求选择合适的4G工业路由器,是许多用户关心的问题。为此,本文将深入剖析4G工业路由器的工作原理、重要参数及选型要点,并推荐优质的品牌及产品,以提供选型参考。 一、4G工业路由器的工作原理 4G工业…