Git

1 篇文章 0 订阅

Git

工作流程

img

先使用git init 初始化版本库,搭建Git服务器,默认搭建好的Git服务器没有任何数据
然后使用客户端访问Git服务器,利用git clone命令从Git服务器上将所有版本数据克隆到本地仓库
在本地仓库的工作区中做增删改查相应的操作,然后将工作区中的数据使用git add添加至暂存区
然后使用git commit将暂存区中的数据保存至本地仓库
最后再使用git push将本地仓库的数据再上传至Git服务器上,然后其他用户也可以获取到Git服务器中的数据进行修改
如果Git服务器上有数据更新,客户端需要先使用git pull将最新的数据拉取下来,然后再去做其他操作

命令

	git  init    		初始化git版本服务器
	git  clone 	  	从初始化好的git服务器上克隆所有版本的数据到本地仓库中
	git  config   	作用用于标识每个版本是哪一个用户上传的
	git  add  	   	将工作区变化的数据添加到暂存区
	git  commit  	将暂存区中的数据保存到本地仓库
	git  push	    	将本地仓库中的数据上传至远程git服务器
	git  pull	    	只从服务器上拉取变化的数据
	git  status    	查看当前工作区的状态
	git  reflog	    	查看版本更新信息
	git  branch   	查看及创建分支
	git  reset  	    	移动指针(切换版本)
	git  checkout  	切换分支
	git  merge       	合并分支(产生冲突,要线下与冲突的人进行协商)
	git  ls-files       	查看暂存区有哪些数据

案例

Linux服务器安装git web1:192.168.2.100

yum -y install git
mkdir /var/lib/git
git init /var/lib/git/project --bare  //创建空仓库,叫Project

客户机克隆 web2:192.168.2.200

yum -y install git
git clone 192.168.2.100:/var/lib/git/project  //在客户机克隆服务器的仓库

修改git配置

[root@web2 project]# git config --global user.email "you@example.com"
[root@web2 project]# git config --global user.name "Your Name"
[root@web2 project]# cat ~/.gitconfig 
[user]
    email = you@example.com
    name = Your Name

本地工作区对数据进行增删改查(必须要先进入仓库再操作数据)。

[root@web2 project]# echo "init date" > init.txt
[root@web2 project]# mkdir demo
[root@web2 project]# cp /etc/hosts demo

查询状态 提交并注释

[root@web2 project]# git status //查看仓库中数据的状态。
[root@web2 project]# git add .  //将工作区的修改提交到暂存区。
[root@web2 project]# git commit  -m  "注释,可以为任意字符"
[root@web2 project]# git status

将本地仓库中的数据推送到远程服务器(web2将数据推送到web1)。

[root@web2 project]# git config --global push.default simple
[root@web2 project]# git push
root@192.168.2.100's password:  输入服务器root密码
[root@web2 project]# git status

服务器上的数据更新到本地(web1的数据更新到web2)。

备注:可能其他人也在修改数据并提交服务器,就会导致自己的本地数据为旧数据,使用pull就可以将服务器上新的数据更新到本地

[root@web2 project]# git pull

查看版本日志

[root@web2 project]# git log
[root@web2 project]# git log --pretty=oneline
[root@web2 project]# git log --oneline
[root@web2 project]# git reflog

HEAD指针

  • 查看Git版本信息
  • 移动指针
  • 通过移动HEAD指针恢复数据

HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。

[root@web2 project]# echo "new file" > new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "add new.txt"
[root@web2 project]# echo "first" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:first line"
[root@web2 project]# echo "second" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:second"
[root@web2 project]# echo "third" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:third"
[root@web2 project]# git push
[root@web2 project]# echo "123" > num.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:123"
[root@web2 project]# echo "456" > num.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:456"
[root@web2 project]# echo "789" > num.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:789"
[root@web2 project]# git push
[root@web2 project]# git reflog
[root@web2 project]# git log --oneline
04ddc0f num.txt:789
7bba57b num.txt:456
301c090 num.txt:123
b427164 new.txt:third
0584949 new.txt:second
ece2dfd new.txt:first line
e1112ac add new.txt
1a0d908 初始化
[root@web2 project]# git reset --hard 301c0
[root@web2 project]# git reflog
301c090 HEAD@{0}: reset: moving to 301c0
04ddc0f HEAD@{1}: commit: num.txt:789
7bba57b HEAD@{2}: commit: num.txt:456
301c090 HEAD@{3}: commit: num.txt:123
b427164 HEAD@{5}: commit: new.txt:third
0584949 HEAD@{6}: commit: new.txt:second
ece2dfd HEAD@{7}: commit: new.txt:first line
e1112ac HEAD@{8}: commit: add new.txt
1a0d908 HEAD@{9}: commit (initial): 初始化
[root@web2 project]# cat num.txt                #查看文件是否为123
123
[root@web2 project]# git reset --hard 7bba57b
[root@web2 project]# cat num.txt                #查看文件是否为123,456
123
456
[root@web2 project]# git reflog                #查看指针移动历史
7bba57b HEAD@{0}: reset: moving to 7bba57b
301c090 HEAD@{1}: reset: moving to 301c0
… …
[root@web2 project]# git reset --hard 04ddc0f    #回到最后一次修改的版本

Git分支

  • 查看分支
  • 创建分支
  • 切换分支
  • 合并分支
  • 解决分支的冲突

Git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响,分支效果如图-5所示。

img

图-5

常见的分支规范如下:

MASTER分支(MASTER是主分支,是代码的核心)。

DEVELOP分支(DEVELOP最新开发成果的分支)。

RELEASE分支(为发布新产品设置的分支)。

HOTFIX分支(为了修复软件BUG缺陷的分支)。

FEATURE分支(为开发新功能设置的分支)。

查看当前分支。

[root@web2 project]# git status
# On branch master
nothing to commit, working directory clean
[root@web2 project]# git branch -v
* master 0dc2b76 delete init.txt

创建分支

[root@web2 project]# git branch hotfix
[root@web2 project]# git branch feature
[root@web2 project]# git branch -v
  feature 0dc2b76 delete init.txt
  hotfix  0dc2b76 delete init.txt
* master  0dc2b76 delete init.txt

切换分支

[root@web2 project]# git checkout hotfix
[root@web2 project]# git branch -v
  feature 0dc2b76 delete init.txt
* hotfix  0dc2b76 delete init.txt
master  0dc2b76 delete init.txt

在新的分支上可以继续进行数据操作(增、删、改、查)。

[root@web2 project]# echo "fix a bug" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "fix a bug"

将hotfix修改的数据合并到master分支。

注意,合并前必须要先切换到master分支,然后再执行merge命令。

[root@web2 project]# git checkout master
[root@web2 project]# cat new.txt        #默认master分支中没有hotfix分支中的数据
[root@web2 project]# git merge hotfix
Updating 0dc2b76..5b4a755
Fast-forward
 new.txt | 1 ++
 1 file changed, 1 insertions(+)

解决版本分支的冲突问题

在不同分支中修改相同文件的相同行数据,模拟数据冲突。

[root@web2 project]# git checkout hotfix
[root@web2 project]# echo "AAA" > a.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "add a.txt by hotfix"
[root@web2 project]# git checkout master
[root@web2 project]# echo "BBB" > a.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "add a.txt by master"
[root@web2 project]# git merge hotfix
自动合并 a.txt
冲突(添加/添加):合并冲突于 a.txt
自动合并失败,修正冲突然后提交修正的结果。

查看有冲突的文件内容,修改文件为最终版本的数据,解决冲突。

[root@web2 project]# cat a.txt                #该文件中包含有冲突的内容
<<<<<<< HEAD
BBB
=======
AAA
>>>>>>> hotfix
[root@web2 project]# vim a.txt              #修改该文件,为最终需要的数据,解决冲突
BBB
[root@web2 project]# git add .
[root@web2 project]# git commit -m "resolved"

总结:分支指针与HEAD指针的关系。

  • 创建分支的本质是在当前提交上创建一个可以移动的指针
  • 如何判断当前分支呢?答案是根据HEAD这个特殊指针

Git服务器

SSH

1)创建基于密码验证的SSH协议服务器(web1主机操作)。

[root@web1 ~]# git init --bare /var/lib/git/base_ssh

2)客户端访问的方式(web2主机操作)。

[root@web2 ~]# git clone root@192.168.2.100:/var/lib/git/base_ssh
[root@web2 ~]# rm -rf base_ssh

3)客户端生成SSH密钥,实现免密码登陆git服务器(web2主机操作)。

[root@web2 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@web2 ~]# ssh-copy-id  192.168.2.100
[root@web2 ~]# git clone root@192.168.2.100:/var/git/base_ssh
[root@web2 ~]# git push

Git协议

1)安装git-daemon软件包(web1主机操作)。

[root@web1 ~]# yum -y install git-daemon

2)创建版本库(web1主机操作)。

[root@web1 ~]# git init --bare /var/lib/git/base_git

3)修改配置文件,启动git服务(web1主机操作)。

[root@web1 ~]# cat /usr/lib/systemd/system/git@.service#仅查看即可
[root@web1 ~]# systemctl  start  git.socket

#备注:默认git配置为只读服务器,如果需要读写,则需要修改git@.service配置文件,在git-daemon命令后面添加–enable=receive-pack参数即可。

#另外还需要注意仓库目录的权限问题。

4)客户端访问方式(web2主机操作)

[root@web2 ~]# git clone git://192.168.2.100/base_git

HTTP协议(只读操作服务器)

1)安装gitweb、httpd软件包(web1主机操作)。

[root@web1 ~]# yum -y install httpd gitweb

2)修改配置文件,设置仓库根目录(web1主机操作)。

[root@web1 ~]# vim +11 /etc/gitweb.conf $projectroot = "/var/lib/git";  #添加一行
  1. 创建版本仓库(web1主机操作)
[root@web1 ~]# git init --bare /var/lib/git/base_http

4)启动httpd服务器

[root@web1 ~]# systemctl start httpd

5)客户端访问方式(web2主机操作)

注意:调用虚拟机中的firefox浏览器,需要在远程时使用ssh -X 服务器IP,并且确保真实主机的firefox已经关闭。

[root@web2 ~]# firefox http://192.168.2.100/git/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值