1 Git安装
yum -y install git
2 Git全局配置
git config
--global 使用全局配置文件
--system 使用系统级配置文件
--local 使用版本库级配置文件
- 配置git使用用户
git config --global user.name "wanghaotian"
- 配置git使用邮箱
git config --global user.email "12356@126.com"
- 配置语法高亮
git config --global color.ui true
- 查看当前配置
git config --list
或
cat .gitconfig
3 Git初始化
创建工作目录,进入工作目录
mkdir data
cd data
初始化仓库,将目录初始化为仓库(可以是空的目录,也可以是带内容的目录)
[root@git data]$ git init
Initialized empty Git repository in /root/data/.git/
3.1 查看工作区状态
在工作目录下运行命令git status
,出现nothing to commit, working directory clean
说明状态正常。
[root@git data]$ git status
# On branch master
nothing to commit, working directory clean
3.2 Git隐藏文件介绍
branches 分支目录
config 定义项目特有的配置选项
description 仅供git web程序使用
HEAD 指示当前的分支
hooks 包含git钩子文件
info 包含一个全局排除文件(exclude文件)
objects **存放所有数据内容,有info和pack两个子文件夹**
refs 存放指向数据(分支)的提交对象的指针
index 保存暂存信息,在执行git init的时候,这个文件还没有
4 Git常规使用

只有在本地仓库中的文件,才能被版本控制系统管理起来。
5 Git命令
5.1 Git常用命令
git init
初始化仓库
git status
查看当前仓库的状态
git add filename
添加文件到暂存区
git add .|*
添加工作目录所有的文件到暂存区
git rm --cached filename
将文件撤出暂存区
git rm -f filename
同时删除暂存区和工作目录的文件
git commit -m "描述信息" <filename>
将文件添加到本地仓库,不加文件名会提交所有暂存区的文件
git mv filename new-filename
将工作区和暂存区的文件同时修改名称
git diff
比对工作目录和暂存区有什么不同
git diff --cached
比对暂存区和本地仓库有什么不同
git commit -am "描述信息"
对于已经被仓库管理的文件,修改内容后可使用这条命令一次性提交
日志相关
git log
查看当前状态往前的历史git commit快照操作

git log -p
显示详细的变化信息
git log --oneline
每次commit只显示一行简略的信息
git log --oneline --decorate
显示当前HEAD指针信息
git log -1
显示最近的1条commit信息git reset --hard Hash值
恢复到Hash值指向的历史数据git reflog
查看总的历史记录
分支相关
git branch
查看分支
git branch 分支名
创建分支
git branch -d 分支名
删除分支
git checkout 分支名
切换分支
git checkout -b 分支名
创建并切换到分支
git log --oneline --decorate --graph --all
输出你的提交历史、各个分支的指向以及项目的分支分叉情况。
标签相关
git tab
查看所有标签
git tab -a 标签名 -m 描述信息
为当前HEAD指针的commit创建标签
git tab -a 标签名 -m 描述信息 HASH值
为HASH值对应的commit创建标签
git tab -d 标签名
删除标签
git show 标签名
查看标签对应状态的信息
git reset --hard 标签名
回滚到标签代表的状态
远程仓库相关
git remote add 远程仓库名称 链接地址
添加远程仓库
git remote
查看远程仓库
git push -u 远程仓库名称 分支名
上传分支到远程仓库
git pull
从远程仓库拉取文件到本地
git clone 链接地址
克隆远程仓库到本地
5.2 如何通过版本管理系统管理文件
- 工作目录有代码文件
- 通过
git add filename
添加到暂存区 - 通过
git commit -m "描述信息" <filename>
添加到本地仓库
5.3 如何修改文件名称
- 通过
git mv filename new-filename
修改文件名称
[root@git data]$ git mv a a.txt
[root@git data]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: a -> a.txt
#
- 通过
git commit -m "描述信息"
将改动同步到本地仓库
[root@git data]$ git commit -m "modified name a"
[master 3be75c4] modified name a
1 file changed, 0 insertions(+), 0 deletions(-)
rename a => a.txt (100%)
5.4 如何恢复历史数据
git的每次commit操作,相当于做快照的操作。这个机制方便我们回滚到历史的commit时间点。
-
git log --oneline
查看git commit的历史记录,找出历史记录对应的hash值
-
git reset --hard 08cc57f
回滚到最初的状态
[root@git data]$ git reset --hard 08cc57f
HEAD is now at 08cc57f add newfile a
-
git log --oneline --decorate
查看当前指针
[root@git data]$ git log --oneline --decorate
08cc57f (HEAD, master) add newfile a
5.5 如何从历史时间点恢复到最近的状态
回滚到历史时间点后,使用git log
只能查到更旧的记录,比历史时间更新的记录查看不到。需要使用git reflog
查询全部记录。
-
git reflog --decorate
查询总的历史记录,找出要恢复的记录Hash值
-
git reset --hard 97de044
回滚到最近的状态
[root@git data]$ git reset --hard 97de044
HEAD is now at 97de044 add 123456
-
git log --oneline --decorate
查看当前指针
[root@git data]$ git log --oneline --decorate
97de044 (HEAD, master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a
5.6 Git分支
5.6.1 分支原理
分支是平行空间,默认的项目处于master
分支。可以基于master
分支创建属于自己的分支,分支只属于自己, 其他人看不到。分支将拷贝master
的全部文件,等代码编写完后,再将自己的分支与master
合并即可,这样既能保证代码不丢失,又不影响其他人工作。

5.6.2 创建分支
git branch 分支名
,创建分支时基于当前HEAD指针指向的分支,创建一个新的分支,但并不会自动切换到新分支中去。
[root@git data]$ git branch testing
[root@git data]$ git log --oneline --decorate
97de044 (HEAD, testing, master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a
#此时master和testing均指向同一提交对象

5.6.3 查看分支
git branche
,查看所有分支,*所在是当前所在分支
[root@git data]$ git branch
* master
testing
5.6.4 切换分支
git checkout 分支名
,要切换到一个已存在的分支
[root@git data]$ git checkout testing
Switched to branch 'testing'
[root@git data]$ git branch
master
* testing

5.6.5 创建并切换分支
git checkout -b 分支名
,创建并直接切换到分支
5.6.7 对testing分支进行操作
创建3个文件aaa、bbb、ccc
[root@git data]$ touch aaa bbb ccc
将改动提交到本地仓库
[root@git data]$ git add .
[root@git data]$ git commit -m "add file aaa bbb ccc"
查看当前HEAD指针和log状态
[root@git data]$ git log --oneline --decorate
d582ca8 (HEAD, testing) add file aaa bbb ccc
97de044 (master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a
testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所指的对象。

5.6.8 回到master查看状态
切换回master
git checkout master
查看当前HEAD指针和log状态
[root@git data]$ git log --oneline --decorate
97de044 (HEAD, master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a
这条命令做了两件事。 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。 也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。

5.6.9 对master进行操作
创建文件ddd
[root@git data]$ touch ddd
将改动提交到本地仓库
[root@git data]$ git add .
[root@git data]$ git commit -m "add file ddd"
查看当前HEAD指针和log状态
[root@git data]$ git log --oneline --decorate
3ebc111 (HEAD, master) add file ddd
97de044 add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a
对master进行更改后,项目相当于出现了分叉,一个master分支,一个testing分支

也可以使用
git log --oneline --decorate --graph --all
查看项目分叉情况
[root@git data]$ git log --oneline --decorate --graph --all
* 3ebc111 (HEAD, master) add file ddd
| * d582ca8 (testing) add file aaa bbb ccc
|/
* 97de044 add 123456
* 82ea6b3 modified
* 3be75c4 modified name a
* 521a814 modified name
* 44b891b modified a name
* c5aa01c modified a name
* 9cc5f5a modified a name
* 74c9398 modified a name
* 211bbf6 modified a name
* 08cc57f add newfile a
5.6.10 对testing分支进行合并
确保目前工作在master分支中,使用git merge 分支名
命令
[root@git data]$ git merge testing
#会弹出页面,输入此次操作的描述
此时在testing中创建的文件aaa、bbb、ccc合并到master中,再次查看项目分支情况,git log --oneline --decorate --graph --all
。
[root@git data]$ git log --oneline --decorate --graph --all
* 62ef88a (HEAD, master) Merge branch 'testing' Merge testing
|\
| * d582ca8 (testing) add file aaa bbb ccc
* | 3ebc111 add file ddd
|/
* 97de044 add 123456
* 82ea6b3 modified
* 3be75c4 modified name a
* 521a814 modified name
* 44b891b modified a name
* c5aa01c modified a name
* 9cc5f5a modified a name
* 74c9398 modified a name
* 211bbf6 modified a name
* 08cc57f add newfile a
删除testing分支
git branch -d testing
5.7 解决merge冲突
目前只有master分支,创建并切换到testing分支
[root@git data]$ git checkout -b testing
修改aaa文件,添加字符串testing,并提交
[root@git data]$ echo testing >> aaa
[root@git data]$ git add .
[root@git data]$ git commit -m "modify aaa add testing"
切换到master分支,修改aaa文件,添加字符串master,并提交
[root@git data]$ git checkout master
[root@git data]$ echo master > aaa
[root@git data]$ git add .
[root@git data]$ git commit -m "modify aaa add master"
此时两个分支都有aaa文件,但是内容不一样,进行合并
[root@git data]$ git merge testing
Auto-merging aaa
CONFLICT (content): Merge conflict in aaa
Automatic merge failed; fix conflicts and then commit the result.
#提示自动合并失败,必须手动解决冲突后再提交
查看现在aaa文件的内容,Git用<<<<<<<,=======,>>>>>>>
标记出不同分支的内容
master
<<<<<<< HEAD
=======
testing
>>>>>>> testing
手工修改要保留的内容,再进行提交
[root@git data]$ git commit -am "merge testing to master"
删除testing分支
[root@git data]$ git branch -d testing
5.8 标签管理
一般对有重大功能更新的大版本打标签,方便标识项目里程碑,小的修改不用频繁打标签。
查看当前commit日志情况
git log --oneline --decorate

创建v1.0和v2.0版本标签
#不加Hash值,默认对当前commit打标签
[root@git data]$ git tag -a v2.0 -m "merge testing"
#对目标Hash值的commit打标签
[root@git data]$ git tag -a v1.0 -m "modify a add 123456" 97de044
查看当前标签
[root@git data]$ git tag
v1.0
v2.0
#查看v1.0的详细信息
[root@git data]$ git show v1.0
tag v1.0
Tagger: wanghaotian <wanghaotian87@126.com>
Date: Sat Jan 23 20:09:06 2021 +0800
modify a add 123456
commit 97de044efc11e8ab43f2e1a7ace43437dcb784ac
Author: wanghaotian <wanghaotian87@126.com>
Date: Fri Jan 22 20:46:05 2021 +0800
add 123456
diff --git a/a.txt b/a.txt
index e56e15b..587481d 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
12345
+12312414
#查看v2.0的详细信息
[root@git data]$ git show v2.0
tag v2.0
Tagger: wanghaotian <wanghaotian87@126.com>
Date: Sat Jan 23 20:07:45 2021 +0800
merge testing
commit 6ebfd9829e41b5f06d6fe625289d2a4facae9923
Merge: d5878bc 8ac2f0f
Author: wanghaotian <wanghaotian87@126.com>
Date: Sat Jan 23 20:04:17 2021 +0800
merge testing modify aaa add aaa
用标签进行状态回滚
[root@git data]$ git reset --hard v1.0
[root@git data]$ git reset --hard v2.0
6 Github的使用
6.1 创建仓库
注册登录后,新建仓库

填入仓库名称和描述信息

6.2 本地仓库推送
推送方式有2种,HTTPS方式或SSH方式

以SSH方式为例,官方讲解了新建仓库和已有仓库的上传方法

使用命令
git remote add 远程仓库名称 SSH链接(Github上显示的链接)
添加远程仓库
git remote add origin git@github.com:wht-bigsky000/git_test.git
git remote
查看远程仓库
[root@git data]$ git remote
origin
将本地ssh-keygen
的公钥配置到Github端



git push -u 远程仓库名称 分支名称
推送本地仓库代码
git push -u origin master
Github上查看代码文件


6.3 从Github clone
git clone SSH链接(Github上显示的链接)

在/tmp目录下进行clone
[root@git data]$ cd /tmp
[root@git tmp]$ git clone git@github.com:wht-bigsky000/git_test.git

6.4 删除远程仓库
git remote remove 远程仓库名
git remote remove origin
7 Gitlab
7.1 Gitlab安装
安装依赖软件包,配置防火墙
yum install -y curl policycoreutils-python openssh-server perl
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld
安装Postfix,postfix可用于发电子邮件
yum install postfix
systemctl enable postfix
systemctl start postfix
下载rpm包
CE版本:https://packages.gitlab.com/gitlab/gitlab-ce
EE版本:https://packages.gitlab.com/gitlab/gitlab-ee
7.2 配置Gitlab配置文件
配置/etc/gitlab/gitlab.rb
文件,配置external_url
部分,修改url为gitlab服务器地址或url
#原有配置
external_url 'http://gitlab.example.com'
#修改配置
external_url 'http://10.0.0.200'
运行gitlab-ctl reconfigure
进行gitlab重新配置并启动
gitlab-ctl reconfigure
7.3 Gitlab目录结构
/opt/gitlab/
程序安装目录
/var/opt/gitlab/
gitlab数据目录
/var/opt/gitlab/git-data
gitlab代码仓库
7.4 Gitlab常用命令
gitlab-ctl start
启动gitlab所有服务
gitlab-ctl status
查看gitlab所有服务的运行状态
gitlab-ctl stop
停止gitlab服务
gitlab-ctl stop nginx
单独停止某个服务
gitlab-ctl tail
查看所有服务的日志
7.5 Gitlab页面
7.5.1 访问Gitlab页面
直接在浏览器中输入external_url
的地址,首次登录提示输入新的root密码,输入两次后可以登录。默认可以使用root
用户登录
7.5.2 配置页面外观
配置Appearance

设置主页标题、描述和Logo

设置导航键图标

7.5.3 配置组、项目、用户
7.5.3.1 创建组
创建test组


7.5.3.2 创建项目
创建git_data项目



7.5.3.3 管理员连接远程仓库
提交项目后远程仓库就建立好了,要连接远程仓库有两种方式HTTP和SSH,下面以SSH连接为例。
添加SSH公钥

将本地仓库推送到远程仓库,有4种方式
#Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
#Create a new repository
git clone git@10.0.0.200:test/git_data.git
cd git_data
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
#Push an existing folder
cd existing_folder
git init
git remote add origin git@10.0.0.200:test/git_data.git
git add .
git commit -m "Initial commit"
git push -u origin master
#Push an existing Git repository,本例使用的是这种方式
cd existing_repo
git remote rename origin old-origin
git remote add origin git@10.0.0.200:test/git_data.git
git push -u origin --all
git push -u origin --tags
推送一个test.txt新测试文件
touch test.txt
git add .
git commit -m "add a new file test.txt"
git push -u origin master
7.5.3.4 配置用户
(可选)有时为了安全,可以取消用户自行注册账户的功能

创建dev用户


配置用户密码


将dev用户添加到test组


7.5.3.5 dev用户连接远程仓库
上传SSH公钥

clone远程仓库

git clone git@10.0.0.200:test/git_data.git
新建dev分支,并进行新文件推送
#设置用户名和邮箱
git config --global user.name "dev"
git config --global user.email "dev.qq.com"
#进入仓库文件夹,新建分支
cd repodir
git checkout -b dev
#新建文件并推送
touch eee
git add .
git commit -m "add newfile eee"
git push -u origin dev
7.5.3.6 配置master分支保护
配置master分支保护,只允许管理员更改


7.5.4 项目分支合并
当dev分支开发完毕,需要将代码合并到master分支时,进行如下操作。
dev端提交merge请求


管理员端进行确认


注意:
- 一般从分支合并到master时,本地仓库建议同时删除分支,这样能够保证下次创建分支的内容与master一致。
- 建议在进行内容更新前先运行
git pull
,保证本地仓库与远程仓库内容一致,否则在内容不一致的基础上开发后再进行git push
会失败 - 创建分支的顺序建议为:删除本地分支->从master clone/pull->创建新分支,这样能保证文件的一致性。
网友评论