SSM Chapter 14 Git详解

Git详解

本章目标:

1. Git简介

在这里插入图片描述
Git是什么?

官网地址https://git-scm.com/

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
在这里插入图片描述

1.1 Git优点:

  • 大部分操作在本地完成,不需要联网
  • 完整性保证
  • 尽可能添加数据而不是删除或修改数据
  • 分支操作非常快捷流畅
  • 与 Linux命令全面兼容

2. 版本控制简介:

2.1 版本控制

工程设计领域中使用版本控制思想管理工程蓝图的设计过程。

在 IT开发过程中也可以使用版本控制思想管理代码的版本迭代。

2.2 什么是版本控制:

如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:

想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
在这里插入图片描述
过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。

看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。

更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给TA(也可能通过Email发送一份给TA),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给TA之后到你收到TA的文件期间,你作了哪些改动,得把你的改动和TA的部分合并,真困难。

于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?

这个软件用起来就应该像这个样子,能记录每次文件的改动:

版本文件名用户说明日期
1service.doc张三删除了软件服务条款57/12 10:38
2service.doc张三增加了License人数限制7/12 18:09
3service.doc李四财务部门调整了合同金额7/13 9:51
4service.doc张三延长了免费升级周期7/14 15:17

这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。

软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

2.3 版本控制工具应该具备的功能

1. 协同修改

多人并行不悖的修改服务器端的同一个文件。

2. 数据备份

不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。

3. 版本管理

在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。
这方面 SVN采用的是增量式管理的方式,而 Git采取了文件系统快照的方式。

4. 权限控制

对团队中参与开发的人员进行权限控制。

对团队外开发者贡献的代码进行审核——Git独有。

5. 历史记录

查看修改人、修改时间、修改内容、日志信息。

将本地文件恢复到某一个历史状态。

6. 分支管理

允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效

2.4 版本控制工具

思想:版本控制

实现:版本控制工具

集中式版本控制工具:

CVS、SVN、VSS……

分布式版本控制工具:

Git、Mercurial、Bazaar、Darcs……

2.5 集中式与分布式

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
在这里插入图片描述
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

那分布式版本控制系统与集中式版本控制系统有何不同呢?

首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。

既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?

比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。

因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
在这里插入图片描述
当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。

3. Git与SVN

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
  • **2、Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
  • **3、Git 分支和 SVN 的分支不同:**分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
  • **4、Git 没有一个全局的版本号,而 SVN 有:**目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
  • **5、Git 的内容完整性要优于 SVN:**Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。在这里插入图片描述

4. Git可以做什么

  1. 防止代码丢失
  2. 远程同步代码
  3. 团队合作利器
  4. 代码版本还原
  5. 记录代码版本

返回顶部

5 . 安装Git

git 官网 https://git-scm.com/

git 下载地址:http://git-scm.com/download/win

安装方式参照官网 https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git

Windows平台上安装Git:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完全不修改Path环境变量。但只能在GitBash下使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. Git结构

Git 工作区、暂存区和本地(版本)库

我们先来理解下Git 工作区、暂存区和版本库概念

  • **工作区:**就是你在电脑里能看到的目录(写的代码存在工作区)。
  • **暂存区:**英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。(计划要提交的文件
  • **版本库:(本地库)**工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    在这里插入图片描述
    返回顶部

7. Git和代码托管中心

7.1 代码托管中心

代码托管中心的任务:维护远程库

局域网环境下:

外网环境下

码云官网地址 : https://gitee.com/

7.2 本地库和远程库

团队内部协作和跨团队协作

1. 团队内部协作流程

在这里插入图片描述

在这里插入图片描述

2. 跨团队协作

在这里插入图片描述

7.3 GitHub

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuerypython 等。

一句话总结: 全球最大的社交编程网站

7.4 GitHub 有什么用

  1. 代码托管
  2. 多人协作
  3. 个人博客
  4. 个人简历

7.5 使用GitHub

  • 注册 : 官网地址:https://github.com/
  • star : 收藏
  • fork : "复制"(将项目拷贝一份到自己的账号下)
  • repository : 仓库
  • watch : 观察(查看代码的最新动态)
  • clone : 将项目克隆到本地

备注:

GitHub官网若打不开时 , 解决方法:修改本地的hosts文件.步骤如下:

  1. C:\Windows\System32\drivers\etc,用记事本的方式打开hosts文件,如图所示:在这里插入图片描述

  2. 添加如下内容:

    192.30.253.112 github.com 
    151.101.113.194 github.global.ssl.fastly.net
    

    或者

    140.82.113.4 github.com
    199.232.5.194 github.global.ssl.fastly.net
    

    注:

    192.30.253.112 是查找的github的网址

    151.101.113.194 是查找github.global.ssl.fastly.net网址

7.6 码云

码云(gitee.com)是 OSCHINA.NET 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管。目前已有超过 350 万的开发者选择码云。**

使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况(原因你懂的)。

如果我们希望体验https://github.com/527515025/springBoot.gitGit飞一般的速度,可以使用国内的Git托管服务——码云gitee.com)。

和GitHub相比,码云也提供免费的Git仓库。此外,还集成了代码质量检测、项目演示等功能。对于团队协作开发,码云还提供了项目管理、代码托管、文档管理的服务,5人以下小团队免费。

码云的免费版本也提供私有库功能,只是有5人的成员上限。

码云官方地址:https://gitee.com/

7.7 Git SSH授权:

解释SSH协议:

SSH 为 [Secure Shell](https://baike.baidu.com/item/Secure Shell) 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。

SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UXLinuxAIXSolarisDigital UNIXIrix,以及其他平台,都可运行SSH。

Git中的HTTP协议与SSH协议的优缺点比较如下:

HTTP协议:

优点:

  • 不同的访问方式只需要一个URL,服务器只在需要授权时提示输入授权信息
  • 相对于SSH而言,不需要生成SSH密钥对再把密钥上传到服务器上。
  • HTTP/S被广泛采用,一般的企业防火墙都会允许这些端口的数据通过。

缺点:

  • 在一些服务器上,架设HTTP/S协议会比SSH协议棘手一些;
  • 每次需要输入用户名和密码,管理这些凭证会比较麻烦一些(当然你可以使用凭证存储工具,keychain(OSX))。
  • 除此之外没有别的缺点。
SSH协议:

优点:

  • 架设简单
  • 数据传输时是安全的(所有数据传输时都经过授权和加密);
  • 高效,和其他3种协议一样,在传输数据时也会尽量压缩数据。

缺点:

  • 不能通过它实现匿名访问。即使使用者只需要读取数据,使用者也要有通过SSH访问你主机的权限,不利于开源项目。
生成SSH密钥:

使用Git Bash Here生成密钥:

ssh-keygen -t rsa 

如图所示:
在这里插入图片描述

  • 密钥存储目录: C:\Users\用户\.ssh 公钥名称: id_rsa.pub 私钥名称 : id_rsa
    在这里插入图片描述
  • 公钥如图:在这里插入图片描述
  • 将公钥复制一下 , 然后复制到SSH公钥处:在这里插入图片描述
    验证ssh是否授权成功 :
# 验证GitHub ssh是否授权成功
ssh -T git@github.com 
# 验证码云 ssh是否授权成功
ssh -T git@gitee.com 

在这里插入图片描述

参考码云生成SSH密钥:
  • 第一:如图点击https://gitee.com/profile/sshkeys在这里插入图片描述

  • 第二:在此页面点击公钥管理: 如图所示:在这里插入图片描述

  • 第三:在此页面点击:生成/添加SSH公钥 如图所示:在这里插入图片描述

  • 复制图上标注的命令,并按照网站操作流程完成SSH公钥的添加:在这里插入图片描述

7.8 在GitHub上高效搜索开源项目

一般的系统检索功能,都会有一个「高级搜索」的功能。需要在另外的界面里展开,进行二次搜索之类的。 GitHub 有没有类似的呢?

答案是「肯定的」。做为一个为万千工程师提供服务的网站,不仅要有,而且还要技术范儿。

如果我们自己开发一个类似的应用,会怎样实现呢?

带着思路,咱们一起来看看,GitHub 是怎样做的。

这里我们假设正要学习 SpringBoot,要找一个 SpringBoot 的 Demo 参考练手。

GitHub 提供了便捷的搜索方式,可以限定只搜索仓库的标题、或者描述、README 等。

以 Spring Boot 为例,一般一个仓库,大概是这样的:
在这里插入图片描述
其中,红色箭头指的两个地方,分别是仓库的名称描述。咱们可以直接限定关键字只查特定的地方。比如咱们只想查找仓库名称包含 SpringBoot的仓库,可以使用语法

1. 明确搜索仓库标题、仓库描述、README
in:name 关键词

比如 : in:name springboot
在这里插入图片描述
如果想查找描述的内容,可以使用这样的方式:

in:description关键词

比如 : in:description springboot
在这里插入图片描述
这里就是搜索上面项目描述的内容

in:readme 关键词

一般项目,都会有个 README 文件,如果要查该文件包含特定关键词的话,可以使用如下方式搜索:
在这里插入图片描述

2. 明确搜索star、fork 数大于多少的
stars:>数字

一个项目 star 数的多少,一般代表该项目的受欢迎程度。虽然现在也有垃圾项目刷 star ,但毕竟是少数, star 依然是个不错的衡量标准。
在这里插入图片描述
如果不加 >= 的话,是要精确找 star 数等于具体数字的,这个一般有点困难。

如果要找在指定数字区间的话,使用:

stars: 10…20 关键词

在这里插入图片描述
fork 数同理,将上面的 stars 换成 forks,其它语法相同

3. 明确搜索仓库大小的

比如你只想看个简单的 Demo,不想找特别复杂的且占用磁盘空间较多的,可以在搜索的时候直接限定仓库的 size 。

使用方式:

size:>=5000 关键词

这里注意下,这个数字代表 K, 5000 代表着5M。例如:
在这里插入图片描述

4. 明确仓库是否还在更新维护

我们在确认是否要使用一些开源产品、框架的时候,是否继续维护是很重要的一点。如果已经过时没人维护的东西,踩了坑就不好办了。而在 GitHub 上找项目的时候,不再需要每个都点到项目里看看最近 push 的时间,直接在搜索框即可完成。

通过这样一条搜索 pushed:>2019-10-03 springboot

就找到了 10 月 3 号之后,还在更新的项目。
在这里插入图片描述
你是想找指定时间之前或之后创建的仓库也是可以的,把 pushed 改成 created 就行。

5. 明确搜索仓库的 LICENSE

咱们经常使用开源软件,一定都知道,开源软件也是分不同的「门派」不同的 LICENSE。开源不等于一切免费,不同的许可证要求也大不相同。 2018年就出现了 Facebook 修改 React 的许可协议导致各个公司纷纷修改自己的代码,寻找替换的框架。

例如查找协议是最为宽松的 Apache License 2 的代码,可以这样:

license:apache-2.0 springboot
在这里插入图片描述

6. 明确搜索仓库的语言

比如查找 Java 的库, 除了像上面在左侧点击选择之外,还可以在搜索中过滤。像这样:

language:java 关键词
在这里插入图片描述

7. 明确搜索某个人或组织的仓库

比如在 GitHub 上找一下某个大神是不是提交了新的功能,就可以指定其名称后搜索,例如我们可以看下 Josh Long 有没有提交新的 SpringBoot 的代码,可以这样使用:
user:joshlong
在这里插入图片描述
组合使用一下,把 Java 项目过滤出来,多个查询之间「空格」分隔即可。

user:joshlong language:java
在这里插入图片描述
找某个组织的代码话,可以这样:

org:spring-cloud 就可以列出具体org 的仓库。

返回顶部

8 . Git常用的操作命令

在这里插入图片描述
Git Bash命令支持Linux相关命令。

8.1 使用Git创建仓库(本地库)

1. 创建本地仓库

桌面鼠标右键点击Git Bash Here, 切换到D盘,创建一个项目目录test,命令如下:

# 切换到D盘
cd /d
# 创建test目录
mkdir test

如图所示:
在这里插入图片描述

2. 初始化本地仓库

使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。

使用当前目录(test)作为Git仓库,我们只需使它初始化

命令如下:

# 切换到test目录下
cd test
# 初始化Git仓库
git init

如图所示:
在这里插入图片描述

初始化后,会在 test 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

查看隐藏的.git文件内容:

# 表示查看隐藏文件
ll –A    -a/A
# 表示查看.git下的文件列表显示
ll .git/

如图所示:
在这里插入图片描述

查看.git/config 内容

cat .git/config

如图所示:
在这里插入图片描述
注意:.git目录是存放本地库相关的目录和文件,一般不要对其进行修改和操作。

3. 设置签名
1). 签名概述:

签名的作用:用于标识不同的开发人员(身份)

形式:

用户名:Staticsnull

Email邮箱:124265419@qq.com

注意:这里的签名和远程库(代码拖管中心GitHub/GitLab)无任何关系

项目级别(仓库):仅在当前本地库范围有效 (此处的test)

**系统级别:**登录当前操作系统的用户范围

**级别优先级:**就近原则:项目级别优先级大于系统(用户)级别签名

注意:(签名级别必须要设置,如果都不设置,使用Git命令时可能会出错。无法辨别)

2). 签名命令

git config

项目级别(仓库):仅在当前本地库范围有效

git config user.name Staticsnull_pro
git config user.email 124265419_pro@qq.com

如图所示:
在这里插入图片描述

**系统级别:**登录当前操作系统的用户范围

git config --global user.name Staticsnull_global
git config --global user.email 124265419_global@qq.com
# 查看当前用户信息
git config --list

如图所示:
在这里插入图片描述

在实际开发过程中,通常只需要设置系统级别即可。如果有特殊需要,再设置项目级别。

第一次使用git时,需要设置你的用户名和邮箱:

  • git config --global user.name “用户名” : 全局配置用户名
  • git config --global user.email “邮箱” : 全局配置邮箱
  • git config --list 查看当前用户信息

注意:

  1. 如果需要对配置信息进行修改,重复上述命令即可
  2. 配置只需要执行一次

8.2 常用命令

1). git status

git status:命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用`git log

例如:可以新建个文件(hello.txt)然后再查看状态 , 命令如下:

# 先查看文件状态
git status
# 新建hello.txt文件 并写入内容:Hello,Git 按esc键 输入:wq退出并保存
vim hello.txt
# 查看文件内容
cat hello.txt
# 再次查看git状态
git status

如图所示:
在这里插入图片描述

2). git add

git add 文件名 : 文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。(将工作区写入暂存区)

描述:此命令将要提交的文件的信息添加到索引库中(将修改添加到暂存区),以准备为下一次提交分段的内容。

例如: 将hello.txt文件从工作区添加到暂存区,命令如下:

git add hello.txt
# 再次查看文件状态
git status

如图所示:
在这里插入图片描述

3). git rm

git rm命令用于从工作区和索引区(暂存区)中删除文件。

命令参数如下:

git rm [-f | --force] [-n] [-r] [--cached] 
[--ignore-unmatch] [--quiet] [--] <file>

例如:将暂存区中的hello.txt文件从暂存区中删除,命令如下:

git rm --cached hello.txt

如图所示:
在这里插入图片描述

4). git commit

git commit : 将添加到暂存区的文件提交到 本地git 仓库.

  • git commit -m “备注信息”:将添加到暂存区的文件提交到 本地git 仓库并添加备注内容
    • -m是输入的参数类型,双引号是备注信息内容

例如: 将hello.txt文件提交到git仓库,命令如下:

git commit -m "add hello.txt"

在这里插入图片描述
可以查看git的日志信息,命令是:git log

5). git remote

git remote命令管理一组跟踪的存储库。

git remote add 自定义仓库别名 远程仓库地址 : 设置仓库别名

git remote -v 查看远程仓库信息

git remote rm 远程仓库别名 删除远程仓库别名

需求说明:创建远程仓库 , 并设置本地库中添加远程仓库:

a. 码云上创建一个新的仓库如图所示:
在这里插入图片描述

b. 添加远程仓库 , 命令如下:

# git remote add origin [远程仓库地址] 添加远程仓库
git remote add origin https://gitee.com/staticsnull/test.git

在这里插入图片描述

6). git push

git push 远程仓库地址 分支名 : 将本地代码推送 到远程同名分支 如 git push origin A:将A分支的代码push到远程git仓库

  • git push -u 仓库地址 分支名称:将本地仓库的文件提交到远程仓库
    • -u 是记住推送地址以及分支,下次推送只需要 git push 即可
  • git push origin master : 向远程master进行push操作,push到远程主干
  • git pull origin master : 将远程主干的代码更新到本地
    • git pull origin master --allow-unrelated-histories :
    • 后面加上 --allow-unrelated-histories , 把两段不相干的 分支进行强行合并

需求说明:将本地仓库(test)中的文件提交到远程仓库

命令如下:

git push -u origin master

在这里插入图片描述
在跳出的窗口中输入码云的用户名和密码:
在这里插入图片描述

码云上查看内容:
在这里插入图片描述

7). git clone

git clone命令将存储库克隆到新目录中。

git clone 远程地址 : 把远程主干(origin master)的项目上克隆到本地(注:origin标识为远程)

例如: 将刚才提交的test文件克隆到本地 ,代码如下:

git clone https://gitee.com/staticsnull/test.git

如图所示:
在这里插入图片描述
clone会做三件事:

1、完整的把远程库下载到本地

2、创建origin远程地址别名

3、初始化本地库

8). git pull

git pull的作用是从一个仓库或者本地的分支拉取并且整合代码。

实例: 将远程主干的代码更新到本地

git pull origin master
# 将A分支的内容拉取下来跟master分支合并
git pull origin A:master

返回顶部

9. 分支

9.1 分支概念

什么是分支?

在版本控制过程中,使用多条线同时推进多个任务。

分支的好处?

  • 同时并行推进多个功能开发,提高开发效率

  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。

  • 失败的分支删除重新开始即可

9.2 分支命令

git branch命令用于列出,创建或删除分支。

git checkout命令用于切换分支或恢复工作树文件。

  • git branch [-a] : 查看当前的分支和远程分支(remote:远程分支) 带星号绿色的为当前所在的分支

    • 比如:git branch 查看当前所处的分支
  • git branch hi : 创建一个叫做"hi"的分支

  • git checkout hi : 从当前分支切换到"hi"分支下

  1. 查看当前有哪些分支:

    git branch
    
  2. 新建一个分支A

    git branch A
    
  3. 切换到指定分支

    git checkout A
    
  4. 查看本地和远程分支

    git branch –a
    
  5. 删除分支

    # 删除本地分支
    git branch -D A
    # 删除远程分支
    git push origin --delete A
    
  6. 合并分支

    # git merge 分支名 : 合并代码  比如: 
    git merge A 
    

9.3 合并分支解决冲突

问题:将两个分支内的文件分别进行修改.(且改变的是同一位置)进行合并。

  1. 查看分支信息:

    git branch
    

在这里插入图片描述

  1. 在master下修改某行文件内容。然后进行提交

    # 切换到master分支
    git checkout master
    # 编辑hello.txt
    vi hello.txt
    # 查看编辑后的内容
    cat hello.txt
    # 添加到暂存区
    git add hello.txt
    # 提交到本地仓库
    git commit -m "master 提交 hello.txt"
    

在这里插入图片描述
3. 在A分支下修改某行(master)同行文件内容。然后进行提交,代码如下:

# 切换到A分支
git checkout A
# 使用vi命令编辑hello.txt文件
vi hello.txt
# 查看hello.txt文件内容
cat helllo.txt
# 将hello.txt文件添加到暂存区
git add hello.txt
# 将hello.txt文件以A分支的名义提交到本地仓库
git commit -m "A 提交 hello.txt"

在这里插入图片描述
4. 切换到master分支 , 并合并A分支 , 代码如下:

# 切换到master分支
git checkout master
# 并合并A分支
git merge A

合并完成之后发现文件冲突,如图所示:在这里插入图片描述

  1. 查看文件冲突

    cat hello.txt
    

在这里插入图片描述

  1. 处理冲突:由人为沟通解决。进行文件编辑,修改文件:

    # 编辑文件,将冲突的符号清除。进行修改内容
    vi hello.txt
    cat hello.txt
    

在这里插入图片描述

  1. 重新提交到本地库,并提交到远程仓库

    git add hello.txt
    git commit -m "merga A"
    git push -u origin master
    

在这里插入图片描述

10. 使用Git 工具管理文件

思路如下:

1 . 创建本地仓库并初始化

  1. . 创建一个文件夹

  2. . 鼠标右键 --> GitBashHere

  3. . Git init 初始化仓库

2. 管理文件

git add [文件名] 追踪文件

git add 将工作目录中的文件全部添加到暂存区

git status 查看文件状态

git checkout [文件名] 用暂存区中的文件覆盖工作目录中的文件

git rm --cached [文件名] 将文件从暂存区中删除

git rest --hard commitID 将git仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录

git log 查看提交记录

3. 提交到本地仓库

git commit -m [提交时的描述] 向仓库中提交代码

4. 登录GitHub 官网创建仓库

  1. 登录GitHub官网创建一个账号
  2. 创建一个远程仓库

5. 提交到GitHub仓库

git push [仓库地址] [分支名称] 把本地仓库的文件上传到GitHub上

git push -u [仓库地址] [分支名称] -u:记住推送地址以及分支,下次推送只需要输入 git push 即可

git remote add [自定义仓库别名] [远程仓库地址] 设置仓库别名

11. IDEA中使用Git插件

1. IDEA-Git插件

配置版本控制系统 , 如图所示:
在这里插入图片描述

2. 使用Git生成本地库–> git init

在这里插入图片描述
在这里插入图片描述

3. 将工作区的文件加入到暂存区(git add)

在这里插入图片描述

git add之后文件变成绿色
在这里插入图片描述

4. 将暂存区的文件提交到本地库–>git commit

commit (将缓存区中的内容保存至本地仓库),文件为绿色意为可commit
在这里插入图片描述
在这里插入图片描述

5. 创建远程仓库

码云或者GitHub都可以
在这里插入图片描述

6.IDEA中设置远程仓库地址 -->git remote

在项目右击 , 选择如下选项:
在这里插入图片描述
在这里插入图片描述

7.push提交–>git push

在这里插入图片描述
在这里插入图片描述

8. 开发人员Git-clone操作

在这里插入图片描述
在这里插入图片描述
返回顶部

12. GitLab

GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。

功能:Gitlab 是一个提供代码托管、提交审核和问题跟踪的代码管理平台。对于软件工程质量管理非常重要。

版本:GitLab 分为社区版(CE) 和 企业版(EE)。

配置:建议CPU2核,内存2G以上。

13. GitLab的服务组成

Nginx:静态web服务器。

gitlab-shell:用于处理Git命令和修改authorized keys列表。(Ruby)

gitlab-workhorse: 轻量级的反向代理服务器。(go)

GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。

logrotate:日志文件管理工具。

postgresql:数据库。

redis:缓存数据库。

sidekiq:用于在后台执行队列任务(异步执行)。(Ruby)

unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)

14. GitLab安装

官网地址:https://about.gitlab.com/

CentOS安装GitLab官网地址:https://about.gitlab.com/install/#centos-7

官网rpm包下载位置:https://packages.gitlab.com/gitlab/gitlab-ce/

官方提示:我们强烈建议下载Omnibus包安装,因为它安装起来更快,更容易升级,并且它包含了其他方法所没有的增强可靠性的特性。我们还强烈推荐至少4GB的空闲RAM运行GitLab。

安装过程如下:

1 . 安装并配置必要的依赖关系

在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问。

1.1 安装SSH
sudo yum install -y curl policycoreutils-python openssh-server
1.2 将SSH服务设置成开机自启动,命令如下
sudo systemctl enable sshd
1.3 启动SSH服务,命令如下:
sudo systemctl start sshd
1.4 添加http和https服务到firewalld

备注: pemmanent表示永久生效,若不加–permanent系统下次启动后就会失效:

# 备注: pemmanent表示永久生效,若不加--permanent系统下次启动后就会失效:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
1.5 重启防火墙,命令如下:
sudo systemctl reload firewalld

接下来,安装Postfix发送通知电子邮件。如果您想使用其他解决方案发送电子邮件,请跳过此步骤,并在GitLab安装后配置一个外部SMTP服务器。

1.6 安装Postfix以发送通知邮件,命令如下:
sudo yum install postfix
1.7 将Postfix服务设置成开机自启动,命令如下:
sudo systemctl enable postfix
1.8 启动postfix,命令如下:
sudo systemctl start postfix

说明:

Postfix是一种电子邮件服务器,想要作用的范围是广大的Internet用户,试图影响大多数的Internet上的电子邮件系统,因此它是免费的。

备注:

在安装Postfix期间,可能会出现配置屏幕。选择“Internet Site”并按enter键。使用您的服务器的外部DNS以“mail name”并按enter。如果出现额外的屏幕,继续按enter键接受默认值。

2 . 添加GitLab镜像源并安装gitlab服务器

2.1 添加GitLab镜像源:

添加GitLab镜像有多种方式:

方式一 :

使用官网提供的镜像地址,命令如下:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

但是这种方式会比较慢,可以使用第二种方式:

方式二 :

使用wget 用于从外网上下载插件

检查系统是否已经安装wget,命令如下:

wget -v

若未安装wget,请先安装,命令如下:

yum -y install wget

使用国内地址,添加gitlab镜像gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm

gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm地址:

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm

安装gitlab 命令如下:

rpm -ivh gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm

如果在官网上已提前下载好gitlab的rpm包,可以使用第三种方式:

方式三:

下载GitLab社区版最新的rpm包,国内下载地址 : https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm

新建目录:

mkdir -p /usr/local/software

使用xftp将rpm文件上传到/usr/local/software/下,运行以下命令,安装:

rpm -ivh /usr/local/software/gitlab-ce-12.2.1-ce.0.el7.x86_64.rpm

如图所示 , 代表安装成功
在这里插入图片描述

2.2 修改gitlab配置文件

修改gitlab配置文件指定服务器ip和自定义端口,命令如下:

vi  /etc/gitlab/gitlab.rb

找到文件中external_url 'http://www.example.com'一行,并将后面的地址改为:

external_url 'http://localhost'

进入编辑器后按“i”键进入编辑状态,ESC键退出编辑状态

退出并保存,命令输入“:wq!”

ps:注意这里设置的端口不能被占用

2.3 使配置文件生效

输入以下命令,使得配置文件生效

gitlab-ctl reconfigure 
2.4 重启 gitlab

命令如下:

gitlab-ctl restart
2.5 登录GitLab

等待几分钟后,地址栏输入服务器ip和指定端口进行访问。

15. GitLab 常用的操作命令:

# 启动所有服务 这个重启也会继续开启 相当systemctl enable 
gitlab-ctl start  
# 关闭所有服务
gitlab-ctl stop  
# 重启所有服务
gitlab-ctl restart  
# 查看所有服务状态 
gitlab-ctl status 
# 查看日志信息
gitlab-ctl tail
# 列举所有启动服务
gitlab-ctl service-list 
# 平稳停止一个服务
gitlab-ctl graceful-kill 
# 帮助
gitlab-ctl help  
# 修改配置文件之后,需要重新加载下 
gitlab-ctl reconfigure 
# 查看所有服务配置文件信息 
gitlab-ctl show-config 
# 卸载这个软件
gitlab-ctl uninstall  
# 删除gitlab数据,重新白手起家
gitlab-ctl cleanse 

返回顶部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值