版本管理工具:
svn 集中式 用户使用该服务时,需要时刻与服务器保持在线状态,数据统一保存在svn服务器中
git 分布式 用户使用该服务时,不需要时刻与服务器保持在线状态,仅仅传递数据时需要联网,数据保存在git服务器与git客户端,网站:https://gitee.com/,https://github.com/
git工作流程:
我们假设web1为远程服务器,web2为本地服务器。
1.安装git
[root@web1 ~]# yum -y install git
[root@web2 ~]# yum -y install git
2.在远程上建立仓库
[root@web1 ~]# mkdir /var/lib/git
[root@web1 ~]# git init /var/lib/git/project --bare //创建空仓库,叫Project
3.在本地上连接远程,并创建数据,测试提交远程服务器是否成功
[root@web2 ~]#git clone 192.168.2.100:/var/lib/git/project //在客户机克隆服务器的仓库
[root@web2 ~]#cd project //进入本地克隆仓库
[root@web2 project]# echo "web2_01" > web2_01.txt //创建测试文件
[root@web2 project]# git add . //提交到本地暂存区
[root@web2 project]# git commit -m "web2_01.txt" //将文件保存到本地克隆仓库中,-m后面的内容是日志提示信息,首次保存会失败,按照下面2条命令输入邮箱和用户名即可
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
[root@web2 project]# git commit -m "web2_01.txt" 再次提交文件,保存到本地克隆仓库中
[root@web2 project]#git push 将本地克隆仓库中的数据推送到远程服务器,第一次使用时必须配置使用习惯,可能是因为版本更新导致的。
[root@web2 project]# git config --global push.default simple 配置使用习惯
[root@web2 project]#git push 再次推送
所有通过commit提交的记录都可以通过日志查看
git log //查看完整日志
git log --pretty=oneline //查看精简日志
git log --oneline //查看最精简日志
git reflog //查看本机操作记录
head指针(类似于还原到出厂设置)
如果需要还原到之前的版本(时间节点),可以利用head指针对应日志记录中的随机字符串指向需要的版本
root@web2 project]# git log --oneline //查看日志,开头的部分就是不同版本的随机字符串
[root@web2 project]# git reset xxxx --hard //回到过去的某个记录,其中 xxxx是日志中显示的时间节点信息,要根据实际修改
[root@web2 project]# git reflog //查看回复记录之后的日志记录,head@{0}代表当前所在版本位置
git分支
当项目内容比较多时,可以在git中使用分支,不同分支的文件可以互不干扰而不用创建多个仓库
[root@web2 project]# git branch //查看当前分支,*是所在位置
[root@web2 project]# git branch hotfix //创建hotfix分支
[root@web2 project]# git checkout hotfix //切换到hotfix分支
[root@web2 project]# echo "hotfix_01" > hotfix_01.txt //编写测试文件
[root@web2 project]# git add . //提交到暂存区
[root@web2 project]# git commit -m "hotfix_01.txt" //提交到仓库保持
[root@web2 project]# git checkout master //切换到master分支
[root@web2 project]# echo "master_01" > master_01.txt //编写测试文件
[root@web2 project]# git add . //提交到暂存区
[root@web2 project]# git commit -m "hotfix_01.txt" //提交到仓库保持
git merge hotfix //把hotfix分支的文件合并到当前分支
如果分别在不同分支,创建同名文件,内容不同,再进行合并时,会发生冲突,此时需要手工修改冲突文件,修改完之后,就可以解决冲突
配置ssh秘钥,实现无密码访问git服务器
本地仓库
ssh-keygen -f /root/.ssh/id_rsa -N '' //在客户端创建秘钥秘钥没有密码,-f 新建文件夹 -N 一对单引号:passphrash为空相当于一路空格
ssh-copy-id 192.168.2.100 //传入服务器
git clone 192.168.2.100:/var/lib/git/abc //克隆git服务器的仓库,已经无需密码
cd abc //进入仓库
echo abc > abc.txt //创建测试文件
git add . //提交到暂存区
git commit -m "abc" //提交到仓库保存
git push //推送到git服务器,也不需要密码了
不用ssh协议进行git的仓库管理,使用git协议:
Web1主机:
yum -y install git-daemon //安装git协议软件包
systemctl start git.socket //开启服务
setenforce 0
vim /usr/lib/systemd/system/git@.service
修改git服务的配置,在第7行末尾加--enable=receive-pack选项,允许对仓库服务器写入数据,否则是只读
[root@web1 ~]# systemctl restart git.socket //开启服务
[root@web1 ~]# setenforce 0 //关闭selinux,(防火墙也关)
[root@web1 ~]#chmod -R 777 /var/lib/git/abc //开放仓库权限
[root@web2 ~]#rm -rf project //删除原有仓库
[root@web2 ~]#git clone git://192.168.2.100/abc //使用git协议从新克隆
[root@web2 ~]#cd abc //进入仓库,可以正常使用仓库
[root@web2 abc]# echo 123 > abc //创建测试文件
[root@web2 abc]# git add . //提交到暂存区
[root@web2 abc]# git commit -m "abc" //提交到仓库
[root@web2 project]# git push //推送到远程服务器
使用http访问git(只读)
[root@web1 ~]# yum -y install httpd gitweb 安装软件包
[root@web1 ~]# vim +10 /etc/gitweb.conf 进入配置文件的第10行删除注释即可,其中/var/lib/git路径必须是仓库的上级目录,如果不一致要修改
[root@web1 ~]# systemctl restart httpd 启动网站服务
关闭selinux与防火墙
使用火狐访问http://192.168.2.100/git/