git 详细使用

步骤一:部署Git服务器(192.168.43.20作为git服务器)

[root@git ~]# yum -y install git //安装软件

[root@git ~]# mkdir -p /var/lib/git //创建任意目录(任意路径,任意名称)

[root@git ~]# git init /var/lib/git/project --bare #创建空仓库

//git init创建仓库,project是仓库名称(仓库名称可以任意,做实验照抄),--bare是创建空仓库

//重要提示:很多同学不打--bare,现在不出错,后面其他实验失败

[root@git ~]# ls /var/lib/git/project #查看仓库中是否有内容

[root@git ~]# firewall-cmd --set-default-zone=trusted //防火墙放行所有,不是关闭

[root@git ~]# setenforce 0

[root@git ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

或者

[root@git ~]# vim /etc/selinux/config

找到enforcing改成permissive

步骤二:客户端测试(192.168.43.10作为开发人员的客户端主机)

[root@develop ~]# firewall-cmd --set-default-zone=trusted //防火墙放行所有,不是关闭

[root@develop ~]# setenforce 0

[root@develop ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

或者

[root@develop ~]# vim /etc/selinux/config

找到enforcing改成permissive

[root@develop ~]# yum -y install git //安装git软件

[root@develop ~]# git clone root@192.168.4.20:/var/lib/git/project

Are you sure you want to continue connecting (yes/no)? 第一次远程需要输入yes>

root@192.168.4.20's password:

[root@develop ~]# ls /root #查看是否将仓库下载到了本地,名称为project

[root@develop ~]# cd project

[root@develop project]# ls

[root@develop project]# git remote -v #查看服务器信息(输出信息如下)

origin root@192.168.4.20:/var/lib/git/project (fetch)

origin root@192.168.4.20:/var/lib/git/project (push)

[root@develop project]# ls /root/project/ //这个project就是工作区

[root@develop project]# ls -d /root/project/.git/ //本地仓库

使用git前,需要先告诉git,你是谁,你的邮箱是多少(是什么不重要)

[root@develop project]# git config --global user.email "you@example.com"

[root@develop project]# git config --global user.name "Your Name"

//git config设置git配置文件,--global是全局配置,user.email是邮箱,user.name是用户名

[root@develop project]# cat ~/.gitconfig //验证,查看配置文件

[user]

  email = you@example.com

    name = Your Name

准备一些做实验用的文档素材资料

[root@develop project]# echo "init date" > init.txt //在工作区任意创建文件,内容任意

[root@develop project]# mkdir demo //在工作区创建目录,名称任意

[root@develop project]# cp /etc/hosts demo //拷贝一个文件放到目录(拷贝什么都可以)

[root@develop project]# git status //查看状态(发现有文件没有备份)

[root@develop project]# git add . //告诉服务器需要备份谁(提交暂存区).是当前目录

强调:此时没有备份,没有把资料放到.git(本地仓库)

[root@develop project]# du -sh .git //看大小

[root@develop project]# git commit -m "注释,这里可以为任意字符" //文件备份到本地仓库

[root@develop project]# du -sh .git //看大小

强调:做了git commit是将资料备份到本地仓库,服务请没有资料

把本地数据提交给Git服务器:

[root@develop project]# git config --global push.default simple

//根据git版本不同,这个步骤可能需要或不需要

[root@develop project]# git push #将本地数据推送给git服务器

root@192.168.4.20's password: 输入git服务器root密码

[root@develop project]# git remote -v //查看服务器信息

[root@develop project]# git push origin

//指定往origin服务器提交资料

[root@develop project]# git pull //从服务器拉取更新数据

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

查看日志

[root@develop project]# git log

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

[root@develop project]# git log --oneline

[root@develop project]# git reflog

案例2:HEAD指针操作

环境准备工作

注意:这里是在192.168.4.10的project仓库目录下做的所有操作!!

修改文件,多产生几个版本

[root@develop project]# echo "new file" > new.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "add new.txt"

[root@develop project]# echo "first" >> new.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "new.txt:first line"

[root@develop project]# echo "second" >> new.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "new.txt:second"

[root@develop project]# echo "third" >> new.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "new.txt:third"

[root@develop project]# git push

[root@develop project]# echo "123" > num.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "num.txt:123"

[root@develop project]# echo "456" > num.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "num.txt:456"

[root@develop project]# echo "789" > num.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "num.txt:789"

[root@develop project]# git push

查看日志

[root@develop project]# git reflog

[root@develop project]# git log --oneline

HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。

每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。

回到历史某个版本(版本号不能照抄)

[root@develop project]# git reset --hard 301c0 #不能照抄这里的301c0

注意:你可以任意移动指针到任意版本,但是,最后一定要回到最新版本

你可以穿越时空,但是不可以篡改历史!

[root@develop project]# git reflog

[root@develop project]# git reset --hard 最新版的版本号

案例3:Git分支操作

查看当前分支

[root@develop project]# git status //可以看到master分支

[root@develop project]# git branch -v //查看分支

//branch这个单词就是分支

创建分支

[root@develop project]# git branch hotfix #创建hotfix分支

[root@develop project]# git branch feature #创建feature分支

[root@develop project]# git branch -v #查看分支信息

备注:如果需要删除分支,命令:git branch -d 分支名称。

切换分支

[root@develop project]# git checkout hotfix //切换分支

[root@develop project]# git branch -v //查看分支

feature 0dc2b76 delete init.txt

* hotfix 0dc2b76 delete init.txt //带*就是当前所在分支位置

master 0dc2b76 delete init.txt

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

[root@develop project]# echo "fix a bug" >> new.txt //改资料

[root@develop project]# git add . //提交暂存区

[root@develop project]# git commit -m "fix a bug" //提交本地仓库

//很多同学,这里不执行commit,实验失败

[root@develop project]# git checkout master //切换分支到master

[root@develop project]# cat new.txt    //查看文件内容

//默认master分支中没有hotfix分支中的数据

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

[root@develop project]# git merge hotfix

//把hotfix分支里面的资料,拉回到master

解决版本分支的冲突问题(先进入project里面操作)

[root@develop project]# git checkout hotfix

[root@develop project]# echo "AAA" > a.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "add a.txt by hotfix"

[root@develop project]# git checkout master

[root@develop project]# echo "BBB" > a.txt

[root@develop project]# git add .

[root@develop project]# git commit -m "add a.txt by master"

[root@develop project]# git merge hotfix

自动合并 a.txt

冲突(添加/添加):合并冲突于 a.txt(Merge conflict in a.txt)

自动合并失败(merge failed),修正冲突(fix conflicts)然后提交修正的结果。

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

[root@develop project]# cat a.txt                #该文件中包含有冲突的内容

HEAD

BBB

=======

AAA

>>>>>>> hotfix

[root@develop project]# vim a.txt #修改该文件,为最终需要的数据,解决冲突

BBB

[root@develop project]# git add .

[root@develop project]# git commit -m "resolved"

通过图形了解上面的操作

如图-6,图-7,图-8,图-9,图-10所示。

图-6 HEAD指针指向master分支

图-7 切换分支,HEAD指针指向testing分支

图-8 在testing分支中修改并提交代码

图-9 将分支切换回master分支

图-10 在master分支中修改数据,更新版本

案例4:Git服务器

前面的实验,搭建git服务器,启动服务了吗,启动的什么服务?占用的什么端口?

如果没有启动服务,客户端是如何访问的,访问的是谁,访问的是什么端口?

默认git使用的是ssh服务提供的共享,默认使用22端口

能不能实现免密码使用git呢?答案是肯定的!

如何实现呢?答:做ssh的密钥对

在192.168.4.20主机,再创建一个仓库

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

客户端访问的方式(develop(4.10)主机操作)

[root@develop ~]# cd ~ #回到家目录(将仓库下载到本地家目录)

[root@develop ~]# git clone root@192.168.4.20:/var/lib/git/web

#默认需要密码才能下载仓库中的资料

[root@develop ~]# rm -rf web #将刚刚下载的仓库删除

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

[root@develop ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''

#-f后面指定将创建的密钥文件存放到哪里

#-N后面是空,不对生成的密钥文件加密

[root@develop ~]# ssh-copy-id 192.168.4.20

[root@develop ~]# git clone root@192.168.4.20:/var/lib/git/web

#生成完密钥并传递密钥后,再次克隆下载服务器的资料不需要输入密码

[root@develop ~]# cd web

//进入目录,随便改点文件或创建个文件

[root@develop web]# git push

#将本地资料推送到git服务器也不需要密码

[root@develop web]# cd ..

[root@develop ~]# rm -rf web

克隆、修改数据、提交本地、提交远程服务器

[root@develop ~]# git clone root@192.168.4.20:/var/lib/git/web

[root@develop ~]# cd web

[root@develop web]# touch README.md

[root@develop web]# git add .

[root@develop web]# git commit -m "readme"

[root@develop web]# git remote -v #查看远程服务器信息

[root@develop web]# git push #默认推送

[root@develop web]# git push -u origin master #指定推送的服务器和分支

//指定往名称是origin的服务器上面提交数据,提交的是master分支

[root@develop ~]# cd ..

[root@develop ~]# rm -rf web

在客户端现有的文件夹下克隆仓库

[root@develop ~]# mkdir mygit

[root@develop ~]# cd mygit

[root@develop mygit]# git init #将当前目录创建为git空仓库

[root@develop mygit]# git remote -v #此时该仓库没有对应的远程服务器

[root@develop mygit]# git remote add origin 192.168.4.20:/var/lib/git/web

#添加远程服务器,给远程服务器的web仓库取一个本地名称为origin

[root@develop mygit]# git remote -v #查看远程服务器信息

[root@develop mygit]# ls #本地还是空目录,没有任何资料

[root@develop mygit]# git pull origin master

#从origin服务器的master分支拉取数据

[root@develop mygit]# ls

[root@develop mygit]# echo new > new.txt

[root@develop mygit]# git add .

[root@develop mygit]# git commit -m "newfile"

[root@develop mygit]# git push -u origin master

客户端在现有仓库基础上添加新Git仓库

[root@develop mygit]# git remote rename origin new-name

#将老服务器信息重命名(new-name是新名字,名字任意)

[root@develop mygit]# git remote add origin 192.168.4.20:/var/lib/git/web

#添加新服务器信息

[root@develop mygit]# git push -u origin --all

#推送origin服务器的所有分支到服务器

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值