Git的使用

文章目录

  • 简介
  • 版本控制系统(VCS)
  • 工作模式
    • 集中式的工作模式
    • 分布式的工作模式
  • git的部分概念
    • git的诞生
    • Git的工作模型
      • 集中式
      • 集成经理开发者模型
      • 超大型项目的工作模型如linux
    • Git的工作流程
    • git基础概念(重要)
  • Git环境搭建
    • Git的下载安装
    • git Bash 简介
    • 注意事项
    • Git 初始化本地版本库(还有克隆的方式)
  • git 常用操作
    • 创建用户
      • 创建系统用户
      • 创建全局用户
      • 创建本地用户
    • 基本操作(重要)
      • 创建一个文件
      • git status (检查当前版本库文件状态)
      • 添加文件到暂存区并查看状态`git add ` (以跟踪)
      • 修改已跟踪文件并且查看状态
      • 添加多个文件(可以使用*作为通配符)
      • 文件提交到本地版本库
      • 忽略文件(.gitignore)
      • git diff
        • 仅工作区修改 `git checkout`
        • 已在暂存区修改`git reset HEAD`(取消暂存)
    • 回退到之前的版本(已提交到本地版本库撤销)
      • 查看本地库版本日志
      • 回退版本
        • git reset --soft
        • `git reset --mixed`
        • `git reset --hard`
    • 删除操作
  • git分支
    • 分支的新建和合并
    • 分支基本操作
    • 赘述
    • 分支 - 变基
  • git远程版本库概述
  • github
    • github简介
    • github注册和登录
    • github免密登录
      • 免密机制的工作原理
      • 设置本地库对Github的免密 登录
  • 创建github远程空版本库
    • 将本地版本库内容push到远程版本库
      • 命令执行具体状况
    • 将远程库clone到本地
    • 从远程库拉pull内容到本地
    • 查看本地的远程库信息
    • 删除本地远程库的信息
    • 删除github远程库
  • git 标签
    • git 版本发行
    • 什么是标签
    • 标签的种类
      • 创建轻量标签,
      • 创建附注标签
      • 列出标签
      • 修改和标签绑定的特定版本
      • 推动标签到远程版本库
      • 删除标签
  • 码云gitee 远程版本库
    • 注册,
    • gitee 免密登录配置
    • 创建空版本库
    • 推送本地项目到码云
  • 自定义远程版本库
    • 安装git(我的linux系统是centos7)
    • 创建git用户
    • 免密登录配置
    • 创建并初始化版本库
    • 修改版本库owner
    • 禁用shell登录:
    • 客户端连接远程版本库
  • 码云和github添加redeme文件后,本地连接被拒的原因(通过git clone命令初始化本地库)

简介

介绍集中式和分布式版本控制系统的概念。
官网入门书籍
菜鸟git教程
蛙课网视频地址

版本控制系统(VCS)

 版本控制系统(version control system),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。用的比较多的如svn(subversion),git等。
版本控制系统理解

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

svn百度百科
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

区别:
Git只关心文件数据的整体是否发生了变化,而多数的其他系统则只关心文件内容的具体差异,它们在每个版本中记录着各个文件的具体差异。在Git中的绝大多数操作都只需要访问本地文件和资源,不需要联网。这是因为Git在本地磁盘上就保留着所有当前项目的历史更新,所以处理起来速度飞快,这是使用空间换时间的处理方式。使用Git,即使在没有网络或VPN的情况下,你同样可以非常愉快的频繁提交更新,等到有了网络的时候再提交到远程的仓库。

工作模式

版本控制系统的工作模式分为两种: 集中式的工作模式和分布式的工作模式

集中式的工作模式

Git的使用_第1张图片在这里插入图片描述

有一个单一的集中管理的服务器,保存所有文件的修订版本。而协同工作的人们都通过客户端连接到这台服务器,获取最新的文件或者提交更新。
集中式版本控制系统存在以下缺点:

  1. 一旦服务器出现问题,所有的客户机将无法更新到最新版本,并且无法恢复至指定的版本。因为所有版本信息都在中央版本库中。
  2. 必须具有网络环境,单机无法实现版本控制。
  3. 客户机之间无法直接进行联系,无论中央版本服务器是否出现问题。
  4. 服务器压力大,不适合开源开发

优点
1、管理方便,逻辑明确,符合一般人思维习惯。
2、易于管理,集中式服务器更能保证安全性。
3、代码一致性非常高。

CVS, SVN都是集中式版本控。

分布式的工作模式

Git的使用_第2张图片

在这里插入图片描述
在分布式版本控制系统中,客户端不仅仅是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。所以每一次提取的操作,都是对代码仓库的完整备份,因此也就不必担心协同工作用的服务器发生故障。
优点:

  1. 分布式版本控制系统中无需中央版本库服务器,每台客户机都具有独立的版本控制功能,多台客户机之间相连就可以实现文件共享及版本管理。
  2. 无需网络环境也可以进行版本控制,在网络环境下可以实现协同工作。Git就是采用的分布式工作模式。

git的部分概念

git官网

git的诞生

git的诞生

Git的工作模型

git的工作模式

集中式

在这里插入图片描述和集中式版本控制系统一样,Git设置了一个共享库,每一个开发者可以从其中获取更新版本和提交最新版本,每一个开发者都是平等的,(版本信息本地也有)。

集成经理开发者模型

Git的使用_第3张图片若干的开发者从共享仓库克隆代码,更改代码提交给集成经理,然后由集成经理提交到共享仓库,他们具有不同的权限。

超大型项目的工作模型如linux

在这里插入图片描述项目分成不同的子系统,开发子系统相关的程序源提交对应的代码到上一级,上一级再对子系统进行集成提交到共享仓库

Git的工作流程

1)初始化一个本地版本库,每个版本库仅需要执行一次。
2)将中央版本库内容克隆到本地版本库,每个客户机仅需要执行一次。
3)添加指定文件到版本控制管理(只是添加到暂存区)
4) 将修改操作提交到本地版本库(将暂存区的内容提交到本地版本库)
5) 将本地版本库中的修改内容“推送”到中央版本库,客户机需要在一阶段性工作完成之后或在某些时间点(下班,周五)将修改过的内容备份到中央版本库,方便他人更新到最新的代码。
6) 将中央版本库中的变化内容“拉取”本地版本库,客户机需要不时的更新才可以获取最新的内容。

以下是对Git部分概念的示意图,工作区和版本库都是在本地
Git的使用_第4张图片工作区:存放着用户可编辑的文件本身。
暂存区:staging area,存放对文件的快照。
分支区:该区域中可以包含很多分支,而每个分支都可以记录当前工作区中文件的状态快照。

下面是暂存区示意图
在这里插入图片描述

staging area 位于本地,在提交之前可以对代码进行格式化和检查。

git基础概念(重要)

git基础概念

Git环境搭建

Git的下载安装

  1. windows版本的下载地址:https://git-scm.com/download/win

  2. 运行下载的windows的exe(可执行程序)(不太会,一路默认,除了配图的

    • 选择安装目录.
    • 选择安装的组件
    • 是否创建快捷方式
    • 选择使用的编辑器
    • 选择使用git的方式,这里选择只允许git bash(版本控制软件)。Git的使用_第5张图片
    • 选定git用于https连接的ssl/TLS库
    • 配置行尾转换
    • 配置和git bash 一起使用的 terminal emulator(终端模拟器)
    • 配置你喜欢的特性
    • 安装等待完成即可
    • 全部完成后默认打开当前版本的说明:file:///C:/Program%20Files/Git/ReleaseNotes.html
  3. 验证安装成功
    Git的使用_第6张图片在桌面右下角找到或搜索到git Bash,打开,执行git --version查看当前版本信息。如下说明安装成功

Git的使用_第7张图片

git Bash 简介

git Bash 是一种windows下的一种linux命令行工具,git的命令行工具,可以执行linux命令,将盘符模式的目录模拟成linux的二级目录形式。但是由于是在windows系统中运行,不区分大小写。默认打开是在当前用户的目录下
在这里插入图片描述
mingw百度百科

注意事项

版本控制文件类型:对于版本控制系统,无论是CVs, SVN, GIT,都只能控制文本文件,对二进行制文件是无法控制。不幸的是,微软的office文件都属于二进行制文件,不能使用版本系统进行控制。字符编码与记事本:建议使用编码UT-8

Git 初始化本地版本库(还有克隆的方式)

1.由于我们可能有很多的项目,那么创建一个易于理解的目录结构来当做对应项目的本地版本库
如 d:/git/repositories/billing(在repositories目录下以项目名称的形式创建目录存放对应的项目的版本信息)
2.对创建的目录执行初始化操作 git init,那么关于billing项目的本地版本库就创建好了,会在billing文件夹下生成.git文件(隐藏目录)
Git的使用_第8张图片3. .git这个目录下包含了当前版本库正常工作所需要的所有内容:暂存区文件、版本记录文件、配置文件等。换句话说,如果你想从项目中删除Git的版本控制,但又要保留项目原文件,那么只需要删除这个.git目录就可以了。这样,这个项目就与Git没有了任何关系。

git 常用操作

创建用户

 作为版本控制系统的客户端,每台客户机对版本库的所有提交操作都需要注明操作者身份,所以客户机首先需要进行自我身份的注册,即创建用户。Git要求“用户名与Email"这两样信息是必不可少的。Git具有三种不同的创建方式,会产生三种不同作用域的用户。这三种创建方式的用户信息会写到三个不同的配置文件中。这三种用户的创建均要使用git config命令,只不过使用的选项不同。这三种创建方式的创建的用户作用域由大到小依次是:系统用户、全局用户与本地库用 。在多种用户都进行了创建的前提下,小范围的用户会覆盖大范围用户,即默认会以小范围用户操作Git。系统用户:当前主机系统中所有用户均可使用的Git用户。全局用户:当前主机系统的当前登录用户可以使用的Git用户。本地库用户:只能对当前的本地版本库进行提交的Git用户。
注意:window10中有权限限制,以管理员省份运行即可

创建系统用户

1.执行git config --system (window10中有权限限制,以管理员省份运行即可)
Git的使用_第9张图片2.这个命令具体是修改git安装目录下/mingw64/etc/gitconfig文件(可以在命令行窗口使用cat命令查看),还用git config --system --list
Git的使用_第10张图片在这里插入图片描述

在这里插入图片描述

创建全局用户

  1. 命令git config --global
    Git的使用_第11张图片

  2. 查看具体创建信息(位于当前用户的.gticonfig文件中)
    在这里插入图片描述

创建本地用户

  1. 必须在本地库的目录下执行对应的命令git config
    Git的使用_第12张图片
  2. 具体的配置信息位于项目的初始化版本库.git目录下的config文件中使用cat查看
  3. git config --list
    在这里插入图片描述默认后面的用户信息会覆盖掉前面的

基本操作(重要)

以下操作需要在初始化的版本库目录下操作
下面是文件的四个状态,

  1. 没有被跟踪
  2. 添加到暂存区(已被跟踪)
    - 暂存已修改
    - 暂存未修改
    Git的使用_第13张图片

创建一个文件

在这里插入图片描述

git status (检查当前版本库文件状态)

Git的使用_第14张图片这里表示没有被跟踪的文件

当然还有简单的格式输出git status -s,其中s也可以改成short。
Git的使用_第15张图片
这里的A表示第一次添加到暂存区,M:红色为修改过未被添加进暂存区的,绿色为已经添加进暂存区的,??表示没有添加到暂存区,还有MM,AM之类的组合

添加文件到暂存区并查看状态git add (以跟踪)

警告说明: 这里的LF是linux下面的换行符,而CRLF是win上的换行符

![在这里插入图片描述](https://img-blog.csdnimg.cn/2019030217030382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMTgyODcz,size_16,color_FFFFFF,t_70

修改已跟踪文件并且查看状态

Git的使用_第16张图片
在暂存区修改后的文件需要使用git add 命令重新添加,否则使用提交命令提交的是上次使用add命令添加的文件(未修改之前的文件)

使用add 命令重新添加后上图中红色字体显示为绿色,表示修改已暂存,然后就可以提交到本地库

添加多个文件(可以使用*作为通配符)

中文文件名的字节码也是无语了
在这里插入图片描述

文件提交到本地版本库

git commit -m
这里的-m表示操作提示(就是标注一下具体修改了啥的)(而且git禁止不带注释的提交)
Git的使用_第17张图片
大致就是告诉你提交文件发生了那些变化
一般刚clone下来的版本库和提交所有的版本库查看状态如下
在这里插入图片描述

忽略文件(.gitignore)

 (这里说的是在git初始化版本库目录(工作区))一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子:

- 在工作区创建一个名称为` .gitignore`的文件,(`这个文件需要add到暂存区并且commit才会生效`),我们编辑该文件,写入一些匹配规则
- .gitignore 的格式规范如下:

	 - 所有空行或者以 # 开头的行都会被 Git 忽略(理解为注释)。

 	- 可以使用标准的 glob 模式匹配。

	 - 匹配模式可以以(/)开头防止递归。

	 - 匹配模式可以以(/)结尾指定目录。

	 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

  所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号() 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。

# 不跟踪这个名称的文件
info.txt

# 不跟踪以  .a结尾的文件
*.a
# 但是lib.a文件例外
!lib.a
# 忽略当前目录下的todo文件,子目录中的TODO文件不被忽略
/TODO
# 忽略 build 目录下的所有文件
build/
# ignore doc/notes.txt, but not doc/server/arch.txt  
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

  最后就是添加到暂存区,并且提交到本地版本库
Git的使用_第18张图片

git diff

1)比较工作区与暂存区
查看工作区与暂存区内容的区别,使用无选项的git diff命。
Git的使用_第19张图片git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。

  1. 比较暂存区与本地库。
    查看暂存区与本地库中内容的区别,使用带-cached选项的git diff。
    先提交之前的修改,再查看
    Git的使用_第20张图片### 撤销修改

对于已修改过的文件内容需要进行撤销,根据修改内容已经出现的位置可以分为三种情况:
1, 仅仅是工作区中内容进行了修改,还未添加add到暂存区 。
2, 已经add添加到暂存区,但是还未commit提交到本地版本库 。
3, 已经提交commit到本地版本库

不同的情况具有不同的撤销方式。

仅工作区修改 git checkout

Git的使用_第21张图片

已在暂存区修改git reset HEAD(取消暂存)

先执行暂存区修改撤销,再执行工作区修改撤销
在这里插入图片描述

回退到之前的版本(已提交到本地版本库撤销)

查看本地库版本日志

 若修改过的文件,不仅add到了暂存区,还commit到了本地版本库,还能撤销吗?已经是无法撤销修改了,但是可以回退到修改前的版本。

  1. git log 查看历史版本,这里会显示提交的作者,提交日期,提交的注释信息
    Git的使用_第22张图片每一个记录单元均由五行构成:
    第1行: commit的id,由于Git是分布式版本控制系统,整个系统中存在有多个版本库,为了保证各个版本库中commit的id不重复,所有Git中的commit的id不是顺序递增的,而是与版本库主机的IP,版本库,提交者,提交时间相关的内容计算出来的一个值。
    第2行:提交者的信息
    第3行:提交的时间
    第4行:分隔行,即空行。将前面所述基本信息与后面的修改日志内容进行分隔。
    第5行:提交日志信息。

  2. 查看简单形式的日志也可通过为git log命令添加选项--pretty=oneline,以单行形式简单展示历史记录信息Git的使用_第23张图片

3.git log --pretty=oneline --abbrev-commit前面方式下的commit-id显示的是全长度的id,可以以简写的commit-id方式来显示,只需要添加--abbrev-commit选项即可。abbrev:缩写,简写。
在这里插入图片描述4.翻页与退出
当 git log日志命令显示的内容太多,无法在一页内显示完毕所有内容时,其最后一行会出现一个冒号,让输入命令。
常用的命令有:
回车:显示下一行
空格:显示下一页
q:退出git log命令

  1. HEAD指针
      Git会默认创建一个master分支,即主分支。这是Git对版本进行管理的唯一的一条时司线。在这条master时间线上有很多版本的时间节点,而HEAD指针则指向的是当前刚刚提交的版本时间节点。它可以通过~的数量来表示当前版本之前的版本,例如, HEAD^表示当前版本的前一个版本, HEADA^表示前两个版本,但是之前的版本较多的时候, ^的数量将不好数,此时可以使用~加数字表示当前版本之前的第几个版本。
    Git的使用_第24张图片6. 查看可引用的历史版本git reflog
    使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生回退,则可能会出现HEAD指针之后仍存在版本的情况,而这些版本信息通过git log 命令是看不到的。所以我们就得使用git reflog可查看到所有历史版本信息。由于查看所有历史版本信息的目的大多是为了进行版本回退或恢复使用 commit-id,所有该命令被命名为reflog,即引用log
    Git的使用_第25张图片Git的使用_第26张图片

回退版本

gitreset命令可以实现版本回退,其有三个选项,可以完成三种不同效果的回退,回退三种不同的Git状态。

git reset --soft

回退到指定版本。但仅仅修改分支中的HEAD指针的位置,不会改变工作区与暂存区中的文件的版本。实现上是改变回暂存区commit之前的状态。
以下是回退前后对比:
Git的使用_第27张图片
提交前后版本对比Git的使用_第28张图片

git reset --mixed

回退到指定版本。它不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回 退到了指定版本。但是工作区中的版本仍是回退前的版本。
–mixed是git reset命令的默认选项。Git的使用_第29张图片

git reset --hard

回退到指定版本。该命令不仅修改了分支中HEAD指针的位置,还将工作区、暂存区和本地库中数据也回退到了指定的版本。Git的使用_第30张图片

删除操作

要删除文件,首先要清楚该文件所处的git状态。若要是该文件未被Git管理,在工作区直接进行删除即可。但是,若该文件已经经过多次add与commit操作后要文件要被删除,则我们就需要通过Git命令来操作

1.查看暂存区的文件git ls-files
Git的使用_第31张图片
2.查看本地库文件列表
git ls-files --with-tree=HEAD该命令实际上查看的是主分支上当前HEAD指针所指向的时间点的文件列表。若查看上一时间点的文件列表,则可将HEAD替换为HEAD^。当前,也可以使用HEA~n
Git的使用_第32张图片

3。只删除暂存区的文件
git -rm --cached 仅仅只能删除暂存区的文件
Git的使用_第33张图片4. 删除本地库文件只需要将上面的操作提交git commit即可。

5.恢复被删除的文件git reset HEAD
暂存区与本地库中的指定文件均被删除后要恢复,最简单的方式就是再对该文件进行add和commit操作,该操作不再演示。这里主要演示的是如何恢复在暂存区删除的文件。
这个命令执行之前,你必须能看到如下状态
Git的使用_第34张图片6. 完全删除git rm
所谓完全删除,指的是将工作区、暂存区和本地库中的指定文一次性均删除。在这里插入图片描述

这个时候就会发现工作区和暂存区的文件被删除,但是本地版本库需要执行提交操作

7.恢复被删除的数据
查看一下被删除版本的commit-id,然后回退到对应版本即可,自行查看前后区别
$ git reset --hard HEAD^
在这里插入图片描述
然后就会发现数据已经恢复(包含工作区,暂存区,本地库)

git分支

官网分支简介

  1. master是默认分支,在执行git init时创建,
  2. 我们之前说过git版本保存的是不同时刻的文件快照,我们每次提交是会提交当前所在的分支信息,这个信息相当于一个指针指向对应的快照
  3. 之前提到过head指针,我们可以切换所在分支,来改变其指向。
    Git的使用_第35张图片

分支的新建和合并

官网分支与合并
1、master的最后的版本 处在其他分支的上游,(而不是其他叉路),只需要将master的指针向前移动
2、 如果道路已经岔开的话,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的工作祖先(C2),做一个简单的三方合并。(这种情况下存在对同一文件的修改,可能会发生合并冲途
在这里插入图片描述

分支基本操作

1.创建一个分支并且切换到该分支
git checkout -b后跟分支名称
在这里插入图片描述
2.单独的创建和切换分支
上面的操作相当于两个命令

git branch 分支名称
git checkout 分支名称

Git的使用_第36张图片
3、查看分支(可以显示当前分支所在)
git branch
Git的使用_第37张图片
4、 删除分支
git branch -d 分支名称(不能删除当前所在的分支)
在这里插入图片描述

5、合并分支
git merge 分支名称 这里需要理解分支的主次,如果当前在master分支,那么git merge a,就是将a分支合并到master上,
1.我们切换到hotfix 分支,做出修改,提交,然后切换回master,执行合并命令,完成后hotfix指针和master指针指向同一位置
Git的使用_第38张图片6. 分支合并与冲突
 Git的冲突检测单位是文件,即当不同分支对同一个文件进行修改后进行合并,就会产生冲突。
 这是与SVN不同的。SVN检测冲突是文件中的列,什么意思?若两个分支修改的不是同一个文件,合并时肯定不会产生冲突;但若修改的是同一个文件上的不同行的内容,合并时也不会产生冲突;若修改的是同一个文件上同一行上的不同列,在合并的时候也不会产生冲突。只有两个分支修改的是同一个文件同一行中同列数据的时候,在合并时才会产生冲突。
模拟:
a.切换分支,分别查看两分支下文件内容一致
b. 切换分支,分别修改两个文件的hello.html文件,并且add,commit
c. 切换到master 上,执行合并命令
Git的使用_第39张图片d.修改冲突的文件合并后文件会变成这样,你可以使用vim查看,手动修改,add,commit即可
Git的使用_第40张图片Git的使用_第41张图片e.成功后切换分支查看内容即可
一般分支创建是为了解决问题或者完成对应的任务,问题解决后合并,合并后应该删除,需要时可以重新创建

f.使用命令查看分支的版本历史

添加 git log --pretty=oneline --abbrev-commit 命令后添加--graph选项
Git的使用_第42张图片h.删除分支(以前的版本历史还存在)
Git的使用_第43张图片

赘述

命令详情 描述
git branch -v 查看当前分支的最后一次提交
git branch --merged 查看哪些分支已经合并到当前分支
git branch --no-merged 查看所有包含未合并工作的分支
git branch -D 工作未合并可能会删除失败,这需要-D强制删除

分支开发工作流

分支 - 变基

分支 - 变基

将提交到某一分支上的所有修改都移至另一分支上 git rebase

git远程版本库概述

为了方便团队协作, Git一般会使用中央版本库。相对于本地版本库而言,中央版本库都在其它主机上,我们一般称中央版本库为远程版本库。常用的远程版本库有: GitHub,码云Gitee

github

github简介

GitHub是一个面向开源及私有软件项目的托管平台,因为平台只支持Git作为唯一的版本库格式进行托管,故名为GitHub. Hub:中心,所以Git Hub,即Git中心。

简单说,Github是一个基于git的社会化代码分享社区。

github注册和登录

1.打开官网,天写注册表单
官网地址:https://github.com
Git的使用_第44张图片2、个人计划:选择免费用户还是付费用户
免费用户的仓库是公开的,付费是私有的
Git的使用_第45张图片3、点击continue后进行,定制你的个人经验。
第一项是:你怎样描述你的编程经验等级。第一个选项是:编程新手
,第二个选项是:有些经验,第三个选项是:非常有经验
第二项是:你使用GitHub来做什么。选项分别是:设计,作业,查找;开发,项目管理,其它。
第三项是:对你自己的描述,哪个最接近。选项分别为:业余爱好者,学生,专业人士,其它。

完成后提交即可

4.验证邮箱地址(打开邮箱,按提示操作即可)
Git的使用_第46张图片
5、重新登录后,显示界面Git的使用_第47张图片

github免密登录

Git的本地仓库要不时的从GitHub上接取数据及向GtHub推送数据,但每次都要通过帐号与密码的身份验证才可访问,非常麻烦。所以我们要设置免密登录,使用Git本地版本库可以免密登录并访问

免密机制的工作原理

1、免密登录机制Git主机间的通信采用的是SSH协议,即Sercure Shell协议。该协议的免密登录机制要求主机之间采用SSH-key即SSH密钥进行身份验证。SSH密钥包含“公钥与私钥”,所以我们首先要了解什么是“公钥与私钥”,然后还要理解“公钥与私钥”在免密登录中的作用,即免密登录的工作原理。

A. 公钥与私钥
对与公钥与私钥要了解以下三点:
“公钥与私钥加密”是一种“不对称的加密文式” ,是传统的“对称加密方式”的功能的增强。最常见的对称加密方式是:用户名密码方式。
公钥与私钥是成对的,即一个公钥对应一个私钥。使用公钥加密后,只能使用私钥进行解密。
公钥与私钥的关系:就好比“锁与钥匙”的关系。公钥相当于“锁”,锁是可以被他人看到的,是要发送给别人的,所以称为公钥;私钥相当于“钥匙”,它是不能公开的,只能有公钥发出者保存。

B. 免密码登录的工作原理免密登录在Master/Slave主从集群中使用较多,且多用于Master主机免密登录访问Slave主机,所以对于免密登录原理的分析就以Master/Slave为例。对于免密登录的机制,主要由两部分构成:构建与验证。
Git的使用_第48张图片

设置本地库对Github的免密 登录

此时我们要设置本地库免密登录GitHub,即这里的本地版本库相当于前面的 Master,而 GitHub则相当于slave。所以,密钥对应由本地版本版本库生成,而GitHub中只需要保存公钥即可。

  1. 本地库主机的设置
    A. 查看密钥文件由于生成的密钥存放在本地版本库主机的当前用户主目录下的隐藏目录.ssh下面 两个隐藏文件中,这两个文件分别是id_sra与id_sra.pub。其中id_sra中存放的是私钥, id_sra.pub中存放的是公钥。所以生成密钥前首先要看本地版本库主机的当前用户主目录,确认有没有.ssh目录。
    使用ls -a命令查看即可

B.使用ssh-keygen

ssh-keygen -t rsa -C "[email protected]" 一般是这样的命令进行生成的,这里的-c表示备注,内容随意,-t 表示生成公钥的类型介绍
Git的使用_第49张图片C. 再次查看密钥文件再次查看本地版本库主机的当前用户主目录时,发现已经生成了.ssh目录,查看该目录其下也生成了id_rsa与id_rsa.pub文件。说明SSH密钥生成成功。

D。github设置
在这里插入图片描述

e. 赋值id_sra.pub文件中的公钥到这个界面,提交即可(这里的title是任意定义的)
Git的使用_第50张图片

创建github远程空版本库

1.打开new repository页面(右上角)
Git的使用_第51张图片2.填写表单
名称和本地版本库保持一致即可
Git的使用_第52张图片3)进入空版本库页面
点击create repository后,即可进入远程版本库页面。远程版本库创建好之后,默认Git间的连接采用的是Https协议。较之SSH协议, HITIPS协议数据传输速度慢, B无法实现免密登录,即每次连接均需要输入用户名和密码,所以生产环境下一般采用的是SSH协议。所以首先要点击SsH,其后显示的就是远程版本库的访问地址。
在这里插入图片描述远程版本库创建好之后,由于版本库仍然为空的,所以GtHub给出了三条建议:
1,使用命令行创建一个新的仓库。即删除这个空的版本库再创建一个新的版本库。
2.使用命令行推送一个新的仓库。即将本地版本库的内容push到远程版本库。
3,从其它版本库中导入代码
Git的使用_第53张图片

将本地版本库内容push到远程版本库

在这里插入图片描述

  • git remote add 命令的意思是为远程版本库命名一个本地名称,这里是origin,后跟ssh协议,
    [email protected]:cloudinwinter/billing.git
     git@表示以git用户访问,而仓库的具体地址为github.com主机中的cloudinwinter用户,然后是本地版本库的billing下的 .git文件:,
  • git push命令用法
    -git push origin master:将本地版本库中master分支推送到origin远程库。
    - git push origin:将本地版本库中当前分支推送到origin远程版本库。
    - git push-u origin:将本地版本库master分支推送到origin远程版本库,并将origin设置为默认的远程库,即以后所有git push就不用再指定远程版本库了。
    - git push:将本地版本库中当前分支推送到默认远程片库。

命令执行具体状况

在Git Bash的本地版本库目录中远程以上两条命令。在第一次连接GitHub时本地库的Git系统会给出提示, GitHub站点主机的真实性不能确定, RSA密钥指纹是xxx,你确定要连接吗?输入yes,然后再给出一个警告,永久性的添加GitHub站点到已知主机列表。以后再连接就不会出现该警告。

需要在本地版本库目录下执行
Git的使用_第54张图片查看结果(刷新页面即可)
Git的使用_第55张图片

将远程库clone到本地

(一),创建本地库的存放目录
只是创建文件目录即可,无需初始化
Git的使用_第56张图片
(二)。复制远程库地址
Git的使用_第57张图片(三)运行克隆命令在这里插入图片描述
Git的使用_第58张图片

从远程库拉pull内容到本地

(一) gitfromgithub修改内容后commit.
Git的使用_第59张图片

(二) gitfromgithub将修改的内容push到远程库.

Git的使用_第60张图片
由于git和gitfromgithub是同一台主机作为远程版本库地址,而git已经指定了默认的远程版本库地址
否则应执行

git remote add origin [email protected]:cloudinwinter/billing.git
git push -u origin master

Git的使用_第61张图片
(三) git从远程库pull到本地
进入git本地版本库目录,直接git pull即可
git pull命令常见的用法:

  • git pull origin master:将远程库origin的master分支拉取到本地库与本库库的master分支合并。
  • git pull origin master dev将远程库origin的master分支拉取到本地并与本的dev分支合 *
  • git pull:人默认远程库的拉取本地库当前分支内容,并与本地库当前分支合并。

以下命令执行的前提是默认的远程版本库已经指定等价于 git pull origin master,当然先命名远程版本库
Git的使用_第62张图片

查看本地的远程库信息

git reomote:该命令可列举出当前本地版本库可操作的远程版本库名称在这里插入图片描述
git remote-v:该命令可以显示出更为详细的信息:远程库地址及本地库可执行的操作权限。Git的使用_第63张图片

删除本地远程库的信息

git remote rm 远程库名称
Git的使用_第64张图片

删除github远程库

登录后进入远程库中
Git的使用_第65张图片Git的使用_第66张图片Git的使用_第67张图片Git的使用_第68张图片

git 标签

git 版本发行

现代的开发多采用敏捷开发模式,该开发模式可以应需求的快速变化,可以频繁交付新的软件版本,其采用迭代方式逐步完善软件功能。当开发出新的版本生如何进行发布?Git中软件的发行,是通过标签完成的。

什么是标签

像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。
  一个软件的某个发行版本对应的其实就是软件开发过程中其一阶段的最后一次git commit提交。我们知道每一个git提交,对应的都会有一个commit-d,而标签就是与某一个commit-d绑定的名称。一个标签一旦与某一个commit-id绑定,那么该标签就不能修改绑定到其它commit-id了,除非将该标签删除后才可以与其它commitid绑定。

标签的种类

官网打标签

Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。

一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。

然而,附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。

创建轻量标签,

git tag 标签名称这里的标签名称一般是特定的版本号,默认是和当前HEAD指针指定到的版本进行绑定

在这里插入图片描述
git创建标签和历史版本绑定 ,上面的命令跟简写的commit-id即可(如果你查看的是完整的id的话,输入前七位)
Git的使用_第69张图片

创建附注标签

git tag -a 名称 -m 标签存储信息

-a 指定标签名称
-m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息。
在这里插入图片描述
这里的和历史版本绑定和之前轻量标签是一样的

列出标签

查看所有标签(输出顺序为字母顺序,而非时间)
git tag
Git的使用_第70张图片
查看指定标签(这里*号之前不要加.)
git tag -l 标签模糊匹配名
Git的使用_第71张图片

显示指定标签的详细信息(使用这个标签可以确定其绑定的版本)
git show 名称
Git的使用_第72张图片

修改和标签绑定的特定版本

以下说的是如果你要修改和指定标签绑定的版本,那么就应该使用标签切换到该版本,并且在该节点创建新的分支,并且提交修改才能生效
 软件版本一旦被指定,即标签一旦与某一commit-id绑定,那么这个版本的代码还能修改吗?若将master回退到该commit-id,然后再修改代码,修改完成后再commit,我们会发现代码修改过了,但该标签绑定的commit-id并没有发生变化,即该软件版本的代码仍未修改。
 当然,此时我们可以将该标签删除,然后再定义一个同名标签与修改过代码的commit-id绑定。这样也是可以的。但是这里存在一个巨大的风险,我们修改过的代码是master主分支上的,一旦修改过的代码出现问题,将可以导致整个代码出问题。
 所以,我们一般不会修改master主分支上的代码。那应该怎么办? Git将标签定义为了与分支同级别的概念,它不仅驻是一个 commit-id的别名。Git允许程序员使用分支切换命令git checkout将代码转向标签所指定的版本。Git的使用_第73张图片
 命令执行完毕,系统给出了很多的提示,该提示的总体意思为:当前处于“游离”状态,在该状态下用户的任何修改与提交对任何的分支都没有影响(言外之意是:其修改将不会被保留)。若保留修改,则可以通过git checkout-b命令创建一个新的分支。在这里插入图片描述
在该新分支上再进行修改提交,然后再合并到master分支,最后再将该分支删除。此时创建的分支名称可以随意。当前,合并到master分支后,仍需要删除原标签,然后再与·新的commit_id绑定。不过,生产环境下,一旦标签定义完成就不会与删除再绑定了。而是会再定义一个新的标签与新的commitid绑定。

推动标签到远程版本库

 前面通过标签定义的版本仅仅是定义在本地库,其最终需要推送到远程版本库作为一个发行版本出现。可以通过以下两种方式:
A、推送指定标签git push 远程库名称 标签名称 这里由于创建了和标签名一样的分支,推送失败
Git的使用_第74张图片
B、git push origin --tags这将会把所有不在远程仓库服务器上的标签全部传送到那里。
Git的使用_第75张图片
c、查看结果
Git的使用_第76张图片
其他用户在更新本地版本库时,会将标签一并更新,然后可以指定标签版本作为一个新的分支进行编辑,编辑完成后再合并到master,最后将该分支删除。

删除标签

A、删除本地标签git tag -d 标签名称
在这里插入图片描述
B. 删除远程标签: git push origin:refs/ltas/标签名称
Git的使用_第77张图片

若要删除远程库中的标签,首先要删除本地库中的该标签,然后再运行如下命令

c.自行查看结果

码云gitee 远程版本库

码云:https://gitee.com/
  码云专为开发者提供稳定、高效、安全的云端软件开发协作平台,无认是个人、团队、或者企业,都能够用码云实现代码的托管、项目管理、协作开发。码云同样也只支持Git作为唯一的版本库格式进行托管。
  码云的免费版本也提供私有库功能,只是有5人的成员上限。

注册,

  通过地址进入首页,点击注册(需要绑定手机号)Git的使用_第78张图片

gitee 免密登录配置

和github向同,大部分不在赘述
设置页面ssh配置选项
Git的使用_第79张图片

创建空版本库

登录之后,点击页面右上角的+号,在弹出的菜单项中单击“新建项目”

在这里插入图片描述
在“新建项目”页面,只需要填写项目名称及完成项目的路径,选择编程语言为Java即可,其它保持默认设置。然后点击“创建”按键。Git的使用_第80张图片Git的使用_第81张图片项目创建完毕后,马上就会进入到远程版本库页面。点击“克隆/下载”,即可看到基于HTTPS协议与SSH协议的仓库地址Git的使用_第82张图片

推送本地项目到码云

可能出现错误: https://blog.csdn.net/fightingforcv/article/details/52073182
码云官方帮助:https://gitee.com/help/articles/4122
大致的操作和GitHub相同

自定义远程版本库

需要一台linux 主机
官网地址

安装git(我的linux系统是centos7)

一般使用yum命令安装的都不是最新的版本,安装时可能由于网络问题发生错误
1.直接安装

yum install git   
  1. 先安装git相关的依赖软件包,在解压官网下载的源码即可
# 安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
# 源码包可以直接使用linux命令下载,也可以从官网下载,再试用ftp工具
tar -zxf git-2.0.0.tar.gz

3.可以通过执行git --version查看git是否安装成功。安装的版本 ,

创建git用户

1.创建git用户并设置密码创建一个名称为git的用户,用于运行Git服务。当然,系统会在/home下创建一个名称为git的目录,作为git用户的主目录。useradd git
在这里插入图片描述
2。为git用户设置密码(应该不允许设置太简单)
Git的使用_第83张图片

免密登录配置

  在git用户主目录/homel/git新建一个目录.ssh,并在其中新建一个名称为authoried_keys的文件。将本地版本库主机中的公钥复制到该文件中。若有多台git客户端的公钥,则将其它公钥也粘贴到该文件中,一个公钥占一行。目录/home/git/.ssh/authorized_keys
这里使用mkdir命令创建后.ssh是隐藏文件夹,可以使用ls -a 来查看

在这里插入图片描述

创建并初始化版本库

(一)创建存放目录任意选定一个目录用于存放版本库。例如,在/usr目录中新建一个目录repositories,用于存放版本库。

(二)初始化裸库
git init --bare命令与git init 命令的不同之处是:加有–bare选项的命令创建的版本库中没有工作区。我们之前通过git init命令创建的版本库是这样的:创建了版本库目录,该目录即工作区目录,并且在其中有一个.git目录,其中存放的是版本库的相关文件。而 git int-bare命令所创建的版本库目录中没有.git目录,直接在版本库目录下存放的就是原来的.git目录中的内容,所以就没有了工作区(不要执行错了目录)。因为在服务器上的git主要是为了共享,不需要工作区,避免用户在工作区修改文件,其他用户推送文件冲途

这里的billing.git 是初始化的目录,一般是当前项目名加.git

Git的使用_第84张图片

修改版本库owner

chown -R git:git billing.git/由于版本库是由root用户创建的,所以其默认的owner就是root.将版本库的owner修改为git用户,使git用户具有版本库的最高访问权限。这里的-R表示递归,其子目录也改变权限。git:git表示git用户组下的git用户,前一个表示账户,最后的billing.git是文件名
Git的使用_第85张图片

禁用shell登录:

来源
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

客户端连接远程版本库

上面有介绍,不在讲述
1.这条命令需要切换到自己的工作区执行
Git的使用_第86张图片

git remote add  远程库本地别名  用户@远程库地址/共享库所在目录
#  这条不解释了
git push -u custom  master

码云和github添加redeme文件后,本地连接被拒的原因(通过git clone命令初始化本地库)

这里添加README文件的目的,并不是说这个README文件多么的重要,其作用是为了使用远程库在创建时直接就存在一个文件。这样的话, Git客户端若要使用该远程库,就必须从Clone远程库开始。若客户端先对于其本地版本库进行编辑,然后直接push到当前的远程库则会出现rejected拒绝连接的提示。因为远程库比本地库中多一个文件。

不在使用git init 而是使用git clone保持本地版本库和远程版本库的一致

Git的使用_第87张图片

你可能感兴趣的:(vcs,git,bash,git,命令,git的使用,github的使用)