文章目录
Git简介Git的使用下载安装常用选项Git使用提交与回滚撤销工作目录内的改动撤销暂存区域的内容
Git的分支管理创建与切换分支分支管理合并分支
Gitlab介绍安装启动Gitlab在Gitlab上创建项目使用GitlabGitlab免密推送
Git简介
Git和SVN是目前市面上唯二的版本控制工具,相比SVN来说,Git的某些功能更加强大一些。具体来说,它们主要有这些区别:
Git是分布式结构;SVN是集中式结构Git的每个历史版本都会被完整地保存下来,随时可以回滚;SVN存储的是差异文件,无法恢复历史版本
Git分为三个区域,Git的所有功能都基于这三个区域实现
工作目录:对项目的某个版本独立提取出来的内容暂存区域:保存了下次将提交的文件列表信息仓库目录:保存项目的元数据和对象数据库的地方
它们的关系是这样的 我们在工作目录中修改了代码后,将代码添加到暂存区域,然后将代码从暂存区域提交到仓库,本次上传就算完成了,之后其他人可以从仓库目录下将代码克隆到自己的工作目录。
Git的使用
下载安装
yum -y
install git
Git是一个命令行工具,而不是服务,因此我们不需要启动服务
常用选项
通过
git --help
查看Git用法
add添加文件到暂存区域branch显示分支和创建分支checkout切换分支以及回滚clone克隆gitlab仓库commit提交代码至仓库init初始化工作目录log显示历史版本信息merge合并分支pull拉取远程代码至本地push推送本地仓库代码至远程仓库reset回滚版本status查看工作目录下的文本状态
Git使用
提交与回滚
首先创建一个Git目录(任何目录都可以作为Git工作目录)
mkdir /git
我们查看一下这个目录里的内容
ls -a /git
. ..
理所应当什么都没有
进入/git目录后进行初始化
git init
初始化空的 Git 版本库于 /git/.git/
再次查看这个目录
ls -a /git
. .. .git
我们发现多了一个名为git的隐藏目录
创建一个文件并添加到暂存区域
cat > v1.sh
<<EOF
>
> echo 'hello world'
> EOF
git add
.
提交至仓库
git commit -m
'v1'
[master(根提交) 7bc0db6
] v1
Committer: root
<root@localhost.localdomain
>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:
git config --global user.name
"Your Name"
git config --global user.email you@example.com
设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:
git commit --amend --reset-author
1
file changed, 2 insertions
(+
)
create mode 100644 v1.sh
初次提交时,屏幕会输出一些提示信息,我们跟着提示走
git config --global user.name
"Your Name"
git config --global user.email you@example.com
再次提交
git commit -m
'v1'
无文件要提交,干净的工作区
提交成功后我们来查看历史版本信息
git log
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
再次编辑文件并添加至暂存区域,提交到仓库
echo "echo 'hello world'" >> v1.sh
git add
.
git commit -m
'v2'
[master d9f115e
] v2
1
file changed, 1 insertion
(+
)
查看历史版本
git log
commit d9f115e3d7d56efd08cd14ace5de021897a8097b
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 18:34:47 2019 +0800
v2
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
我们发现刚才提交的v2版本已经出现
回滚至v1版本
git reset --hard 7bc0db6f9f5785332e144e387d066bed69a41f99
查看历史版本
git log
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
现在的最新版又变成了v1
并且工作目录下的文件也变回了v1版
cat v1.sh
echo 'hello world'
那如果我们又想回到v2版了呢
查看历史记录获得v2的ID号
git reflog
7bc0db6 HEAD@
{0
}: reset: moving to 7bc0db6f9f5785332e144e387d066bed69a41f99
d9f115e HEAD@
{1
}: commit: v2
7bc0db6 HEAD@
{2
}: commit
(initial
): v1
回滚至v2版
git reset --hard d9f115e
HEAD 现在位于 d9f115e v2
查看历史版本
git log
commit d9f115e3d7d56efd08cd14ace5de021897a8097b
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 18:34:47 2019 +0800
v2
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
Git的回滚功能简直了
当然以上只是git强大功能的冰山一角
撤销工作目录内的改动
修改一下文件并查看文本状态
cat >> v1.sh
<<EOF
echo 'hello world'
EOF
git status
修改尚未加入提交(使用
"git add" 和/或
"git commit -a")
这个文本状态其实是一个对我们接下来能够做的操作的提示
在这里我们既可以添加文件到暂存区域,也可以丢弃工作区的改动
丢弃工作区的改动
git checkout -- v1.sh
再看文件已经恢复到了修改前的状态
撤销暂存区域的内容
再次编辑文件并添加至暂存区域
cat >> v1.sh
<<EOF
> echo 'hello world'
> EOF
git add
.
查看文本状态
git status
提示我们可以撤回这次提交
撤销暂存区域的文件至工作目录
git reset HEAD v1.sh
重置后撤出暂存区的变更:
M v1.sh
查看工作目录中的文件,发现之前的修改还在
现在我们可以很清晰的理解Git的这三个区域了,它们就好像三阶台阶,我们一次只能跨一步。
Git的分支管理
创建与切换分支
查看分支(只在提交过文件才会有分支的概念)
git branch
* master
默认只有一个主分支,*表示当前在哪个分支里
创建分支
git branch a1
切换分支
git checkout a1
M v1.sh
切换到分支
'a1'
git branch
* a1
master
分支管理
每一种版本控制工具都会用到分支的概念,因为任何一个规模稍微大一点的代码开发项目就会涉及到很多程序员、很多功能模块,如果所有人都把自己写的代码堆在一起,这样的代码管理难度不可想象
分支就像这样 红色的箭头就是一个项目的主线,每一个功能模块都是一个分支,程序员在自己的分支将自己负责的功能实现,在提交之前从别的分支和主线都看不到这条分支里的动作;只有当提交之后,主线才会得到分支里的内容。
下面我们来证明一下这个效果
进入a1分支并提交一个版本
git add
.
git status
git commit -m
'v3'
[a1 7e13e73
] v3
1
file changed, 1 insertion
(+
)
git log
commit 7e13e73d727f372ab4966095024f26c5b5c9bfa5
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 19:32:00 2019 +0800
v3
commit d9f115e3d7d56efd08cd14ace5de021897a8097b
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 18:34:47 2019 +0800
v2
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
从a1分支里可以看见历史版本出现了刚提交的v3
回到主分支,查看历史版本
git checkout master
切换到分支
'master'
git log
commit d9f115e3d7d56efd08cd14ace5de021897a8097b
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 18:34:47 2019 +0800
v2
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
从主分支看不到在a1里提交的v3版本
合并分支
将a1分支合并到master分支
git merge a1
更新 d9f115e
..7e13e73
Fast-forward
v1.sh
| 1 +
1
file changed, 1 insertion
(+
)
合并分支的命令只写要合并的分支,默认将分支合并到当前所在的分支里
查看历史版本
git log
commit 7e13e73d727f372ab4966095024f26c5b5c9bfa5
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 19:32:00 2019 +0800
v3
commit d9f115e3d7d56efd08cd14ace5de021897a8097b
Author: Your Name
<you@example.com
>
Date: Fri Nov 1 18:34:47 2019 +0800
v2
commit 7bc0db6f9f5785332e144e387d066bed69a41f99
Author: root
<root@localhost.localdomain
>
Date: Fri Nov 1 18:27:43 2019 +0800
v1
刚才在a1里提交的v3版本已经合并到了主分支里
Gitlab介绍
Gitlab是私有仓库。我们都知道GitHub,其实GitHub就是一个面向全世界的Gitlab。
安装启动Gitlab
想要使用Gitlab,首先我们要打开Gitlab的中文网站: https://www.gitlab.cc/ 然而因为某些原因,我访问不了这个网站,于是我只能去清华大学开源镜像站下载了一个软件包 清华大学开源镜像站网址: https://mirrors.tuna.tsinghua.edu.cn/ 也可以直接下载一个rpm包,因为Gitlab没有任何依赖,我就不配yum源直接rpm安装了(为了安全起见,最好不要这么做)
下载安装Gitlab
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.2.9-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.2.9-ce.0.el7.x86_64.rpm
修改配置文件
vim /etc/gitlab/gitlab.rb
external_url
'http://192.168.88.105'
这个配置文件只有这一行没加注释,很好找,如果不想改成IP就要在主机上配置域名解析
重新加载配置文件
gitlab-ctl reconfigure
这一步可能会等很长时间
接下来我们就能通过浏览器访问了。Gitlab默认占用80端口,端口有冲突的注意下。
在Gitlab上创建项目
第一次登录Gitlab后我们会看到这个界面
首先我们需要创建一个项目
大致流程是:
创建用户创建项目组创建项目
经过一顿操作后我们成功创建了新项目,这时我们会看见这个界面 我们仔细看,其实这里已经给出了我们所有能对这个项目做的操作
使用Gitlab
我们按照界面的指示一步一步做
Git全局设置
git config --global user.name
"Administrator"
git config --global user.email
"admin@example.com"
创建新的存储库
git clone http://192.168.88.105/root/freedom.git
cd freedom
touch README.md
git add README.md
git commit -m
"add README"
git push -u origin master
从浏览器上我们也能看见刚才推送的README.md文件
Gitlab免密推送
刚才在我们推送时交互式的输入了用户名和密码,做运维怎么能干这么lose的事呢,所以我们要配置免密登录
生成密钥
ssh-keygen -t rsa
复制公钥信息
cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL1z/IumDIwXlwQ3JLdLdosdpDvTJv2VofTKO2EZReCin57O+OiD4E6V7hrE6NCZ9p2nTR1mOoh0UjqhZd8V2pvqSYXXzkuVlFEvEeqpwDITHsFWhv8MmLhP7d6QXF4/LdBNNeZVA9e0mvXwchHacu9KQSeOAFmjlfiLOPDOSVdvwt7SkkuFTstBXxQz/g/pq8eM5c4dfGdDEdiTqMCqrikbHX6PRRy9sP62zbuVY7mO77U5o9uppywY2rpQczru3uIpWDzj/pTdxWSQCgkPTE0sZI102j//73NmVE375sMSFK4WJaqq7dQ6EcagYF9DAz21NQ2aVfIAhEy8THMC41 root@localhost.localdomain
把公钥添加到Gitlab中
再次推送点什么东西,这次我们没有输用户名和密码