目录
一.git安装与介绍
1.git的概述
git是一种开源的分布式的vcs(version control system)版本控制系统。
集中式 SVN
分布式 GIT
git是服务
服务端:就是提供git仓库服务供客户端访问使用的
客户端:访问git仓库使用数据及修改数据
所谓的服务端安装的其实也是git
git 基本概念
--git仓库:保存所有数据的地方
--工作区:从仓库提取出来的文件,放在磁盘上使用或修改
--暂缓区:保存下次提交文件信息的列表信息也就add之后的列表
2.GIT的安装
yum源准备
~]# vim /etc/yum.repos.d/CentOS-Base.repo [extras] gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/ name=Qcloud centos extras - $basearch [os] gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 baseurl=http://mirrors.tencentyun.com/centos/$releasever/os/$basearch/ name=Qcloud centos os - $basearch [updates] gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 baseurl=http://mirrors.tencentyun.com/centos/$releasever/updates/$basearch/ name=Qcloud centos updates - $basearch ~]# vim /etc/yum.repos.d/CentOS-Epel.repo [epel] name=EPEL for redhat/centos $releasever - $basearch failovermethod=priority gpgcheck=1 gpgkey=http://mirrors.tencentyun.com/epel/RPM-GPG-KEY-EPEL-7 enabled=1 baseurl=http://mirrors.tencentyun.com/epel/$releasever/$basearch/
服务端:
# 腾讯yum或阿里的都可以 ~]# dnf -y install git # centos8服务端安装git # 或7的安装方法 ~]# yum -y install git ~]# mkdir /var/lib/git # 创建git目录 ~]# git init /var/lib/git/project --bare # 创建空仓库,用来存储项目数据 # --bare 不加这个则仓库只能看不能写
客户端:
~]# yum -y install git # 客户端安装git ~]# git clone 192.168.4.20:/var/lib/git/project # 克隆仓库
二.GIT的运用
1.先进入仓库文件创建用户与邮箱
# 使用前先创建用户 ~]# cd project/ # 进入仓库 ~]# git config --global user.name "abc" # 定义客户端用户名 ~]# git config --global user.email "abc@abc.com" # 定义客户端邮箱 ~]# ls ./git (管理仓库文件) ~]# cat ./gitconfig //检查用户与邮箱是否创建
2.写入数据基本命令测试
~]# echo "abc001" > 001.txt (写入内容测试) ~]# git add . # (当有多个文件的时候可以先指定单个)将仓库有变化的文件提交到暂存区(只是通知系统暂时记住【为了永久保存】);可以把点换成指定的日志信息 ~]# git commit -m "001" # 提交之前暂存区的数据永久保存到仓库(小的改变不保存)(-m 定义日志提示信息) ~]# git push # 将本地仓库数据推送到远程git仓库服务器中 # 或者 ~]# git push -u origin master ~]# git log # 查询完整日志 ~]# git log --pretty=oneline # 精简日志 ~]# git log --oneline # 最精简日志 ~]# git reflog # 本机操作日志 ~]# Git status # 查看并告诉下一步操作 ## 测试删除 ~]# rm -rf project/ ~]# git clone 192.168.4.20:/var/lib/git/project ## 注意已经导入过一次用户不需要重复定义,(自动保存在当前加用户下)可查看 ~]# cat ~/.gitconfig [user] name = keyao email = 2023630895@qq.com ~]# git log --oneline # 精简日志,此时只有一条操作日志 ~]# git reflog # 本机操作日志,此时还有删除前的日志记录
思维导图
3.HEAD指针
可以将仓库恢复到过去的状态(类似虚拟机快照,只能对本仓库)
~]# git reflog #查看日志,找到旧数据所在时间节点 ~]# git reset --hard xxxx #回到过去,xxxx是时间节点的记录 #把需要找回的数据,从仓库中拷贝到另外一个目录 # --hard 强制恢复 ~]# git reset --hard xxxx #回到现在 #在之前的目录找回旧数据 Ls .. #(查看上一次修改的目录下文件) ls ..
4.Git分支
常见的分支规范如下:
分支名 作用 MASTER分支 MASTER是主分支,是代码的核心 DEVELOP分支 DEVELOP最新开发成果的分支 RELEASE分支 为发布新产品设置的分支 HOTFIX分支 为了修复软件BUG缺陷的分支 FEATURE分支 为开发新功能设置的分支
当项目内容比较多时,可以在git中使用分支,不同分支的文件可以互不干扰而不用创建多个仓库
~]# git branch # 查看分支,*代表目前所在分支 # 如果没有看到,需要提交一个对象,commit之后才会真正建立master分支,此时才可以建立其它分 ~]# git branch hotfix # 创建新分支, ~]# git checkout hotfix # 切换到新分支 ## 注意:此时ls查看本地有master的文件,这是git的特性,在master创建的文档所有分支都可以看到(项目描述文档),但分支创建之后master再次修改则就看不到了 ~]# echo "hotfix-001" > hotfix001.txt # 创建属于hotfix分支的文件 ~]# git add . # 提交到暂存区 ~]# git commit -m "hotfix001" # 提交到本地仓库 ~]# git checkout master # 切换回默认分支 ~]# echo master > master.txt ~]# git add . ~]# git commit -m "master" ~]# git checkout master ~]# git merge hotfix Merge branch 'hotfix' ...... # 合并日志,可写可不写 # 将hotfix分支的数据与当前分支合并 ~]# ls a.txt hotfix001.txt master.txt # 合并之后在提交一次不然可能会报错
分支中的特殊情况:
如果分别在不同分支,创建同名文件,内容不同,再进行合并时,会发生冲突,此时需要手工修改冲突文件,修改完之后,就可以解决冲突
~]# git merge hotfix # 合并分支,失败,因为两个分支有同名文件,但内容不同 CONFLICT (add/add): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. ~]# vim abc.txt # 手动修改文件(看要保存谁),保存退出后即可解决 ~]# git add . //提交到暂存区 ~]# git commit -m "abc+" //提交到本地仓库
5.免密通信
使用ssh协议建立连接,实现
~]# ssh-keygen # 创建ssh秘钥 ~]# ssh-copy-id 192.168.4.20 # 传递秘钥到4.20 ~]# git clone 192.168.4.20:/var/lib/git/test # 克隆不需要密码 ~]# cd test # 进入仓库 ~]# echo xyz > xyz # 创建文件,然后提交 ~]# git add . ~]# git commit -m "xyz" ~]# git push # 上传到服务器也无需密码 ~]# Git pull (更新下拽最新数据)
6.git其他操作命令:
~]# git remote -v # 查看远程服务器名字与ip(绑定了几台,默认两个是一台的名字) ~]# git remote add tom 192.168.4.20:/var/lib/git/test # 与新服务器关联,名字叫tom ~]# echo test01 > test01.txt # 创建测试文件 ~]# git add . ~]# git commit -m "test01" ~]# git push -u origin master # 指定名为origin的远程服务器提交数据到master分支 ~]# git remote remove origin # 删除名为origin的远程服务器 ~]# git remote -v ~]# echo test02 > test02.txt # 创建测试文件分支(当有多台远程服务器) ~]# git remote add origin ~]# 192.168.4.20:/var/lib/git/web # 添加名为origin的服务器 ~]# git pull tom master 更新数据 ~]# git pull web master # 从web服务器的master分支下载数据,如果是克隆命令的话可以复制整个仓库的数据,如果是使用pull下载数据,仅仅会下载服务器有而客户机没有的数据
7.踩坑瞬间
1)制做仓库时不加--bare报错与解决
# 客户端在项目中添加 ~]# vim .git/config ...... [receive] denyCurrentBranch = ignore
2)git push 失败
# 指定节点 ~]# git push -u origin master