菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
139
0

Git(1)学习目标

原创
05/13 14:22
阅读数 79994

一:Git的概念

Git是一个版本控制,我们常用的有SVN.

①版本控制:版本控制是一种记录若干文件内容变化,以便将来查看特定版本修订情况的系统,简单讲就是备份和记录。

版本控制的历史:

①本地管理控制系统

人们把项目拷贝到本地磁盘上进行备份,然后以命名方式来区分,这种做法好处是简单,但坏处不少比如备份比较多或许就会混淆不同版本之间的区别,那为了解决这个问题,有人开发了一个本地版本的管理系统。

本地版本控制系统能够将不同版本的文档保存下来并且借助版本记录可以很方便走位定位相关文件但又引入了新的问题,如何让不同系统上的开发者协同工作?

②集中化版本控制系统

 如CVS,Subversion,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都是通过客户端连到这台服务器,取出最新的文件或者提交更新,多年来,这已经成为版本控制系统的标准做法。

这样做的好处是解决了人们开发协同的问题,但是把所有的代码提交到同一台服务器上有一个很明显的问题就是单点故障,如果这台服务器挂机了,那所有人都不能提交代码,还有如果这台服务器如果磁盘发生故障,碰巧没做备份,或者备份不够及时,就还是会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改目录,而被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据已经有人事先完整的提取出来过。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

   比如我们用的svn通过多个服务器来解决这个单点的问题。

③分布式版本控制系统

为了解决集中化版本管理所带来的问题分布式版本管理控制系统DVCS就出生了,在这类系统中,像GIT等,客户端不只是提取出最新版的文件快照,而是把最原始的代码仓库镜像到本地,这样一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复,因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

 

这里的A和B不仅可以和服务器进行连接,也A和B进行相互连接。

所以这样看的集中化版本控制系统是对本地版本控制系统的一次升级,因为它加入了协同操作,分布式版本控制系统是对集中化控制系统的一次补充。使之更加完善。

二:Git的环境配置与常用命令

①Git  Bash Here:通过命令行操作;   git  --version   查看版本

 

 ②在使用Git工作之前,我们需要做个一次性的配置。方便后续Git能跟踪到谁做了修改,我们需要设置对应的用户名与邮箱地址。

因为我们后续连接GitHub与码云的时候也是需要设置的。

git  config --global  user.name “yourusername”     必须要用双引号

git  config --global user.email  youremail@qq.com

git  config --list  查看所有配置

  注意git  config 命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

③理解Git文件的三种状态与工作模式

使用Git操作文件时,文件三种状态:

已提交committed: 已提交表示数据已经安全的保存在本地数据库中(git的本地库)

已修改modified:已修改表示修改了文件,但还没保存在数据库中

已暂停staged:已暂停表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

 

 针对Git文件的三种装态,三个工作区域:工作区,暂存区和Git仓库

工作区:简单理解为在电脑能看到的目录,比如自己创建的本地项目目录

暂存区:Git版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫做HEAD

Git仓库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

三:工作流程与优点

①基本的Git工作流程如下:

A 在工作区中修改某些文件

B 对修改后的文件进行快照,然后添加到暂存区

C 提交更新,将保存在暂存区的文件快照永久转储到Git仓库中

②创建版本库并提交文件

   版本库又名仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。理解了Git文件状态与三种工作区域之后,通过一个列子来体验Git对于文件的基本操作。

A 初始化git本地仓库

 通过执行git  init命令在本地初始化一个本地仓库,执行命令后会在本地初始化一个没有任何文件的空仓库。

 B 新建文本文件git01.txt并添加到暂存区

在.git同级目录下添加get01.txt文件后,使用git  status查看工作目录与暂存区文件状态

 

进行添加到缓冲区:

 

查看缓存区状态:

执行git  add命令添加文件到暂存区(path是路径,可以具体到一个文件也可以具体到一个目录)

 C 提交文件到本地版本库

文件被添加到暂存区后,执行git  commit命令提交暂存区文件到本地版本库中。

 

 git log:命令用于显示提交日志信息,比较常用

 ③时光穿梭机

 企业中在多人的项目开发环境下,使用Git版本控制工具对项目版本进行管理时,通常会对项目不同版本的文件进行查看,项目历史版本,未来版本的切换操作,对于一个项目开发人员,此时对于Git的这些基本命令操作就成为了一项基本技能。

A进行git01.txt修改后,进行查看暂存区状态(下面提示文件被修改,但是没有被提交到暂存区)

 

 我们进行git add git01.txt(添加到暂存区)然后进行查看暂存区(此时显示添加到暂存区了):

 

 我们用git commit -m  ‘git开启时光穿梭机’

 

 我们用git log查看一下记录;

 

 当我们修改了文件没有进行git  add 操作(没有进行添加到储存区中),然后直接git  commit是不能成功的;

 

 

此时执行 git diff HEAD -- git01.txt

 

 又添加一个text文件(没有进行添加到暂存区):

 

 将text.txt添加到暂存区:

 

 此时我们要将text.txt撤销了(暂存区中的撤销):

 

四:本地仓库与远程仓库

远程仓库有:GitHub与码云与我们自己的远程仓库

①:将GitHub中的项目下载下来:

 

 我们在本地创建一个文件夹来放这个项目:

 

 ②将本地的项目推在Gitee中

1.先在码云上创建一个公共的仓库Https

 2.先进行初始化本地仓库,然后进行推到远程仓库

 

 添加远程仓库:$ git remote add pb git://github.com/paulboone/ticgit.git

 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]:

 pb git://github.com/paulboone/ticgit.git现在可以用字串 pb 指代对应的仓库地址了.

----------------------------------------------------------------------------------------------------------

推送本地库文件到远程仓库有俩种方式:一种是Https(上面属于这种) ,另一种是ssh方式(下面属于这种)

①首先在创建的时候是否ssh

 

 ②使用本地Git客户端生成ssh公钥与私钥 执行命令 ssh-keygen  -t  rsa  -C  "gitup账户邮箱"

 

 ③找到公钥绑定到我们的gitup中

 

 

 

 ④检查测试连接执行命令 ssh -T git@github.com

 

 整个操作:

 

 当我们绑定过一次远程仓库,在后后面的修改中我们是不需要进行远程仓库的绑定了。

五:主干分支开发与冲突解决

①本地分支创建,合并,重命名与删除

 创建分支:我们创建分支以后,主干有什么东西,我们分支就有什么东西。

 

 

 

 

 

 

 

 

 

 合并分支,必须我们切换到我们的主干上进行合并。在master中 git merge branch

②远程分支推送和拉取的操作(分支Push与Pull操作)

主分支:一个文件

 

 次分支:俩个文件

 

 

 

 删除远程仓库的分支:(本地的还在)

 

 

 

 

 ③本地分支操作冲突

开发中对不同分支下同一文件进行修改后执行合并时就会出现文件修改冲突情况,这里说明一种比较常见的冲突问题以master和leaf01俩个分支进行演示说明。

1)本地分支操作冲突

①·修改master与leaf01分支前文件的内容

 

②master中添加内容

 

 ③leaf02中添加内容

 

 ④合并分支,出现冲突

 

======是分割符

 ⑤解决冲突问题(1.我们可以只保留master的内容,也可以只保留leaf02分支的内容,也可以合并)

合并前:

 

 合并后:

 

 ⑥解决完冲突后进行提交和查看

 

 ⑦我们也可以用树状图来看

 

发表评论

0/200
139 点赞
0 评论
收藏