1-Git-基础
版本控制
为什么要进行版本控制?
**个人角度:**代码的修改繁杂,如果一点点修改代码,不利于开发。进行版本控制,可以在特定历史状态下进行修改。即可以进行回退和撤销操作
**团队角度:**每个人负责各自的模块开发,多人的项目开发可能会操作相同文件,一般的服务器会直接覆盖文件,也不利于团队开发
版本控制软件应该具备的功能
**协同修改:**多人并行不悖的修改服务器端的同一个文件。
**数据备份:**不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
**版本管理:**管理迭代过程中的每一个版本。在保存每一个版本的文件信息的时候要做到:不保存重复数据,以节约存储空间,提高运行效率
- SVN 采用增量式管理的方式(每次只保存有修改的那一点点,查看文件的时候把修改的和之前的文件拼起来)
- Git 采取了文件系统快照的方式(每次保存的是文件系统的快照)
**权限控制:**对团队中参与开发的人员进行权限控制。
**对团队外开发者贡献的代码进行审核:**Git 独有,SVN不能接受没有授权的人员修改代码
**历史记录及恢复:**查看修改人、修改时间、修改内容、日志信息。将本地文件恢复到某一个历史状态。
**分支管理:**允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率(git简洁优雅)。
版本控制类别
集中式版本控制工具
**原理:**每一个开发人员是一个客户端,文件和版本信息是存储在服务器的,然后客户端和服务器进行交互。
图示:
特点:
- 缺点:如果服务器一旦宕机,所有的历史数据就丢失了,那个本机(客户端)保存的只是当前的状态,这个我们叫单点故障。
分布式版本控制工具
**原理:**每一个开发人员在本地就可以进行完整的版本控制,本地就有完整的历史。任何一个人都可以把数据传给别人,这样就避免了单点故障。
图示:
特点:
- 优点:避免单点故障
Git简介
Git是一个免费开源的分布式版本控制工具,可以用来控制从小到大的任何项目,十分快速和高效
Git优势:
- 大部分操作在本地完成,不需要联网(SVN如果断网了就不行)
- 完整性保证:提交每条数据进行hash运算,同一个数据不管进行hash运算多少次,得到的数据都是不变的;输入的数据稍微变一点,输出的数据可能就会变很多
- 尽可能添加数据而不是删除或修改数据(很少有不可逆的操作)
- 分支操作非常快捷流畅。原因:使用快照;每个分支只是创建一个指针,并没有将已有数据重新创建一份
- 与 Linux 命令全面兼容(程序员的必备技能)
Git安装
**安装:**傻瓜式安装,一直Next就行(建议换个安装目录)
Git基本工作流程
流程图示
概念理解
概念 | 解释 |
---|---|
本地仓库 | .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)
$
查看版本号对应的文件内容
常规编辑器无法查看,需要使用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底层原理
第一次:创建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文件!
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、安装成功界面
**总结 **
- 该方式会默认下载相关依赖,安装成功后,直接配置有关信息即可
安装方式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:随意端口(不冲突即可)'
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)!