技术流ken

运维拯救世界

课堂记录:git使用详解–技术流ken

Git和SVN的对比

 

1.git是分布式的,svn是集中式的。(最核心)

2.git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢复。(核心)

3.git可离线完成大部分操作,svn则不能。

4.git有着更优雅的分支和合并实现。

5.git有着更强的撤销修改和修改历史版本的能力

6.git速度更快,效率更高。

基于以上区别,git有了很明显的优势,特别在于它具有的本地仓库。

 

Git几个概念

 

一. 工作目录

工作目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

二. 暂存区域

是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。

三. Git 仓库目录

是Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

 

 

git安装

 

git可以直接在本地仓库中直接下载

[root@ken ~]# yum install git -y

 

不需要重启操作

 

git常用操作

 

add  添加文件到暂存区域

branch 显示分支和创建分支

checkout 切换分支以及回滚

clone  克隆gitlab仓库

commit 提交代码至仓库

init 初始化工作目录

log 显示历史版本信息

merge 合并分支

pull 拉取远程代码至本地

push 推送本地仓库代码至远程仓库

reset 回滚版本

status 查看工作目录下的文本状态

 

 

git简单使用演示

 

第一步:创建目录

[root@ken ~]# mkdir /ken
[root@ken ~]# cd /ken
[root@ken ken]# ls

 

第二步:初始化目录

[root@ken ken]# git init
Initialized empty Git repository in /ken/.git/
[root@ken ken]# ls -a
. .. .git    #包含该文件的是git的工作目录,所以以后想在git目录下操作,需要到包含.git的目录下进行

 

第三步:创建文本

[root@ken ken]# echo “123” >> test

 

第四步:进行添加至暂存区域

[root@ken ken]# git add .   #.表示提交当前目录下的所有文件

 

第五步:提交至仓库

[root@ken ken]# git log
fatal: bad default revision ‘HEAD’
[root@ken ken]# git commit -m “v1”

*** Please tell me who you are.

Run

git config –global user.email “you@example.com”
git config –global user.name “Your Name”

to set your account’s default identity.
Omit –global to set the identity only in this repository.

fatal: unable to auto-detect email address (got ‘root@ken.(none)’)
[root@ken ken]# git config –global user.email “you@example.com”
[root@ken ken]# git config –global user.name “Your Name”
[root@ken ken]#
[root@ken ken]# git commit -m “v1”
[master (root-commit) a715e14] v1
1 file changed, 1 insertion(+)
create mode 100644 test
[root@ken ken]# git log
commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

 

第六步:再次编辑文本

[root@ken ken]# echo “123” >> test

 

第七步:进行添加至暂存区域

[root@ken ken]# git add .   #.表示提交当前目录下的所有文件

 

第八步:提交至仓库

[root@ken ken]# git commit -m “v2”
[master 592f744] v2
1 file changed, 1 insertion(+)

 

第九步:查看历史版本

[root@ken ken]# git log
commit 592f7440b334c682503401ba1ab07acb419ef8a7
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:55:59 2019 +0800

v2

commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

第十步:回滚版本至v1版

[root@ken ken]# cat test
123
123

 

[root@ken ken]# git reset –hard a715e141699023911fb5
HEAD is now at a715e14 v1
[root@ken ken]# git log
commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1
[root@ken ken]# cat test
123

 

 

演示撤销各个阶段的文本

 

演示1:撤销工作区的内容

 

第一步:编辑已经提交的一个文本

[root@ken ken]# echo “123” >> test

 

第二步:查看文本状态

[root@ken ken]# git status
# On branch master
# Changes not staged for commit:
# (use “git add <file>…” to update what will be committed)
# (use “git checkout — <file>…” to discard changes in working directory)
#
# modified: test
#
no changes added to commit (use “git add” and/or “git commit -a”)

 

第三步:撤销工作区内容

[root@ken ken]# git checkout — test

 

第四步:再次查看文本状态

[root@ken ken]# git status
# On branch master
nothing to commit, working directory clean

[root@ken ken]# cat test
123

 

演示2:撤销暂存区的内容

第一步:编辑已经提交的一个文本

[root@ken ken]# echo “123” >> test

 

第二步:提交文件至暂存区

[root@ken ken]# git add .

 

第三步:查看文本状态

 

[root@ken ken]# git status
# On branch master
# Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# modified: test
#

 

第四步:撤销暂存区的文件至工作目录

[root@ken ken]# git reset HEAD test
Unstaged changes after reset:
M test

 

第五步:查看文本状态

[root@ken ken]# git status
# On branch master
# Changes not staged for commit:
# (use “git add <file>…” to update what will be committed)
# (use “git checkout — <file>…” to discard changes in working directory)
#
# modified: test
#no changes added to commit (use “git add” and/or “git commit -a”)

 

第六步:撤销工作区的文本

[root@ken ken]# git checkout — test
[root@ken ken]# git status
# On branch master
nothing to commit, working directory clean
[root@ken ken]# cat test
123

 

演示3:版本控制

第一步:编辑文本

[root@ken ken]# echo “123” >> test

 

第二步:文本添加至暂存区域

[root@ken ken]# git add test
[root@ken ken]# git status
# On branch master
# Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# modified: test
#

 

第三步:提交暂存区域文本

[root@ken ken]# git commit -m “v3”
[master 1d64fec] v3
1 file changed, 1 insertion(+)

 

第四步:查看版本信息

[root@ken ken]# git commit -m “v3”
[master 1d64fec] v3
1 file changed, 1 insertion(+)
[root@ken ken]# git log
commit 1d64fec6ca57d3137cdf04e4bb329a2a840b5d97
Author: Your Name <you@example.com>
Date: Mon Jun 17 10:19:48 2019 +0800

v3

commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

第五步:版本回滚

首先需要谁用git log获取到commitID,然后进行回滚

[root@ken ken]# git reset –hard a715e1416
HEAD is now at a715e14 v1

 

第六步:查看版本信息

[root@ken ken]# git log
commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

思考:如何回退到v3版本?

[root@ken ken]# git log
commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

第一步:使用git reflog获取commit id

 

[root@ken ken]# git reflog    #前面的字符串就是commit id
a715e14 HEAD@{0}: reset: moving to a715e1416
1d64fec HEAD@{1}: commit: v3
a715e14 HEAD@{2}: reset: moving to a715e141699023911fb5
592f744 HEAD@{3}: commit: v2
a715e14 HEAD@{4}: commit (initial): v1

 

第二步:回退版本至v3

[root@ken ken]# git reset –hard 1d64fec
HEAD is now at 1d64fec v3
[root@ken ken]# cat test
123
123

 

 

git分支创建和切换

 

第一步:查看分支

[root@ken ken]# git branch   #需要在一个已经提交的git仓库中才有主分支的概念
* master

 

第二步:创建分支

[root@ken ken]# git branch ken
[root@ken ken]# git branch
ken
* master

 

第三步:切换分支

[root@ken ken]# git checkout ken
Switched to branch ‘ken’
[root@ken ken]# git branch
* ken
master

 

git分支的使用演示

 

第一步:在ken分支上面操作文本

[root@ken ken]# git branch
* ken
master
[root@ken ken]# ls
test
[root@ken ken]# cat test
123
123
[root@ken ken]# echo “ken” >> test
[root@ken ken]# cat test
123
123
ken
[root@ken ken]# git add .
[root@ken ken]# git commit -m “v4”   #必须提交
[ken e5446e3] v4
1 file changed, 1 insertion(+)

 

第二步:在ken分支查看版本信息

[root@ken ken]# git log
commit e5446e38bef26fb2bc6dc9290e8e18caf1a87ead
Author: Your Name <you@example.com>
Date: Mon Jun 17 10:30:08 2019 +0800

v4

commit 1d64fec6ca57d3137cdf04e4bb329a2a840b5d97
Author: Your Name <you@example.com>
Date: Mon Jun 17 10:19:48 2019 +0800

v3

commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

第三步:切换至主分支

[root@ken ken]# git checkout master
Switched to branch ‘master’
[root@ken ken]# git branch
ken
* master

 

第四步:查看版本信息

[root@ken ken]# git log
commit 1d64fec6ca57d3137cdf04e4bb329a2a840b5d97
Author: Your Name <you@example.com>
Date: Mon Jun 17 10:19:48 2019 +0800

v3

commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

第五步:查看文本信息

[root@ken ken]# cat test
123
123

 

 

第六步:合并分支

[root@ken ken]# git merge ken
Updating 1d64fec..e5446e3
Fast-forward
test | 1 +
1 file changed, 1 insertion(+)

 

第七步:再次查看版本信息

[root@ken ken]# git log
commit e5446e38bef26fb2bc6dc9290e8e18caf1a87ead
Author: Your Name <you@example.com>
Date: Mon Jun 17 10:30:08 2019 +0800

v4

commit 1d64fec6ca57d3137cdf04e4bb329a2a840b5d97
Author: Your Name <you@example.com>
Date: Mon Jun 17 10:19:48 2019 +0800

v3

commit a715e141699023911fb54ad62551b7acaf31f8b5
Author: Your Name <you@example.com>
Date: Mon Jun 17 09:53:51 2019 +0800

v1

 

第八步:查看文本信息

[root@ken ken]# cat test
123
123
ken

 

 

总结:

在分支上面的开发内容,实际并不会影响我们的主分支

只有在主分支进行合并分支的时候我们才能查看到在子分支上面编辑的内容

这样就大大减轻了我们主分支开发的一个混乱及错误

 

gitlab

 

git介绍

gitlab代码私有仓库,可以使用git进行代码的管理

github公共仓库

 

gitlab安装使用演示

 

第一步:上传gitlab包

 

第二步:安装gitlab

[root@ken ~]# yum localinstall gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm -y

 

第三步:更改IP

[root@ken ~]# vim /etc/gitlab/gitlab.rb

external_url ‘http://192.168.64.4’

 

第四步:重新配置

[root@ken ~]# gitlab-ctl reconfigure

 

第五步:浏览器查看

 

注意:需要把占用80端口的应用关闭

 

 

gitlab项目使用详解

 

第一步:创建文件夹

lve

 

第二步:克隆远程仓库至本地

[root@ken test1]# git clone http://192.168.64.4/root/test1.git
Cloning into ‘test1’…
warning: You appear to have cloned an empty repository.

[root@ken test1]# ls
test1

 

第三步:编辑一些文本信息

[root@ken test1]# cd test1
[root@ken test1]# ls -a
. .. .git
[root@ken test1]# touch ken
[root@ken test1]# echo “123” > ken

 

第四步:提交本地文件

[root@ken test1]# git add .
[root@ken test1]# git commit -m “v1”
[master (root-commit) 63dbcde] v1
1 file changed, 1 insertion(+)
create mode 100644 ken

 

第五步:进行远程推送

 

[root@ken test1]# git push -u origin master
Username for ‘http://192.168.64.4’: root
Password for ‘http://root@192.168.64.4’:
Counting objects: 3, done.
Writing objects: 100% (3/3), 202 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.64.4/root/test1.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

 

第六步:gitlab仓库查看

 

linux中免密使用gitlab

 

第一步:生成秘钥

[root@ken test1]# ssh-keygen

 

第二步:复制公钥信息

[root@ken test1]# cat /root/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNR7YyVNX6/8mTgKDD7+UlOLIOu6l9yqww7uEv0fqBQgaBqPqeRlu+RMMPZZrKmeIUEnZxIzvW8ZMo37Yf3KNNzzgkBcaBrlPLFBegdtd90ykFJ6DTKuf/X8mnFdGPBp9y7Gdd/T8lnH89DqGhdy1cSnQ/f9XLmPyZ2jgFZ/YeXhlvDPnUe3wFTPdUN2yCyTXI3SYdhxA+mcdCVKfcMYFqsH76SRxBnqriBkwK3m3OS7x54/H0bebwB0otswcvKUinjNGZHSGY6jM0jpzIm6KVZwU88Rxc1F/RA1q2pKzoiq+//Hg/8ujDalXJ7qvj2vbILLP7l8N5kuR+3VQuao2L root@ken

 

第三步:把公钥复制到gitlab中

 

window中免密使用gitlab

 

 

 

 

发表评论

电子邮件地址不会被公开。