Git的安装
Git简介
Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。
Git 易于学习, 占地面积小,具有闪电般的快速性能。它具有诸如Subversion,CVS,Perforce和ClearCase之类的SCM工具,并且具有廉价的本地分支,方便的暂存区域和 多个工作流等功能,今天我们来说一下Git的安装
Git的官方下载地址:点击进入
实验环境
机器 | IP地址 |
---|---|
git-server | 192.168.200.112 |
git-client | 192.168.200.113 |
首先我们要安装所需要的依赖包,两台机器都要安装以及Git的源码包,我这里用的2.2
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@git-server ~]# tar xf git-2.22.0.tar.gz -C /usr/src/
[root@git-server ~]# cd /usr/src/git-2.22.0/
[root@git-server git-2.22.0]# make configure
[root@git-server git-2.22.0]# ./configure --prefix=/usr/local/git &&make && make install
[root@git-server git-2.22.0]# ln -sf /usr/local/git/bin/* /usr/bin/
[root@git-server git-2.22.0]# git --version
git version 2.22.0
客户端进行配置
git config --global user.name "abc"
git config --global user.email "abc@163.com"
git config --global color.ui true
git config --list
服务端创建及初始化Git仓库
[root@git-server ~]# mkdir git_data.git
[root@git-server ~]# cd git_data.git/
[root@git-server ~]# git --bare init
客户端克隆到本地
首先创建密钥发给服务端,然后在远程克隆到本地
[root@git-client ~]# ssh-keygen
[root@git-client ~]# ssh-copy-id 192.168.200.112
[root@git-client ~]# git clone root@192.168.200.112:/root/git_data.git
[root@git-client git_data]# cd git_data/
Git的基本使用
继续上图
现在所在的 git_data/目录下,就等于图中的workspace;
当你在工作区编写完代码后,可以使用git status来查看一下当前状态
[root@git-client git_data]# touch a.txt
[root@git-client git_data]# git status
位于分支 master
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
a.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
将文件添加到暂存区
[root@git-client git_data]# git add a.txt
[root@git-client git_data]# git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
新文件: a.txt
还可以取消暂存
[root@git-client git_data]# git reset HEAD a.txt
[root@git-client git_data]# git status
位于分支 master
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
a.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
提交到暂存区后,我们可以用commit来添加到本地仓库
[root@git-client git_data]# git add a.txt
[root@git-client git_data]# git commit -m "kongde" a.txt
[master 28079c7] kongde
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
[root@git-client git_data]# git status
位于分支 master
无文件要提交,干净的工作区
-m是添加注释信息,不加的话会给给你一个类似于vim的界面,在里面添加提交说明信息
还可以进行代码的回滚恢复操作,先模拟一下操作
[root@git-client git_data]# git commit -a -m"jia12345"
[master 0890b98] jia12345
1 file changed, 1 insertion(+)
[root@git-client git_data]# echo "6789" >> a.txt
[root@git-client git_data]# git commit -a -m"jia6789"
[master 6212225] jia6789
1 file changed, 1 insertion(+)
[root@git-client git_data]# cat a.txt
12345
6789
[root@git-client git_data]# git log
commit 621222506180d49d1520c4399eafa9de62623ab3 (HEAD -> master)
Author: abc<abc@163.com>
Date: Wed Nov 13 10:22:00 2019 +0800
jia6789
commit 0890b98d6f3977d26a32327711e9959f1223e111
Author: abc<abc@163.com>
Date: Wed Nov 13 10:21:30 2019 +0800
jia12345
commit 28079c712d7c8a08bedbbe0a2334aeca9ea14f19
Author: abc<abc@163.com>
Date: Wed Nov 13 10:18:07 2019 +0800
kongde
git -log:用来查看历史提交记录
git -log n:查看最进几条的提交记录(n>=1)
例如,我想要回到最开始的状态,即内容为空的状态,选择部分commit值即可
[root@git-client git_data]# cat a.txt
12345
6789
[root@git-client git_data]# git reset --hard 28079c712d
HEAD 现在位于 28079c7 kongde
[root@git-client git_data]# cat a.txt
[root@git-client git_data]# git log
commit 28079c712d7c8a08bedbbe0a2334aeca9ea14f19 (HEAD -> master)
Author: abc<abc@163.com>
Date: Wed Nov 13 10:18:07 2019 +0800
kongde
当然,也可以撤销,即回到未来的数据
[root@git-client git_data]# git reflog
28079c7 (HEAD -> master) HEAD@{0}: reset: moving to 28079c712d
6212225 HEAD@{1}: commit: jia6789
0890b98 HEAD@{2}: commit: jia12345
28079c7 (HEAD -> master) HEAD@{3}: commit: kongde
[root@git-client git_data]# git reset --hard 6212225
HEAD 现在位于 6212225 jia6789
[root@git-client git_data]# cat a.txt
12345
6789
我们也可以给添加标签,通过标签来进行数据的回滚
[root@git-client git_data]# git tag v1.0
[root@git-client git_data]# git log -2
commit 621222506180d49d1520c4399eafa9de62623ab3 (HEAD -> master, tag: v1.0)
Author: yuanxinghong <yuanxinghong@163.com>
Date: Wed Nov 13 10:22:00 2019 +0800
jia6789
commit 0890b98d6f3977d26a32327711e9959f1223e111
Author: yuanxinghong <yuanxinghong@163.com>
Date: Wed Nov 13 10:21:30 2019 +0800
jia12345
[root@git-client git_data]# echo "000000" > a.txt
[root@git-client git_data]# git commit -a -m"jia0000"
[master 3548a6a] jia0000
1 file changed, 1 insertion(+), 2 deletions(-)
[root@git-client git_data]# git log -3
commit 3548a6a20bb751a19bc38c6cb2d3802183e6e75a (HEAD -> master)
Author: yuanxinghong <yuanxinghong@163.com>
Date: Wed Nov 13 10:44:30 2019 +0800
jia0000
commit 621222506180d49d1520c4399eafa9de62623ab3 (tag: v1.0)
Author: yuanxinghong <yuanxinghong@163.com>
Date: Wed Nov 13 10:22:00 2019 +0800
jia6789
commit 0890b98d6f3977d26a32327711e9959f1223e111
Author: yuanxinghong <yuanxinghong@163.com>
Date: Wed Nov 13 10:21:30 2019 +0800
jia12345
[root@git-client git_data]# cat a.txt
000000
[root@git-client git_data]# git reset --hard v1.0
HEAD 现在位于 6212225 jia6789
[root@git-client git_data]# cat a.txt
12345
6789
提交到远程仓库
[root@git-client git_data]# git push root@192.168.200.112:/root/git_data.git
枚举对象: 20, 完成.
对象计数中: 100% (20/20), 完成.
压缩对象中: 100% (10/10), 完成.
写入对象中: 100% (20/20), 1.49 KiB | 1.49 MiB/s, 完成.
总共 20 (差异 0),复用 0 (差异 0)
To 192.168.200.112:/root/git_data.git
* [new branch] master -> master