远程连接关闭防火墙和SEliniux
集中式 SVN
分布式 GIT www.github.com www.gitee.com
服务端gitlab
[root@gitlab ~]# dnf -y install git #服务端安装git
[root@gitlab ~]# dnf repolist -v #查看yum仓库是否正常
[root@gitlab ~]# mkdir /var/lib/git #创建git目录
[root@gitlab ~]# git init /var/lib/git/project --bare #创建空仓库,用来存储项目数据,project(项目名称:自定义)
客户端develop
[root@develop ~]# dnf -y install git #客户端安装git
[root@develop ~]# git clone 192.168.4.20:/var/lib/git/project #克隆仓库
[root@develop ~]# ls
anaconda-ks.cfg project
[root@develop ~]# ls -A ~/project/
.git
[root@develop ~]# cd project/ #!进入仓库!操作仓库都需要进入到仓库的状态
[root@develop project]# git config --global user.name "abc" #定义客户端用户名
[root@develop project]# git config --global user.email "abc@abc.com" #定义客户端邮箱
[root@develop project]# cat ~/.gitconfig #查看结果
[user]
name = abc
email = abc@abc.com
[root@develop project]# echo "abc001" > 001.txt
[root@develop project]# ls
001.txt
[root@develop project]# git add . #将仓库有变化的文件提交到暂存区
[root@develop project]# git commit -m "001" #提交之前暂存区的数据永久保存到仓库
[master (root-commit) 1f37c5d] 001
1 file changed, 1 insertion(+)
create mode 100644 001.txt
[root@develop project]# git push #将本地仓库数据推送到远程git仓库服务器中
root@192.168.4.20's password: #服务器端的密码
[root@develop project]# echo "13545643" > 002.txt
[root@develop project]# git add .
[root@develop project]# git commit -m "002" #-m "002" 日志信息
[master a360465] 002
1 file changed, 1 insertion(+)
create mode 100644 002.txt
[root@develop project]# git push
root@192.168.4.20's password: #服务端密码
[root@develop project]# git log #查看完整日志信息
[root@develop project]# git log --pretty=oneline #查看精简日志
[root@develop project]# git log --oneline #最精简精简日志
a360465 (HEAD -> master, origin/master) 002
1f37c5d 001
[root@develop project]# git #本机操作日志
HEAD指针,可以将仓库恢复到过去的状态
HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动
git常用指令列表
准备工作(多对数据仓库进行修改、提交操作,以产生多个版本)
[root@develop project]# git reflog #查看Git版本信息。首先查询日志可以看到第1列的随机字符串,该字符串定义了每次commit提交的数据状态
a360465 (HEAD -> master, origin/master) HEAD@{0}: commit: 002
1f37c5d HEAD@{1}: commit (initial): 001
[root@develop project]# git reset --hard 1f37c5d #移动HEAD指针,将数据还原到任意版本
HEAD is now at 1f37c5d 001
[root@develop project]# git reflog
1f37c5d (HEAD -> master) HEAD@{0}: reset: moving to 1f37c5d
a360465 (origin/master) HEAD@{1}: commit: 002
1f37c5d (HEAD -> master) HEAD@{2}: commit (initial): 001
回复到过去的时间节点,找回数据思路:
- git reflog 查看日志,找到旧数据所在时间节点
- git reset --hard xxxx 回到过去,xxxx是时间节点的记录
- 把需要找回的数据,从仓库中拷贝到另外一个目录
- git reset --hard xxxx 回到现在
- 在之前的目录找回旧数据
Git分支
当项目内容比较多时,可以在git中使用分支,不同分支的文件可以互不干扰
常见的分支规范如下:
- MASTER分支(MASTER是主分支,是代码的核心)。
- DEVELOP分支(DEVELOP最新开发成果的分支)。
- RELEASE分支(为发布新产品设置的分支)。
- HOTFIX分支(为了修复软件BUG缺陷的分支)。
- FEATURE分支(为开发新功能设置的分支)。
[root@develop project]# git branch #查看分支,*代表目前所在的分支
* master
[root@develop project]# git branch hotfix #创建分支(名称为hotfix)
[root@develop project]# git branch #查看分支
hotfix
* master #正在使用的分支
[root@develop project]# git checkout hotfix #切换分支
Switched to branch 'hotfix'
[root@develop project]# git branch
* hotfix #正在使用的分支
master
[root@develop project]# git checkout hotfix #切换分支为 hotfix
[root@develop project]# echo "HOTFIX-001" > hotfix001.txt
[root@develop project]# ls
001.txt 002.txt A B hotfix001.txt
[root@develop project]# git add .
[root@develop project]# git commit -m "hotfix001"
[hotfix 25d1e02] hotfix001
1 file changed, 1 insertion(+)
create mode 100644 hotfix001.txt
[root@develop project]# git checkout master #切换为master分支
[root@develop project]# ls #无法看到hotfix写的文件
001.txt 002.txt A B
[root@develop project]# echo "mast001" > master001.txt #在master分支中创建文件
[root@develop project]# git add .
[root@develop project]# git commit -m "master001"
[root@develop project]# ls
001.txt 002.txt A B master001.txt
[root@develop project]# git checkout hotfix #切换到hotfix分支
[root@develop project]# ls
001.txt 002.txt A B hotfix001.txt
[root@develop project]# git push --set-upstream origin hotfix #上传到服务器
root@192.168.4.20's password: #服务器密码
[root@develop project]# git checkout master #切换为master分支 默认分支
[root@develop project]# git push #上传到服务器 必须上传之后才会属于这个分支
root@192.168.4.20's password: #服务器密码
[root@develop project]# git merge hotfix #将hotfix分支的数据与当前的分支进行合并
:wq
删除仓库重新在服务端创建空仓库在客户端克隆空仓库
git clone 192.168.4.20:/var/lib/git/test
cd test/
echo "ABCD~~" > readme.txt
git add .
git commit -m "readme"
分支中的特殊情况:如果分别在不同分支,创建同名文件,内容不同,再进行合并时,会发生冲突,此时需要手工修改冲突文件,修改完之后,就可以解决冲突
git branch hotfix #创建新分支
git checkout hotfix #切换到新分支
echo xyz > abc.txt #创建文件
git add . #提交到暂存区
git commit -m "abc" #提交到本地仓库
git checkout master #切换到默认分支
echo abc > abc.txt #创建文件
git add . #提交到暂存区
git commit -m "abc" #提交到本地仓库
git merge hotfix #合并分支,失败,因为两个分支有同名文件,但内容不同
vim abc.txt #修改文件,保存退出后即可解决
git add . #提交到暂存区
git commit -m "abc+" #提交到本地仓库
[root@develop test]# git remote -v #查看远程服务器的状态
origin 192.168.4.20:/var/lib/git/test (fetch)
origin 192.168.4.20:/var/lib/git/test (push)
[root@develop test]# git remote add tom 192.168.4.20:/var/lib/git/test #与新服务器关联,名字叫tom
[root@develop test]# git remote -v
origin 192.168.4.20:/var/lib/git/test (fetch)
origin 192.168.4.20:/var/lib/git/test (push)
tom 192.168.4.20:/var/lib/git/test (fetch)
tom 192.168.4.20:/var/lib/git/test (push)
[root@develop test]# echo "test01" > test01.txt
[root@develop test]# git add .
[root@develop test]# git commit -m "test01"
[root@develop test]# git push -u origin master #可以上传到多个服务器 的master分支
[root@develop test]# git push -u tom master #可以上传到多个服务器 的master分支
[root@develop test]# git remote remove origin #删除名为origin的服务器
[root@develop test]# git remote -v
tom 192.168.4.20:/var/lib/git/test (fetch)
tom 192.168.4.20:/var/lib/git/test (push)
[root@develop test]# echo test02.txt > test02.txt
[root@develop test]# git add .
[root@develop test]# git commit -m "test02.txt"
[root@develop test]# git push -u tom master #上传到tom 的master分支
[root@develop test]# git remote rename tom web #改名为web
[root@develop test]# git remote -v
web 192.168.4.20:/var/lib/git/test (fetch)
web 192.168.4.20:/var/lib/git/test (push)
[root@develop test]# git remote add origin 192.168.4.20:/var/lib/git/web #与新服务器关联,名字叫origin
[root@develop test]# git remote -v
origin 192.168.4.20:/var/lib/git/web (fetch)
origin 192.168.4.20:/var/lib/git/web (push)
web 192.168.4.20:/var/lib/git/test (fetch)
web 192.168.4.20:/var/lib/git/test (push)
[root@develop test]# git pull web master #下载web服务器master分支下的数据
From 192.168.4.20:/var/lib/git/test
* branch master -> FETCH_HEAD
Already up to date.
使用ssh协议建立连接,实现免密通信
在develop下操作:
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 #上传到服务器无需密码