自学内容网 自学内容网

1-Git-基础

版本控制

为什么要进行版本控制?

**个人角度:**代码的修改繁杂,如果一点点修改代码,不利于开发。进行版本控制,可以在特定历史状态下进行修改。即可以进行回退和撤销操作

**团队角度:**每个人负责各自的模块开发,多人的项目开发可能会操作相同文件,一般的服务器会直接覆盖文件,也不利于团队开发

版本控制软件应该具备的功能

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

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

**版本管理:**管理迭代过程中的每一个版本。在保存每一个版本的文件信息的时候要做到:不保存重复数据,以节约存储空间,提高运行效率

  • SVN 采用增量式管理的方式(每次只保存有修改的那一点点,查看文件的时候把修改的和之前的文件拼起来)
  • Git 采取了文件系统快照的方式(每次保存的是文件系统的快照)

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

**对团队外开发者贡献的代码进行审核:**Git 独有,SVN不能接受没有授权的人员修改代码

**历史记录及恢复:**查看修改人、修改时间、修改内容、日志信息。将本地文件恢复到某一个历史状态。

**分支管理:**允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率(git简洁优雅)。

版本控制类别

集中式版本控制工具

**原理:**每一个开发人员是一个客户端,文件和版本信息是存储在服务器的,然后客户端和服务器进行交互。

图示:

image-20240104164625349

特点:

  • 缺点:如果服务器一旦宕机,所有的历史数据就丢失了,那个本机(客户端)保存的只是当前的状态,这个我们叫单点故障。

分布式版本控制工具

**原理:**每一个开发人员在本地就可以进行完整的版本控制,本地就有完整的历史。任何一个人都可以把数据传给别人,这样就避免了单点故障。

图示:

image-20240104164819375

特点:

  • 优点:避免单点故障

Git简介

Git是一个免费开源的分布式版本控制工具,可以用来控制从小到大的任何项目,十分快速和高效

Git优势:

  • 大部分操作在本地完成,不需要联网(SVN如果断网了就不行)
  • 完整性保证:提交每条数据进行hash运算,同一个数据不管进行hash运算多少次,得到的数据都是不变的;输入的数据稍微变一点,输出的数据可能就会变很多
  • 尽可能添加数据而不是删除或修改数据(很少有不可逆的操作)
  • 分支操作非常快捷流畅。原因:使用快照;每个分支只是创建一个指针,并没有将已有数据重新创建一份
  • 与 Linux 命令全面兼容(程序员的必备技能)

Git安装

下载:https://git-scm.com/

**安装:**傻瓜式安装,一直Next就行(建议换个安装目录)

Git基本工作流程

流程图示

image-20240104173257763

概念理解

概念解释
本地仓库.git文件夹下的内容
远程仓库在服务器上的Git仓库:可以是github,可以是gitee,可以是公司服务器上的仓库
工作区写代码的地方。一般就是.git文件夹所同级的目录
暂存区在本地仓库中的一个文件(index),临时存储即将要提交的文件
clone将远程仓库的代码复制到本地仓库
push将本地仓库的代码推送到远程仓库
pull将远程仓库下载到本地仓库,并将代码克隆到本地工作区
add将工作区的代码提交到暂存区。本地仓库中已有的文件不会被提交(即本地仓库和工作区共同的文件),仅提交在工作区修改后的文件
只有提交到暂存区域的文件才能在后续中被Git追踪
commit将暂存区的文件提交到本地仓库
chenkout检查本地仓库和工作区文件的不同

Git底层理解

1、新建仓库并上传第一个文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1
$ git init  # 初始化一个空的仓库
Initialized empty Git repository in D:/GSF_Data/Github/Java/Git/git-test-1/.git/

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git status# 查看当前状态
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ touch a.txt# 创建文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ vi a.txt# 编辑文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ cat a.txt# 查看文件内容
创建a.txt,并提交到本地仓库

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git status# 查看当前状态,工作区有文件更改,但是没有添加到暂存区
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        a.txt

nothing added to commit but untracked files present (use "git add" to track)

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git add .# 将文件添加到暂存区,警告可以不用管
warning: in the working copy of 'a.txt', LF will be replaced by CRLF the next time Git touches it

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$git status# 查看当前状态,追踪到文件在暂存区,但是还没有提交到本地仓库
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   a.txt


HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git commit -m "创建a.txt文件" .# 将所有文件提交到本地仓库,并添加注释
warning: in the working copy of 'a.txt', LF will be replaced by CRLF the next time Git touches it
[master (root-commit) 30d0542] 创建a.txt文件
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git status# 查看当前状态
On branch master
nothing to commit, working tree clean

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ 

版本号

组成及用途

不同于其他的版本号:v1、v2…v10,Git的版本号通过SHA-1算法,生成40位的十六进制数字。40位数字中,分成2+38:前两位用来定位文件夹,后38位用来定位文件。

这样做的原因是因为Git是一个分布式的版本控制软件,通过这样算法生成的版本号,可以大概率避免重复。

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git log# 查看历史记录
commit 30d0542a85b3f3248e5a363b491978251e631978 (HEAD -> master)# 版本号(从HEAD指向主分支master)
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 17:52:28 2024 +0800

    创建a.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ 

image-20240104180845595

查看版本号对应的文件内容

常规编辑器无法查看,需要使用Git命令

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git log
commit 30d0542a85b3f3248e5a363b491978251e631978 (HEAD -> master)# 第一次提交的版本号
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 17:52:28 2024 +0800

    创建a.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 30d0542a85b3f3248e5a363b491978251e631978# 查看第一次提交的版本号的内容
tree 30ed07b83fcd3a42970483553d54f44481630250# 是一个状态信息,对应一个新的版本号
author hmteen <sfguo1@126.com> 1704361948 +0800
committer hmteen <sfguo1@126.com> 1704361948 +0800

创建a.txt文件# commit时候的信息

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 30ed07b83fcd3a42970483553d54f44481630250# 查看状态信息
100644 blob 04b3abdeac873dcf8d7d9fafe35ecaac711abe45    a.txt# 普通文件 blob对象 文件内容对应的版本号 文件名字

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 04b3abdeac873dcf8d7d9fafe35ecaac711abe45# 查看文件内容
创建a.txt,并提交到本地仓库

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$

总结:

  • 可以看到Git在提交一个文件到本地仓库后,创建了三个版本号:提交信息的版本号、文件状态的版本号、文件内容的版本号

  • 三个版本号有明显的单向传递特点

2、依次对一个文件完成新增、修改、删除操作

命令展示

在初次提交a.txt文件到本地仓库后,依次进行b.txt文件的:增、改、删操作,然后追溯版本号,理解Git的版本控制原理

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ vi b.txt# 创建并编辑b.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ cat b.txt# 查看b.txt文件内容
新增b.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git add .# 文件送到暂存区
warning: in the working copy of 'b.txt', LF will be replaced by CRLF the next time Git touches it

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git commit -m "新增b.txt文件" .# 文件送到本地仓库
warning: in the working copy of 'b.txt', LF will be replaced by CRLF the next time Git touches it
[master 7952e76] 新增b.txt文件
 1 file changed, 1 insertion(+)
 create mode 100644 b.txt

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git log# 查询历史日志信息
commit 7952e76b009d616902d9e804d3f17c29580ed967 (HEAD -> master)
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 18:57:32 2024 +0800

    新增b.txt文件

commit 30d0542a85b3f3248e5a363b491978251e631978
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 17:52:28 2024 +0800

    创建a.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 7952e76b009d616902d9e804d3f17c29580ed967# 查询最后一次提交的内容
tree 54996d3d5053ca3730310752ed0b7779e87df134# 最后一次提交指向的状态信息的版本号
parent 30d0542a85b3f3248e5a363b491978251e631978# 其父版本号,即提交a.txt对应的版本号
author hmteen <sfguo1@126.com> 1704365852 +0800
committer hmteen <sfguo1@126.com> 1704365852 +0800

新增b.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 54996d3d5053ca3730310752ed0b7779e87df134# 最后一次提交的状态内容,包含前一次提交的文件和最新提交的文件
100644 blob 04b3abdeac873dcf8d7d9fafe35ecaac711abe45    a.txt# 对比上一次提交,版本号不变
100644 blob 3f6facf24a61f2aeba635f4220bf5b66b6896921    b.txt# 新建的文件,拥有一个版本号

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 3f6facf24a61f2aeba635f4220bf5b66b6896921# 查看文件内容
新增b.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 04b3abdeac873dcf8d7d9fafe35ecaac711abe45# 查看文件内容
创建a.txt,并提交到本地仓库

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ vi b.txt# 编辑修改文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git add .
warning: in the working copy of 'b.txt', LF will be replaced by CRLF the next time Git touches it

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git commit -m "修改b.txt文件" .
warning: in the working copy of 'b.txt', LF will be replaced by CRLF the next time Git touches it
[master 0fb383a] 修改b.txt文件
 1 file changed, 1 insertion(+)

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git log
commit 0fb383ae5f814aa3d8a5af44f7371a048a96b6a6 (HEAD -> master)
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 19:01:09 2024 +0800

    修改b.txt文件

commit 7952e76b009d616902d9e804d3f17c29580ed967
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 18:57:32 2024 +0800

    新增b.txt文件

commit 30d0542a85b3f3248e5a363b491978251e631978
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 17:52:28 2024 +0800

    创建a.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 0fb383ae5f814aa3d8a5af44f7371a048a96b6a6# 查看最新一次提交
tree ad1dc728a75b0b9cd6f4113e0dc0d9b0a2125c1f# 最新一次提交对应的文件状态信息
parent 7952e76b009d616902d9e804d3f17c29580ed967# 父版本,倒数第二次提交的版本号
author hmteen <sfguo1@126.com> 1704366069 +0800
committer hmteen <sfguo1@126.com> 1704366069 +0800

修改b.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p ad1dc728a75b0b9cd6f4113e0dc0d9b0a2125c1f
100644 blob 04b3abdeac873dcf8d7d9fafe35ecaac711abe45    a.txt# 未作修改,版本号不变
100644 blob 647f137f6e509673f5681ed2f6a4cfda7cb075c5    b.txt# 对比新建该文件时候的版本号,版本号已经改变了,说明是一个新的文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 647f137f6e509673f5681ed2f6a4cfda7cb075c5
新增b.txt文件
修改b.txt问价

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 04b3abdeac873dcf8d7d9fafe35ecaac711abe45
创建a.txt,并提交到本地仓库

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ rm b.txt# 删除文件内容

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git add .

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git commit -m "删除b.txt文件" .
[master d512d7f] 删除b.txt文件
 1 file changed, 2 deletions(-)
 delete mode 100644 b.txt

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git log
commit d512d7f86477af65af85710770ee252b713f04cc (HEAD -> master)
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 19:04:47 2024 +0800

    删除b.txt文件

commit 0fb383ae5f814aa3d8a5af44f7371a048a96b6a6
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 19:01:09 2024 +0800

    修改b.txt文件

commit 7952e76b009d616902d9e804d3f17c29580ed967
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 18:57:32 2024 +0800

    新增b.txt文件

commit 30d0542a85b3f3248e5a363b491978251e631978
Author: hmteen <sfguo1@126.com>
Date:   Thu Jan 4 17:52:28 2024 +0800

    创建a.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p d512d7f86477af65af85710770ee252b713f04cc
tree 30ed07b83fcd3a42970483553d54f44481630250
parent 0fb383ae5f814aa3d8a5af44f7371a048a96b6a6
author hmteen <sfguo1@126.com> 1704366287 +0800
committer hmteen <sfguo1@126.com> 1704366287 +0800

删除b.txt文件

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 30ed07b83fcd3a42970483553d54f44481630250# b.txt文件已删除,只剩下a.txt文件
100644 blob 04b3abdeac873dcf8d7d9fafe35ecaac711abe45    a.txt

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 04b3abdeac873dcf8d7d9fafe35ecaac711abe45
创建a.txt,并提交到本地仓库

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git cat-file -p 647f137f6e509673f5681ed2f6a4cfda7cb075c5# 查询修改b.txt文件时的版本号,依旧可以看到文件内容,证明只是删除了引用,文件的内容并没有被删除
新增b.txt文件
修改b.txt问价

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$

!!Git底层原理

image-20240104195151194

第一次:创建a.txt

  • 仅有1个log信息,一个提交版本号,一个状态版本号,一个文件版本号

第二次:创建b.txt

  • 有2个log信息,新增一个提交版本号,一个状态版本号(指向上一个父版本),一个文件版本号

第三次:修改b.txt

  • 有3个log信息,新增一个提交版本号,一个状态版本号(指向上一个父版本),一个文件版本号

第四次:删除b.txt

  • 有4个log信息,新增一个提交版本号,一个状态版本号(指向上一个父版本),没有新增文件版本号

3、新建一个user分支

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git branch user# 新建user分支

主分支下–查看最新版本

如此繁多的版本,怎样确定哪一个是最新的版本?HEAD文件!

image-20240104195857603

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ cat .git/HEAD# HEAD内容
ref: refs/heads/master

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (user)
$ cat .git/refs/heads/master# master内容,主分支中指向最后一次更新的版本号
d512d7f86477af65af85710770ee252b713f04cc

新建分支查看最新版本

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ cat .git/HEAD
ref: refs/heads/master

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (user)
$ cat .git/refs/heads/master
d512d7f86477af65af85710770ee252b713f04cc

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (master)
$ git checkout user
Switched to branch 'user'

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (user)
$ cat .git/HEAD
ref: refs/heads/user

HMTeen@LAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-test-1 (user)
$ cat .git/refs/heads/user
d512d7f86477af65af85710770ee252b713f04cc

可以看到:新增分支后,仅HEAD文件指向的路径发生了变化,指向了一个新增的文件(以新增的分支名字命名的文件),文件内容是最新一次修改的版本号

  • 说明1:新增分支并没有复制已有文件内容,而仅仅是新增了一个地址指向
  • 说明2:新增的分支user,是以master主分支为基础的,指向了master分支最新更改的内容

总结

  • .git文件夹里面的内容就是本地仓库;其同目录下的其他文件及文件夹是工作区;远程仓库是第三方代码托管平台,比如:GitHub、Gitee
  • 文件的新增、修改都会创建一个新的文件;文件的删除不会创建新的文件
  • .git文件夹下的内容总空间 > 工作区文件、文件夹占用空间

Git命令学习

配置有关命令

# 设置单一仓库的用户信息
git config user.name “itcast”
git config user.email “itcast@itcast.cn”

# 设置全局仓库的用户信息,通过下面命令设置的信息会保存在~/.gitconfig文件中 
git config --global user.name “itcast”
git config --global user.email “itcast@itcast.cn”

# 查看配置信息
git config --list
git config user.name

仓库有关命令

# ===== 本地仓库 =====
# 初始化新的仓库带工作区
git init
# 初始化新的仓库不带工作区
git init --bare  

# 从远程仓库克隆到本地仓库,例如: git clone https://gitee.com/itcast/gittest.git
git clone 远程Git仓库地址 

# 查看状态
git status 
#查看状态 使输出信息更加简洁
git status –s


# ===== 远程仓库 =====
# 查看远程:列出指定的每一个远程服务器的简写
git remote 
# 查看远程:列出简称和地址
git remote  -v  
# 查看远程仓库详细地址
git remote show  <仓库简称>

# 添加远程仓库
git remote add <shortname> <url>
# 移除远程仓库和本地仓库的关系(只是从本地移除远程仓库的关联关系,并不会真正影响到远程仓库)
git remote rm <shortname> 


# 从远程仓库拉取 (拉取到.git 目录, 不会合并到工作区, 工作区发生变化)
git fetch  <shortname>  <分支名称>
# 手动合并  把某个版本的某个分支合并到当前工作区
git merge <shortname>/<分支名称>

# 从远程仓库拉取 (拉取到.git 目录,合并到工作区,工作区不发生变化) = fetch+merge
git pull  <shortname>  <分支名称>
git pull  <shortname>  <分支名称>  --allow-unrelated-histories  #  强制拉取合并


# 将本地仓库推送至远程仓库的某个分支
git push [remote-name] [branch-name]

文件、文件夹有关命令

# 将未跟踪的文件加入暂存区
git add  <文件名>  
# 将暂存区的文件取消暂存 (取消 add )
git reset  <文件名>  

# git commit 将暂存区的文件修改提交到本地仓库
git commit -m "日志信息"  <文件名>  

# 从本地工作区删除文件
git rm <文件名>  
# 如果本工作区库误删, 想要回退
git checkout head <文件名>  

分支有关命令

# 默认主分支名称为 master

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a

# 创建分支
git branch <分支名>
# 切换分支 
git checkout <分支名>
# 删除分支(如果分支已经修改过, 则不允许删除)
git branch -d  <分支名>
# 强制删除分支
git branch -D  <分支名>

# 提交分支至远程仓库
git push <仓库简称> <分支名称>
# 合并分支 将其他分支合并至当前工作区
git merge <分支名称>
# 删除远程仓库分支
git push origin –d branchName

标签有关命令

# 列出所有tag
git tag
# 查看tag详细信息 
git show [tagName]
# 新建一个tag
git tag [tagName]

# 提交指定tag
git push [仓库简称] [tagName]
# 新建一个分支,指向某个tag
git checkout -b [branch] [tag]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag (注意 空格)
$ git push origin :refs/tags/[tag]

Gitlab搭建

安装

安装方式1:yum源

1、配置镜像源

# 进入对应目录【命令】
cd /etc/yum.repos.d/

# 创建文件并写入内容【命令】
vim gitlab-ce.repo

# 内容【内容】
[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
gpgcheck=0
enabled=1

# 执行下述命令【命令】
yum clean all && yum makecache

2、Gitlab一键安装

# 默认安装最新版本
yum install -y gitlab-ce

3、安装成功界面

image-20240108155146080

**总结 **

  • 该方式会默认下载相关依赖,安装成功后,直接配置有关信息即可

安装方式2:rpm下载

1、下载清华镜像源,并上传到服务器

资源地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

文件上传:用WinSCP吧,FinallShell一坨屎

2、安装并启动相关依赖

# 安装依赖【命令】
yum install -y curl policycoreutils openssh-server openssh-clients

# 启动ssh服务&设置为开机启动【命令】
systemctl enable sshd
systemctl start sshd

# 安装postfix,并设置启动【命令】
yum install -y postfix
systemctl enable postfix
systemctl start postfix

# 开放ssh以及http服务【命令】
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent

基本配置

安装完成之后进行相关配置,才能使用gitlab

均在root用户下访问

1、配置对外访问的url

# 进入配置文件
vim /etc/gitlab/gitlab.rb

# 搜索并修改 external_url,见下图
external_url 'http:本机ip:随意端口(不冲突即可)'

image-20240108161541658

2、重启gitlab

# 重启命令
gitlab-ctl reconfigure

若重启后失败了,按照下边命令再次执行warning: redis: unable to open supervise/ok: file does not exist

systemctl restart gitlab-runsvdir

gitlab-ctl reconfigure

3、防火墙设置

# 为了能够访问到gitlab
# 开放对应端口
sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanent

# 或者关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

4、获取默认密码,并浏览器访问

# 查看初始化密码:该文件24h后删除,登录gitlab后,尽快修改密码
cat /etc/gitlab/initial_root_password

# 默认用户名:root

Gitlab卸载

常规步骤

先进入root用户

# 停止gitlab
gitlab-ctl stop

# 卸载gitlab
rpm -e gitlab-ce

# 查看gitlab进程
ps aux | grep gitlab

# 杀掉第一个进程
kill -9 对应的进程号

# 确认一遍相关进程时候删除干净
ps -ef | grep gitlab | xargs kill -s 9 

# 删除所有包含gitlab的文件
find / -name gitlab | xargs rm -rf

case:权限不足

即使root用户,可能也会报错:find: ‘/run/user/1000/gvfs’: 权限不够

这是官方的一个bug,原因是FUSE文件系统和权限不配的问题,全局搜索时碰到它就会退出报错。

这个目录是空的,查不查都没关系。所以,以下解决方式比较简粗暴:

# 卸载该文件
umount /run/user/1000/gvfs
 
# 删除该文件
rm -rf /run/user/1000/gvfs

原文地址:https://blog.csdn.net/qq_45445505/article/details/136557187

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!