最详细GIT学习笔记

news2024/11/29 22:50:28

1. Git简介

1.1. Git介绍

Git(读音为/gɪt/) 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

1.2. 主流的版本控制器

  • Git(分布式版本控制,没有中央服务器,可以离线提交)
  • SVN(集中式版本控制,有中央服务器,不可以离线提交)
  • CVS
  • VSS
  • TFS
  • Visual Studio Online

版本控制产品非常多,现在影响力最大且使用最广泛的Git.

1.3. Git和CVS、SVN的区别

Git是分布式版本控制系统,代码提交是在本地的(如此速度就快),当然生成补丁(patch)然后push到远程服务器上是需要联网的。 CVS、SVN是集中式版本控制系统,代码提交都是提交到远程服务器上,是需要一直联网的(如此速度就慢)(这里的一直联网不是说你写代码的时候要联网,而是说你提交代码的时候必须联网;但是git不同,git提交代码是本地的不需要联网,生成patch后push patch才需要联网,相当于svn的远程的集中服务器对于git来说,这个集中的远程服务器就在本地)

CVS、SVN这样的集中式版本控制系统,它的完整代码仓库(代码仓库不仅仅只包含了代码,还包含各个历史版本的信息等)在中心服务器上,一旦这个中心服务器挂了,也就是完整的代码仓库挂了,虽然你本地可能之前有从中心服务器上取得过代码,但是那些历史版本信息都没有了,而且你也无法再提交代码。 Git不同,Git没有中心服务器的概念,每一个git客户端(git节点)都含有一个完整的代码仓库(前提是你之前从远程git仓库fetch过代码),所以那些历史版本信息都在你本机上,假如哪一个git节点挂掉了,随意从其他git节点clone一个代码仓库过来就ok了, 那些原来的代码、版本信息之类的都还是完整的(当然如果你在这个挂掉的git节点上新增的代码是没有掉了的)

综上,Git的每一个节点(第一次从远程git仓库取得代码后,该git节点就是一个完整的代码仓库)相当于SVN的中心服务器,都包含完整的代码仓库。

1.4. Git的优点

  1. 适合分布式开发,强调个体。
  2. 远程服务器(公共的)压力和数据量都不会太大。
  3. 速度快、灵活。
  4. 任意两个开发者之间可以很容易的解决冲突。
  5. 离线工作,近乎所有操作都是本地执行。(当然提交远程服务器或者从远程服务器fetch代码是要联网的)。

2. Git下载与安装

可以从官方网站上找到对应自己的操作系统的GIT版本进行下载,下载网址:https://git-scm.com/downloads

下载之后开始安装:

1.下一步

2.选择安装路径,next

3.选择需要安装的组件,这里默认即可,next

4.选择菜单文件夹,这里默认即可,next

5.选择默认编辑器,默认推荐的即可,next

6.设置“新存储库中初始分支的名称”,默认推荐即可,next

  1. 设置path环境:

Use Git from Git Bash only:只通过GitBash使用Git

Git from the command line and also from 3rd-party software:使用windows系统的命令行工具(默认这项即可)

UseGit and optional Unix tools from the Command Prompt:二者都有,但是会罩层工具覆盖警告

  1. 选择安全密钥,默认推荐即可,next

9.选择HTTP传输后端,使用默认推荐OpenSSL库即可,next

  1. 配置结束转换行,默认windows即可,next

第一项:(windows系统选择)检查换行格式将windows格式的换行转换为unix格式的进行提交

第二项:(Unix系统安装选择)检查换行格式将原来不管什么格式的换行一律转换为unix格式的换行在进行提交

第三项:(非跨平台项目安装选择)不进行格式转换,检查出什么格式就提交什么格式

11.配置终端模拟器以使用Git Bash ,选择默认即可,next

  1. 选择git pull的默认行为,默认即可,next

13.选择git辅助工具,默认即可,next

  1. 配置附加选项,默认即可,next

15.执行安装

16.安装成功


17右键菜单,选择

  1. 进入编辑页面,即可进行GIT操作

3. 使用Git进行版本控制

3.1. 仓库分区

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

Workspace:工作区,就是平时存放项目代码的地方

Index/Stage:暂存区,用于临时存放你的改动,事实上它是一个文件,保存即将提交的列表信息

local Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本

Remote Repository:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

以上四个工作区其实跟我们挂钩的只有工作区和远程仓库,暂存区和仓库区我们只需要通过命令操作即可

3.2. 初始配置

首次使用git先需要配置以下内容:

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

因为git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。然后在本机会生成一个.gitconfig文件,里面包含了user.name和user.email的信息。

如果不加–global参数就只对当前项目有效。但通常都使用–global,避免每次都要重新配置。

3.3. 常用指令

3.3.1. 新建代码库

# 在当前目录新建一个Git代码库
$ git init # 新建一个目录,将其初始化为Git代码库

进入项目目录(注意这个前提)并输入:git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是
Git 仓库的骨干。但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。

3.3.2. 查看代码仓库状态

在执行其他操作之前,先来看一下状态:

$ git status

在Git中,分支是项目的一个版本,从这里的输出我们可以知道,我们位于分支的,master

我们每次查看项目的状态时候,输出的都是我们位于分支master上,接下里的输出表明,我们将进行初始项目的日叫,提交是项目在特定时间的快照。

Git指出了项目中未被跟踪的文件,因为我们还没有告诉他要跟踪那些文件,接下里我们被告知没有任何东西添加到当前提交里面,但我们可能需要将为跟踪的文件加入仓库

3.3.3. 将文件加入到仓库

# 添加指定文件到暂存区
$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录
$ git add .  # 将所有修改添加到暂存区   经常用此命令

命令 git add . 将项目中未被跟踪的文件都加入到仓库中,它不提交这些文件,而只是让git开始关注他们。现在我们检查这个项目的状态,发现Git找到了需要提交的文件的一些修改,标签 new file 表示这些文件是新加入的。

3.3.4. 执行提交

# 提交暂存区到仓库区
$ git commit -m [message]    # 提交暂存区的指定文件到仓库区

我们在执行 git commit -m "Started project" 的时候以拍摄项目的快照。标志-m 让Git接下里的消息(“Started project")记录到项目中的历史记录中,输出表明我们在分支master 上,而且有一个文件被修改了

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

3.3.5. 查看提交历史

# 显示当前分支的版本历史
$ git log    # 显示commit历史,以及每次commit发生变更的文件

我们每次提交的时候,Git都会生成一个包含40字符的独一无二的引用ID,它记录提交是谁执行的,提交的时间以及提交的指定消息,并非在任何情况下你都需要所有的这些信息,因此Git提供一个选项,让我们能够打印提交历史条目的更简单的版本。

标志 --pretty=oneline 指定显示一项最重要的信息,提交的引用ID以及为提交记录的信息

3.3.6. 第二次提交

我们在Helloworld.java文件中加入一行代码

int num = 100;

查看状态

此处显示我们对Helloworld. java文件做了修改,但是并没有提交,所以接下来我们提交所做操作,并在查看操作。

这一步,我们执行了提交,并且在执行命令git commit 的时候指定了标志-am.标志-a 让Git 将仓库中所有修改了的文件都加入当前提交中,(如果我们两次提交之间加入了新文件,我们执行get add . 操作,将新文件加入到仓库中)标志-m让Git咱提交历史中记录一条消息。

查看状态

这时我们再查看项目的状态的时候,发现工作目录也是干净的,最后我们发现提交历史中包含两个提交。

3.3.7. 撤销修改最近版本

我们在Helloworld.java文件中加入一行代码

System.out.println(num);

查看状态

Git注意到我们修改了Helloworld.java,我么可以提交所做的修改,但是我们不提交所做的修改,而要恢复到最后一个提交,为此我们不对Helloworld.java执行任何操作,不删除刚添加的代码行,也不使用文本编辑器的撤销功能,而是在终端会话中执行如下命令:

# 撤销修改
$ git checkout .    # 能够让我们恢复到以前的任何提交

查看状态,同时查看文件中的代码也被撤销了

3.3.8. 撤销修改以前版本

我们可以检查提交历史中的任何一次提交,而不仅仅是最后一次,为此我们可以在命令git check末尾指定该提交的引用ID的前6个字符(而不是局点)。通过检查出以前的提交,我们可以对其进行审核么然后返回到最后一次提交,或者放弃最近所做的工作,并选择以前的提交。

如果要恢复到“Started project”需要以下几步:

首先,我们查看了状态,确认我们在分支master上,查看历史提交时,我们看见了两个提交。

然后,我们执行了命令 git reset --hard ,并在其指定了要永久性的恢复到的提交的引用ID的前6个字符。

接下来,我们在次查看状态,我们在分支master上,并且没有需要任何修改,

最后,我们再次查看提交的历史状态时候,我们发现我们处于重新开始的提交中,同时文件中的代码也恢复到最初状态。

3.3.9. 删除仓库

有时候,仓库的历史纪录被我们搞乱了,而我们又不知道如何恢复,这时候我们首先应该考虑百度一下,看看自己的问题出在那里,如果无法恢复,而且参与项目的人只有自己,可以继续使用这些文件,但需要将这些项目的历史纪录删除——删除.git 这不会影响任何文件的当前状态,而只会删除文件的所有提交,因此我们将无法检查出项目的其他任何状态。

为此,可以打开一个文件浏览器,并将目录.git 删除,也可以通过命令完成这个任务。但是这样做过我们需要创建一个新的仓库,以重新对这些修改进行跟踪。

$rm -rf .git  #-rf 强制删除文件

查看状态结果告诉我们这不是一个仓库,(git用来跟踪仓库的信息都存储在文件夹.git中,因此删除该文件夹也将会删除整个仓库),但是原来的Helloworld.java源文件不会被删除,可以继续构建新仓库进行版本控制。

4. Gitee代码托管平台

Gitee 是开源中国社区2013年推出的基于 Git 的代码托管服务,目前已经成为国内最大的代码托管平台,致力于为国内开发者提供优质稳定的托管服务。 它可以让你和其他人一起在远程或本地项目上进行协作。

官方网站:www.gitee.com/

本地仓库: 本机上某个存放代码的仓库。

远程仓库: 码云服务器上的代码仓库。

重要提醒:

当我们在本地操作(新增、删除、修改)文件、目录时,并将其提交(commit),只是提交到了本地仓库。注意:所有的改动只是放到了本地仓库,并没有上传到服务器的远程仓库。

当将本地仓库与远程仓库关联起来后,即可将本地仓库中的对代码的改动上传到(push)远程仓库,也可从远程仓库将对代码的代码改动下载(pull)下来。

4.1. 创建SSH key

由于本地Git仓库和Gitee仓库之间的传输是通过SSH加密的,所以需要先进行如下设置:在Git Bash下输入如下指令,成功后在用户主目录下,寻找.ssh目录,并在这个目录下找id_rsa和id_rsa.pub这两个文件,这两个就是 SSH Key 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,用于后续步骤,命令如下:

$ ssh-keygen -t rsa -C "zhangsan@163.com"

4.2. 登录Gitee账号

没有Gitee账号的,可以去官网注册一个。注册登录后,在个人主页—>个人设置---->SSH公钥,将上述步骤中的 id_rsa.pub 里面的内容复制粘贴到 3 号位置,在2号位置任意添加一个标题即可。

4.3. 在Gitee中创建远程仓库

登录Gitee,点击右上角的 + 号,再点击新建仓库

填写仓库名称,下面的路径默认,是否开源根据自己的需要,然后按照图中所示勾选

创建仓库成功会有命令提示,可以按照命令提示进行项目上传

按照以上指令进行文件上传

4.4. 克隆远程仓库项目

先创建远程库,从远程库克隆项目,通常指令如下:

#HTTP方式
$git clone https://gitee.com/yichunlinNeusoft/helloworld.git
#SSH方式
$git clone git@gitee.com:yichunlinNeusoft/helloworld.git

4.5. 在Eclipse中配置Git

首次从远程仓库上向eclipse克隆项目,可以选择引用项目import中的GIT选项

选择“克隆”clone选项

填写location(从gitee中直接复制),同时填写gitee的用户名和密码进行验证

选择对应分支,这里我们就选主分支master

配置域名(默认)

选择引入项目的方式(如果有空项目导入就选第一项)

项目导入成功

4.6. 在Eclipse中使用Git

在项目开发阶段,我们需要不断对远程仓库中的项目进行提交和下载,这是可以在eclipse中直接进行的,方法在右键菜单中,有Team选项,可以自己需要的功能进行选择

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

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

相关文章

金融帝国实验室(Capitalism Lab)官方正版游戏『2024新年特卖优惠』

「金融帝国实验室」(Capitalism Lab)Enlight 官方正版游戏「2024新年特卖」 ■优惠时限:2024.01.01~01.31 ■游戏开发商:Enlight Software Ltd. 请您认准以下官方正版游戏购买链接:支持“支付宝&am…

【数据结构-单链表】(C语言版本)

今天分享的是数据结构有关单链表的操作和实践(图解法,图变化更利于理解) 记录宗旨📝: 眼(脑)过千遍,不如手过一遍。 我们都知道单链表是一种常见的链表数据结构,由一系列…

【Delphi】IOS上架踩坑记 - 2024年第一天

目录 一、前言: 二、IOS程序上架网址 三、踩坑记 1. 关于版本中的 CFBundleIdentifier 参数(Transporter 提示) 2. IOS APP 程序图标要求(Transporter 提示) 3. 关于版本中的 CFBundleShortVersionString 参数&a…

小波理论与应用:理解小波

1 简介 来自源的信号通常处于时域。例如正弦信号、生物医学信号等。任何时域信号都可以使用数学变换进行处理或变换到频域(谱域)。傅里叶变换是一种流行或著名的变换,它将时域信号转换为频域信号,而不失一般性。 在绘制时域信号…

智能客服系统要素分析:提升客户满意度与工作效率的关键要素

智能客服系统是企业建立完善服务框架的重要工具。市面上存在着形态各异的各种客服系统,如何选择一款最适合自己企业的产品是很多采购人员想知道的问题。事实上,不同的智能客服系统之间的主要功能并未存在太大的区别,它们往往会在一些亮点功能…

m系列mac配置Tomcat

配置上走了些弯路 翻了不少博客各有各的说法,此说明是本人亲自尝试,电脑是m芯片mbp如果不是mac系统,勿跟风尝试 一、下载和安装Tomcat 1.下载 首先,打开Tomcat官网:https://tomcat.apache.org,选择Downlo…

oracle 9i10g编程艺术-读书笔记1

根据书中提供的下载代码链接地址,从github上找到源代码下载地址。 https://github.com/apress下载好代码后,开始一段新的旅行。 设置 SQL*Plus 的 AUTOTRACE 设置 SQL*Plus 的 AUTOTRACE AUTOTRACE 是 SQL*Plus 中一个工具,可以显示所执行…

计算机网络物理层 习题答案及解析

2-1 下列选项中,不属于物理层接口规范定义范畴的是( D )。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定,信号的电平范围为- 15V~15V , 电线长…

tp5+workman(GatewayWorker) 安装及使用

一、安装thinkphp5 1、宝塔删除php禁用函数putenv、pcntl_signal_dispatch、pcntl_wai、pcntl_signal、pcntl_alarm、pcntl_fork,执行安装命令。 composer create-project topthink/think5.0.* tp5 --prefer-dist 2、配置好站点之后,浏览器打开访问成…

VSCode使用Remote SSH远程连接Windows 7

结论 VSCode Server不能启动,无法建立连接。 原因 .vscode-server 目录中的 node.exe 无法运行。 原因是Node.js仅在Windows 8.1、Windows Server 2012 R2或更高版本上受支持。 由于vscode基于node.js v14,不支持Windows 7操作系统。 另&#xff…

为即将到来的量子攻击做好准备的 4 个步骤

当谈到网络和技术领域时,一场风暴正在酝酿——这场风暴有可能摧毁我们数字安全的根本结构。这场风暴被称为 Q-Day,是即将到来的量子计算时代的简写,届时量子计算机的功能将使最复杂的加密算法变得过时。 这场量子革命正以惊人的速度到来&am…

LVM和磁盘配额

一:LVM概述: LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。 能够在保持现有数据不变的情况下,动态调整磁盘容量,从而提高磁盘管理的灵活性 /boot 分区用于存放引导文件,不能基于LVM创建…

Docker之镜像上传和下载

目录 1.镜像上传 1) 先上百度搜索阿里云 点击以下图片网站 2) 进行登录/注册 3) 使用支付宝...登录 4) 登录后会跳转到首页->点击控制台 5) 点击左上角的三横杠 6) 搜索容器镜像关键词->点击箭头所指 ​ 编辑 7) 进入之后点击实例列表 8) 点击个人实例进入我们的一个…

异步处理方案

目录 1.通过promise的链式调用将异步方法变为同步执行 2.使用async及await 3.回调函数方式 4.三种方式对比 5.async及await使用的注意点 1.通过promise的链式调用将异步方法变为同步执行 function get1(){return new Promise((resolve,reject) >{console.log(执行get1接…

【Java 数组解析:探索数组的奇妙世界】

数组的引入 我们先通过一段简单的代码引入数组的概念。 import java.util.Scanner; public class TestArray01{public static void main(String[] args){//功能:键盘录入十个学生的成绩,求和,求平均数://定义一个求和的变量&…

ICCV 2023 风格迁移方向 5 篇论文

1、StyleDiffusion: Controllable Disentangled Style Transfer via Diffusion Models 内容和风格(Content and style disentanglement,C-S)解耦是风格迁移的一个基本问题和关键挑战。基于显式定义(例如Gram矩阵)或隐式…

[BUG]Datax写入数据到psql报不能序列化特殊字符

1.问题描述 Datax从mongodb写入数据到psql报错如下 org.postgresql.util.PSQLException: ERROR: invalid bytesequence for encoding "UTF8": 0x002.原因分析 此为psql独有的错误,不能对特殊字符’/u0000’,进行序列化,需要将此特殊字符替…

2022年全球运维大会(GOPS上海站)-核心PPT资料下载

一、峰会简介 GOPS 主要面向运维行业的中高端技术人员,包括运维、开发、测试、架构师等群体。目的在于帮助IT技术从业者系统学习了解相关知识体系,让创新技术推动社会进步。您将会看到国内外知名企业的相关技术案例,也能与国内顶尖的技术专家…

MK米客方德品牌 SD NAND在对讲机领域的引领作用

SD NAND在对讲机上的应用 SD NAND在对讲机上广泛应用,为其提供了高效可靠的存储解决方案。 这种存储技术不仅能容纳大量语音和数据文件,而且具有高速读取的特点,保障了实时通信的质量。SD NAND还注重安全性,通过数据加密和访问控…

2024-01-01 服务器开发-11个最佳免费和便宜SSL证书颁发机构

摘要: 2024-01-01 服务器开发-11个最佳免费和便宜SSL证书颁发机构 ssl证书颁发机构 在网站上实施 SSL 证书不再被视为奢侈品。它不仅通过加密网站访问者与您的网站之间交换的通信来提高您的网站安全性,而且还提高了网站的 SEO 排名。此外,如果你托管的平…