【linux基础】版本控制工具git、github、gitlab

​Git概述

Git是一个免费、开源、分布式的版本控制系统/工具,可以快速高效的处理从小型到大型的各种项目,最初由林纳斯·托瓦兹创作。
Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

Git简史

94650e5d5ce34e6884f889bba551b0eb

版本控制简介

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改的历史纪录,从而让用户能够查看历史版本,方便版本切换。
f2bb896f194e49ad9ec104dff9d82396

版本控制的优势

从个人开发到团队协作

71ae8a2208604c1ca03019257718a879

版本控制工具

集中式版本控制工具

CVS、SVN(Subversion)、VSS......
集中式的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理服务器,保存所有文件的修订版本,而协同工作的人都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么,而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
f337fa41377b4bc681987e44c7d3343d

分布式版本控制工具

Git、Mercurial、Bazaar、Darcs......
像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整的镜像下来(本地库)。这样任何一处协同工作的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发,因为版本控制是在本地进行的
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
    c2f08eb9c670464c9eac6ad87947cc0d

Git工作机制

0d8cb06b75164c56bb90b50bed2f9809

  1. 工作区:存放代码的磁盘的位置,代码可以删除
  2. 暂存区:将工作区的代码添加到暂存区,是临时添加,还没有生成历史版本,代码可以删除
  3. 本地库:将暂存区的代码提交到本地库,会生成历史版本,代码无法删除。本地库的代码可以根据情况推送到远程库,也可从远程库中拉取。

Git代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简称为远程库。

局域网

GitLab

互联网

GitHub(国外)
Gitee(国内)

Git安装

Git官网:https://git-scm.com/
此处安装环境为Windows,官网下载好对应版本的安装包,双击运行即可

  1. GNU协议,Next
  2. 选择安装目录位置,不要有中文和空格,Next
  3. 选择组件,基本默认即可。分别有:桌面快捷方式、windows右键菜单、大文件支持、使用默认的文件编辑器关联git的所有配置文件、关联.sh格式文件、每日检测更新、添加git bash配置文件到windows终端、追加大规模库,Next
  4. 选择开始菜单文件夹,Next
  5. 选择默认编辑器,一般选择Vim,Next
  6. 设置初始化分支的名称,选择默认的master即可,Next
  7. 设置环境变量,选择"Use Git from Git Bash only",Next
  8. 选择后台客户端连接协议,选择"Use bundled OpenSSH",Next
  9. 选择后台HTTPS连接协议,选择"Use the native Windows Secure Channel library",Next
  10. 配置行末换行符,选择"Checkout Windows-style, commit Unix-style line endings",系统自动转换,Next
  11. 选择Git Bash的终端类型,选择"Use MinTTY (the default terminal of MsYS2)",Next
  12. 选择默认的git pull行为,选择"Fast-forward or merge",默认的合并模式,Next
  13. 选择凭据管理器,选择"Git Credential Manager",跨平台的凭据管理器,Next
  14. 选择其他配置,"Enable file system caching"使用文件缓存机制,"Enable symbolic links"使用符号链接,Install直至安装完成即可。
  15. 右键任意位置,在右键菜单里选择Git Bash Here即可打开Git Bash命令行终端

Git常用命令

命令名称 作用
git config --global user.name 设置用户签名:用户名
git config --global user.email 设置用户签名:虚拟邮箱(不会验证)
git init 初始化本地库
git status 查看本地库状态
git add 添加到暂存区
git commit -m "描述信息" 提交到本地库
git reflog 查看历史记录
git reset --hard 版本穿梭

设置用户签名

3e5e67956c9a4acbac25ebda37001b77
说明:签名的作用是区分不同操作者的身份。用户的签名信息在每一个版本的提交信息中都能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
注意:这里设置用户签名和将来登录GitHub或其他代码托管中心的账号没有任何关系。
我们设置的用户签名信息可以在Windows当前用户家目录中的.gitconfig配置文件中查看。如:C:\Users\Admin.gitconfig
image

初始化本地库

git init
image
此时在Windows环境的当前目录下会生成一个.git的隐藏文件夹
image
git bash客户端命令行也可以查看,Linux命令通用,都是一个人开发的。
image

查看本地库状态

git status
image
新增文件
image
再次查看本地库状态
image

添加暂存区

git add {文件名}
image
再次查看本地库状态
image
此时,暂存区的文件可以被删除
image
但是原文件没有被删除
image
继续添加文件到暂存区,并查看本地库状态
image

提交本地库

git commit -m "日志信息" 文件名
image
查看本地库
image
查看版本信息
image

修改文件

image
查看本地库
image
添加暂存区并查看本地库状态
image
提交本地库
image
查看本地库状态
image
查看版本
image
查看修改后的文件内容
image
是基于第一次提交内容的修改后的文件

再次修改文件

image
添加暂存区并提交本地库
image
查看本地库并查看版本
image
查看文件内容
image
当前指针指向的是第三次提交的文件,所以查看的内容也是第三次修改后的。

历史版本

查看历史版本

git reflog #查看版本信息
git log #查看版本详细信息

版本穿梭

git reset --hard {版本号}
image
查看文件内容,发现是第二个版本的内容
image
可以查看当前工作区下.git目录下的HEAD文件,会显示当前指针所在的分支;也可查看refs文件夹下的heads下的master文件,会显示当前指针所指的版本
image
image
Git切换版本,底层其实是移动的HEAD指针

Git分支操作

在版本控制过程中,同时推进多个任务,我们就可以为每个任务创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。

分支的好处

同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支的操作

命令名称 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上

查看分支
git branch -v
image
创建分支
git branch {分支名}
image
切换分支
git checkout {分支名}
image
在切换后的分支上修改文件内容
image
将修改后的文件添加暂存区、提交本地库,并查看文件内容
image
合并分支
先从hot-fix分支切回到master分支
image
git merge {要合并的分支名}
image
查看当前master分支的文件内容
image

合并冲突

产生冲突的原因:合并分支时,两个分支在同一个文件有两套完全不同的修改。Git无法替我们决定使用哪一个,必须人为决定新代码内容。
合并冲突产生实例:

  1. 修改master分支下文件的内容
    9d6f87a8cf714ac2853f4c7a8d6ce4da
    9d6f87a8cf714ac2853f4c7a8d6ce4da (1)
  2. 切换到hot-fix分支下,并修改文件内容
    90895e68ee574d4ab6a4fd5e099eba76
    90895e68ee574d4ab6a4fd5e099eba76 (1)
  3. 再次切换到master分支下,将hot-fix分支合并到master分支,发现产生了报错
    image
  4. 查看本地库状态,提示两个文件都被修改了,需要手动合并
    image
  5. 打开文件会发现,git已经提示什么地方冲突了
    image
    手动解决代码冲突
    image
    保存文件内容,并添加暂存区、提交本地库,此时不能带文件名,否则会报错
    image
    查看合并完成之后的文件内容
    image
    此时,查看hot-fix分支下的文件内容,发现没有被修改。Git合并的只是当前分支下的代码
    image
    master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针
    HEAD如果指向master,那么我们现在就在master分支上
    HEAD如果指向hot-fix,那么我们现在就在hot-fix分支上
    所以切换分支的本质就是移动HEAD指针

Git团队协作机制

团队内协作

image

跨团队协作

GitHub操作

GitHub网址:https://github.com/
创建远程仓库

创建成功后,会生成远程仓库的HTTPS和SSH链接

创建远程仓库别名
由于远程仓库的HTTPS和SSH链接地址太长,所以需要在本地创建远程仓库的别名,创建完成后会有拉取和推送的两个别名
git remote -v #查看当前所有远程地址别名
git remote add {别名名称} {远程仓库地址} #创建远程仓库别名

推送本地分支到远程仓库
推送的最小单位是分支
git push {别名} {分支}

提示认证成功

推送本地库的master分支到远程库,100%

在github远程库中可以查看到推送成功的代码文件

对代码文件进行编辑修改后提交

本地拉取远程库被修改后的代码文件
git pull 别名 分支
提示拉取成功,1行文件被修改,一行增加

查看本地库代码,发现是与远程库代码内容一样

团队内其他成员可以克隆这个远程仓库,前提该成员是需要知道远程仓库的HTTPS或者SSH地址
克隆代码是不需要登录远程仓库的账号
git clone {远程仓库的HTTPS或者SSH地址链接}
新建一个git-jfx的文件夹,在该文件夹下做克隆操作

克隆完成后,在文件夹git-jfx下会生成git-demo本地库,且有origin的远程库别名
clone会做以下操作:

  1. 拉取代码
  2. 初始化本地库
  3. 创建别名

    在git-jfx文件夹下对代码做修改


    推送到远程仓库(如果是其他人推送,则需要登录远程仓库;并且需要该成员加入这个远程仓库)

    将其他人加入这个远程仓库,使其具有推送代码的权限

    刷新远程仓库,发现代码已更新

    如果不是团队内成员(即远程仓库没有邀请加入的人),该团队外的成员需要在自己的远程仓库去fork别人的代码,然后git clone到本地库进行修改,或者在github上修改提交后,点击pull requests,在对方的pull requests中可以查看,确定代码无误后,点击merge pull request进行合并,点击confirm merge确认合并,合并完成后即可看到代码。

自建代码托管平台GitLab

GitLab简介

GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用Ruby语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JulichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。
GitLab官网地址:https://about.gitlab.com/

GitLab安装

准备一个虚拟机环境
gitlab官网如果不能轻易被访问,可以去清华大学镜像站找到gitlab-ce社区版的yum仓库配置文件
RHEL/CentOS系统:新建 /etc/yum.repos.d/gitlab-ce.repo,内容为:
[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1
再执行
yum makecache
yum -y install gitlab-ce
安装完成之后,再继续安装一些其他必须的软件
yum -y install openssh-server cronie postfix
初始化GitLab服务
gitlab-ctl reconfigure
此过程需要执行几分钟,期间会疯狂打印日志,请耐心等待,直至出现以下信息表示初始化完成

启动GitLab服务
gitlab-ctl start

通过浏览器输入gitlab服务器地址可以进行访问。如果没有账号,可以进行注册。

gitlab的root初始密码在/etc/gitlab/initial_root_password中。该密码会在第一次登录后的24小时之后自动被清理,所以需要及时修改root账号的密码。

修改密码步骤如下,修改完成后重新登录即可

创建远程仓库

posted @ 2026-05-11 11:39  瑞斯拜丶  阅读(13)  评论(0)    收藏  举报