0%

GIT

什么是Git

Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。

git官网

特点:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性!

Git的特性

Git之所以快速和高效,主要依赖于它的如下两个特性:

  • 直接记录快照,而非差异比较
  • 近乎所有操作都是本地执行

Git记录快照

Git快照是在原有文件版本的基础.上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

缺点:占用空间资源大 空间换时间

所有操作都是本地执行

img

Git中的三个区域

使用Git管理的项目,拥有三个区域,分别是工作区暂存区Git 仓库

img

Git中的三个状态

img

  • 工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。
  • 如果文件已修改并放入暂存区,就属于已暂存状态。
  • 如果Git仓库中保存着特定版本的文件,就属于已提交状态。

基本的Git工作流程

WorkingDirectory (工作区,相当于开发人员电脑)

StagingArea (暂存区)

**.git directory(Repository)**(Git仓库)

img

基本的Git工作流程如下:

①在工作区中修改文件

②将你想要下次提交的更改进行暂存

③提交更新,找到暂存区的文件,将快照永久性存储到Git仓库

配置Git

配置Git用户信息

安装完Git之后,要做的第一件事就是设置自己的用户名和邮件地址。因为通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作:

img

–golbal选项只需执行一次就可以永久生效

Git的全局配置文件

通过git config –global user.namegit config –global user.email配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹/.gitconfig文件中。这个文件是Git 的全局配置文件,配置- -次即可永久生效。

可以使用记事本打开此文件,从而查看自己曾经对Git做了哪些全局性的配置。

检查配置信息

除了使用记事本查看全局的配置信息之外,还可以运行如下的终端命令,快速的查看Git的全局配置信息:

img

获取帮助信息

可以使用**git help **命令,无需联网即可在浏览器中打开帮助手册,例如:

img

如果不想查看完整的手册,那么可以用-h选项获得更简明的”help” 输出:

img

获取Git仓库两种方式

①将尚未进行版本控制的本地目录转换为Git仓库

②从其它服务器克隆一个已存在的Git仓库

以上两种方式都能够在自己的电脑上得到一一个可用的Git仓库

1.在现有目录中初始化仓库

如果自己有一个尚未进行版本控制的项目目录,想要用Git来控制它,需要执行如下两个步骤:

①在项目目录中,通过鼠标右键打开”Git Bash

②执行 git init 命令将当前的目录转化为Git仓库

git init命令会创建一个名为 .git 的隐藏目录,这个.git目录就是当前项目的Git仓库,里面包含了初始的必要

文件,这些文件是Git仓库的必要组成部分。

工作区中文件的4种状态

工作区中的每一个文件可能有4种状态,这四种状态共分为两大类,如图所示:

img

未跟踪 ??

已暂存 A

被修改 M

被修改并且放入暂存 M

Git中对文件的操作 必须先初始化仓库

检查文件状态 git status

可以使用git status 命令查看文件处于什么状态,例如:

img

在状态报告中可以看到新建的index.html文件出现在Untracked files (未跟踪的文件)下面。

以精简的方式显示文件状态

使用git status输出的状态报告很详细,但有些繁琐。如果希望以精简的方式显示文件的状态,可以使用如下两条完全等价的命令,其中-s是–short的简写形式:

img

跟踪新文件 (向暂存区添加文件) git add 文件

使用命令 git add 开始跟踪一个文件 所以要跟踪index.html文件,运行如下的命令即可

img

此时再运行git status命令,会看到index.html文件在Changes to be committed这行的下面,说明已被跟踪,并处于暂存状态:

img

img

向暂存区中一次性添加多个文件 git add .

如果需要被暂存的文件比较多,可以使用 git add . 命令一次性向暂存区提交多个文件

img

项目开发常用命令,将新增和修改后的文件放入暂存区

提交更新 git commit -m “提示text”

现在暂存区中有一个index.html文件等待被提交到Git仓库中进行保存。可以执行git commit命令进行提交,其中 -m 选项后面是本次的提交消息,用来对提交的内容做进一步的描述:

img

提交成功后会显示如下信息:

img

对已提交的文件进行修改后 M标记

目前,index.html 文件已经被Git跟踪,并且工作区和Git仓库中的index.html文件内容保持一致。 当我们

修改了工作区中index.html的内容之后,再次运行git statusgit status -s命令,会看到如下的内容:

img

文件index.html出现在Changes not staged for commit这行下面,说明已跟踪文件的内容发生了变化,

但还没有放到暂存区。

注意:修改过的,没有放入暂存区的文件前面有****红色的M标记

暂存已修改的文件 git add

目前,工作区中的index.html文件已被修改,如果要暂存这次修改,需要再次运行 git add 命令,这个命令

是个多功能的命令,主要有如下3个功效:

  1. 可以用它开始跟踪新文件
  2. 把已跟踪的、且已修改的文件放到暂存区
  3. 把有冲突的文件标记为已解决状态

img

提交已暂存的文件 git commit -m “提交消息”

再次运行 git commit -m “提交消息” 命令,即可将暂存区中记录的index.html的快照,提交到Git仓库中进行保存:

img

img

撤销对文件的修改 git checkout – index.html

撤销对文件的修改指的是:把对工作区中对应文件的修改,还原成Git仓库中所保存的版本。

操作的结果:所有的修改会丢失,且无法恢复! 危险性比较高,请慎重操作!

img

取消暂存的文件 gti reset HEAD 要移除的文件名称

如果需要从暂存区中移除对应的文件,可以使用如下命令:

img

跳过使用暂存区域

Git标准的工作流程是工作区→暂存区→Git仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到Git仓库,这时候Git工作的流程简化为了工作区→Git仓库。

Git提供了一个跳过使用暂存区域的方式,只要在提交的时候, 给git commit加上-a选项,Git 就会自动把

所有已经跟踪过的文件暂存起来一并提交, 从而跳过git add步骤:

img

Git仓库移除文件

1.从Git仓库和工作区中同时移除对应的文件

2.只从Git仓库中移除指定的文件,但保留工作区中对应的文件

img

Git忽略文件

一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。

文件.gitignore的格式规范如下: .

①以 #开头 的是注释

②以 /结尾 的是目录

③以 /开头 防止递归

④以 !开头 表示取反

⑤可以使用 glob模式 进行文件和文件夹的匹配 (glob指简化了的正则表达式)

glob模式是指简化了的正则表达式:

星号*匹配零个或多个任意字符

②**[abc]** 匹配任何- -个列在方括号中的字符(此案例匹配-个a或匹配-一个b或匹配一个c)

问号?匹配-一个任意字符

④在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配( 比如[0-9]表示匹配

所有0到9的数字)

*两个星号*表示匹配任意中间目录*(比如a/*/z可以匹配a/z、a/b/z 或a/b/C/z等)

img

查看提交历史 git log

如果希望回顾项目的提交历史,可以使用 git log 这个简单且有效的命令。

img

回退指定版本

img

注意:回退到旧版本后不能再使用 git log –pretty=oneline 查看历史版本

Git分支

从主线分支出复线,可以多分支操作项目。类似于平行宇宙,不同分支不会相互影响,完成某个功能后再次合并到主线上。

1.查看分支 git branch

git branch

img

运行结果:

img

“*“ 代表当前所在分支

2.创建分支 git branch 分支名

git branch 分支名 在当前分支下创建新的分支,新分支代码与主线代码一致

img

img

注意:创建新分支后用户还是处于主分支

3.切换分支 git checkout 分支名

git checkout 分支名

img

img

4.分支快速创建和切换 git checkout -b 分支名称

git checkout -b 分支名称

一条命令就可以实现创建和切换分支

img

img

5.合并分支 git merge 分支名

功能分支代码开发测试完毕后可以使用如下命令将完成后的代码合并到master主分支上:

img

img

在分支上进行的操作不会对主分支造成影响,所以切换到主分支后不会看到在复分支上的更改,需要合并之后才可以看见。

6.删除分支 git branch -d 分支名称

img

img

不能在所在的分支上删除分支

7.遇到冲突时合并分支

两个分支都同时对同一个文件进行了修改,在合并时候会报错。此时就需要打开冲突文件手动解决冲突

img

8.将本地分支推送到远程仓库

如果是第一次将本地分支推送到远程仓库,需要执行以下命令:

img

第一次推送分支需要带-u参数,此后可直接使用 git push 推送代码到远程仓库分支

9.查看远程仓库中所有分支列表

git remote show 远程仓库名称

10.跟踪分支

从远程仓库中,把远程分支下载到本地仓库中。需要运行如下命令:

img

11.拉取远程仓库的最新代码

使用 git pull 把远程分支最新的代码下载到本地对应的分支中

img

12.删除远程分支

删除远程分支命令

git push origin –delete 远程分支名

img

Gitbub

1.什么是开源

img

2.什么是开源许可协议

常见的五种开源许可协议

  1. BSD (Berkeley Software Distribution)

  2. Apache Licence 2.0

  3. GPL ( GNU General Public License)

    1. 具有传染性的一种开源协议,不允许修改后和衍生的代码做为闭源的商业软件发布和销售
    2. 使用 GPL的最著名的软件项目是: Linux
  4. LGPL (GNU Lesser General Public License)

  5. MIT (Massachusetts Institute of Technology, MIT)

    1. 是目前限制最少的协议,唯- -的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息
    2. 使用 MIT的软件项目有: jquery. Node.js

3.开源项目托管平台

专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下3个:

  • Github (全球最牛的开源项目托管平台,没有之一 )
  • Gitlab (对代码私有性支持较好,因此企业用户较多)
  • Gitee (又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)

注意:以上3个开源项目托管平台,只能托管以Git管理的项目源代码,因此,它们的名字都以Git开头。

4.远程仓库的两种访问方式

Github.上的远程仓库,有两种访问方式,分别是HTTPS和SSH。它们的区别是:

①HTTPS:零配置;但是每次访问仓库时,需要重复输入Github的账号和密码才能访问成功

②SSH: 需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入Github的账号和密码

注意:在实际开发中,推荐使用SSH的方式访问远程仓库。

5.关于Git上传库

HTTPS上传:

img

  1. 在Github官网创建新的库之后首选HTTPS上传方式
  2. 在你要上传的库中打开 Git Bash控制台
  3. 依次输入官方提示的命令
  4. 在弹出框中输入你的密钥

注意:要先在官网绑定令牌

绑定令牌的方式:

1.找到”C:\Users\无敌暴龙战士.ssh”路径下两个文件 id_rsa.pub 后缀的为私人令牌

2.在github官网个人设置中找到绑定令牌

img

3.选择new SSH key 添加绑定令牌

6.上传修改后的仓库

如果想要上传本地被修改后的仓库需要将修改后的文件全部提交并且使用 git push 命令上传,同时也要注意,在弹出框输入密钥(并非令牌)

关于密钥的生成:

  1. 个人设置中的Developer settings

  2. img

  3. img

7.克隆已上传的库

使用 git clone 远程库地址

img

Git FLS

##Git flsBlog##

多库共存

要想实现单个库连接多个平台可以使用多库连接的方式,比如当更新一个项目后想要同时上传GitHub和Gitee就可以避免繁琐的操作,同时绑定不同的SSH地址。在push或者pull的时候就可以同时上传/获取

原帖子:##git实现多库共存##

方法 1:每次push/pull时需分开操作

首先,指令 git remote -v 查看本地仓库所关联的远程仓库:

git remote rm origin 删除远程库

img

然后,用 git remote add (name) 添加一个远程仓库,其中name可以任意指定(对应上面的origin部分),比如:

img

再次查看本地仓库所关联的远程仓库,可以发现成功关联了两个远程仓库:

img

此后,若需进行push操作,则需要指定目标仓库,git push ,对这两个远程仓库分别操作:

img

同理,pull操作也需要指定从哪个远程仓库拉取,git pull ,从这两个仓库中选择其一:

img

方法 2:每次push/pull时可以同时操作

首先,指令 git remote -v 查看本地仓库所关联的远程仓库:

img

然后,不额外添加远程仓库,而是给现有的远程仓库添加额外的 URL。使用 git remote set-url -add ,已有的名为name的远程仓库添加一个远程地址,比如:

img

再次查看所关联的远程仓库:

img

可以看到,我们并没有如方法 1 一般增加远程仓库的数目,而是给一个远程仓库赋予了多个地址(或者准确地说,多个用于push的地址)。

因此,这样设置后的push 和pull操作与最初的操作完全一致,不需要进行调整。