git
代码管理仓库
功能:
开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
工作原理:
pull:下载、获取
开发者从git-server下载代码
push:上传、推送
开发者将本地代码提交到git-server
冲突:
提交:上传代码
分支:每个开发人员,按照规划,在自己的分支编写代码
同类产品:windows SVN
1. git-server
[root@git-server ~]# yum install -y git gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel perl-DBI perl-Error perl-Git perl-Test-Harness perl-Test-Simple perl-YAML pakchois neon libproxy libproxy-bin libproxy-python apr apr-util apr-util-ldap perl-Data*
创建2个用户:
git 保存代码
admin 管理用户
[root@git-server ~]# useradd git
[root@git-server ~]# useradd admin
[root@git-server ~]# echo admin | passwd --stdin admin
[root@git-server ~]# su - admin
[admin@git-server ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase): 输入私钥密码
Enter same passphrase again: 密码确认
[admin@git-server ~]$ cd .ssh/
[admin@git-server ~/.ssh]$ ls
id_rsa id_rsa.pub
[admin@git-server ~/.ssh]$ cp id_rsa.pub /tmp/admin.pub
[root@git-server ~]# su - git
[git@git-server ~]$ tar zxf centos7-gitolite.tgz
[git@git-server ~]$ ls
centos7-gitolite.tgz gitolite
[git@git-server ~]$ rm -f centos7-gitolite.tgz
将命令加入git用户的PATH变量:
[git@git-server ~]$ mkdir bin
[git@git-server ~]$ gitolite/install -ln
[git@git-server ~]$ ls bin/
gitolite
将admin的公钥导入git:
[git@git-server ~]$ cp /tmp/admin.pub .
[git@git-server ~]$ gitolite setup -pk admin.pub
[git@git-server ~]$ ls .gitolite/keydir/
admin.pub
admin克隆管理仓库:
[root@git-server ~]# su - admin
[admin@git-server ~]$ git clone git@172.16.0.173:gitolite-admin
Enter passphrase for key '/home/admin/.ssh/id_rsa': 输入自己的私钥密码
[admin@git-server ~]$ cd gitolite-admin/
[admin@git-server ~/gitolite-admin]$ ls
conf keydir
conf 配置
keydir 保存公钥
接需求:
需求1:
项目名称:QQ农场
仓库名称:qqfarm
项目经理:zhangyi
开发人员:zhanger zhangsan
权限:
项目经理是管理权限
开发人员是读写权限
其他人是只读权限
需求2:
项目名称:论坛
仓库名称:forum
项目经理:liyi
开发人员:lier lisan lisi
权限:
项目经理是管理权限
开发人员是读写权限
其他人没有权限
准备公钥和私钥:
创建出来7对公钥和私钥
私钥的密码是每个人自定义的。
[root@node1 ~]# useradd zhangyi
[root@node1 ~]# useradd zhanger
[root@node1 ~]# useradd zhangsan
[root@node1 ~]# useradd liyi
[root@node1 ~]# useradd lier
[root@node1 ~]# useradd lisan
[root@node1 ~]# useradd lisi
[root@node1 ~]# su - zhangyi
[zhangyi@node1 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhangyi/.ssh/id_rsa):
Created directory '/home/zhangyi/.ssh'.
Enter passphrase (empty for no passphrase): 输入私钥密码
Enter same passphrase again:
[zhangyi@node1 ~/.ssh]$ scp id_rsa root@172.16.0.173:/tmp/zhangyi.id_rsa
root@172.16.0.173's password:
[zhangyi@node1 ~/.ssh]$ scp id_rsa.pub root@172.16.0.173:/tmp/zhangyi.pub
root@172.16.0.173's password:
其他6个用户,同上。
将公钥cp到git管理仓库:
[admin@git-server ~/gitolite-admin/keydir]$ ls
admin.pub lier.pub lisan.pub lisi.pub liyi.pub zhanger.pub zhangsan.pub zhangyi.pub
配置文件:
[admin@git-server ~/gitolite-admin]$ vim conf/gitolite.conf
定义用户
维度1:按照其身份
C = zhangyi zhanger zhangsan
Java = liyi lier lisan lisi
维度2:按照其项目
qqfarm = zhangyi zhanger zhangsan
forum = liyi lier lisan lisi
......
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
@C = zhangyi zhanger zhangsan
@Java = liyi lier lisan lisi
repo qqfarm
RW+ = admin zhangyi
RW = zhanger zhangsan
R = @all
repo forum
RW+ = admin liyi
RW = @Java
将修改提交到git仓库:
[admin@git-server ~/gitolite-admin]$ git config --global user.name "niua"
[admin@git-server ~/gitolite-admin]$ git config --global user.email "niua@163.com"
和git-server“打招呼”
[admin@git-server ~/gitolite-admin]$ git add --all
添加所有修改
[admin@git-server ~/gitolite-admin]$ git commit -m "add all"
提交
[admin@git-server ~/gitolite-admin]$ git config --global push.default simple
上传基本配置
[admin@git-server ~/gitolite-admin]$ git push
上传
Enter passphrase for key '/home/admin/.ssh/id_rsa':
输入admin的私钥密码
[git@git-server ~/repositories]$ ls
forum.git gitolite-admin.git qqfarm.git testing.git
结果
初始化git仓库:
[admin@git-server ~]$ mkdir init
[admin@git-server ~]$ cd init/
[admin@git-server ~/init]$ git clone git@172.16.0.173:qqfarm
Cloning into 'qqfarm'...
Enter passphrase for key '/home/admin/.ssh/id_rsa':
warning: You appear to have cloned an empty repository.
[admin@git-server ~/init]$ git clone git@172.16.0.173:forum
Cloning into 'forum'...
Enter passphrase for key '/home/admin/.ssh/id_rsa':
warning: You appear to have cloned an empty repository.
克隆
[admin@git-server ~/init]$ ls
forum Git-init.sh qqfarm
初始化脚本
#!/bin/bash
git commit --allow-empty -m "init"
git push origin master
echo "create by uplooking-xxs.shenyang" > README
echo `date` >> README
git add README
git commit -m "create README file"
git push
git branch develop
git branch uat
git checkout develop
echo "branch develop" >> README
git add README
git commit -m "admin in develop change README"
git push -u origin develop
git checkout uat
echo "branch uat" >> README
git add README
git commit -m "admin in uat change README"
git push -u origin uat
>>>>>>>>>>>>>>>>>>>>>>>>>
[admin@git-server ~/init]$ chmod +x Git-init.sh
[admin@git-server ~/init]$ cp Git-init.sh forum/
[admin@git-server ~/init]$ cp Git-init.sh qqfarm/
带入私钥密码:
[admin@git-server ~/init/forum]$ eval `ssh-agent`
Agent pid 6161
[admin@git-server ~/init/forum]$ ssh-add
Enter passphrase for /home/admin/.ssh/id_rsa:
[admin@git-server ~/init/forum]$ ./Git-init.sh
[admin@git-server ~/init/qqfarm]$ ./Git-init.sh
活干完了,可以回复邮件了。
在windows测试下:
这个名字就是和linux的一样。
能下载就是ok了。
维护git-server:
做好备份。
git-server保存代码的分区,底层使用raid1。
2块硬盘,raid1 mount /home
[root@git-server ~]# yum install -y nfs-utils
[root@git-backup ~]# yum install -y nfs-utils
[root@git-backup ~]# mkdir /nfs
[root@git-backup ~]# chmod 757 /nfs
[root@git-backup ~]# vim /etc/exports
/nfs 172.16.0.173(rw,sync)
[root@git-backup ~]# systemctl start nfs
[root@git-backup ~]# systemctl enable nfs
[root@git-server ~]# showmount -e 172.16.0.174
Export list for 172.16.0.174:
/nfs 172.16.0.173
写备份脚本:
[root@git-server ~]# vim git_backup.sh
#!/bin/bash
# gitolite备份脚本
nfsip="172.16.0.174"
nfsdir="/nfs"
DATE=`date "+%Y%m%d"`
#挂载nfs
if [ ! -d /backup ]
then
mkdir /backup
fi
df -h | grep ${nfsip}:${nfsdir} &> /dev/null
if [ $? -ne 0 ]
then
mount ${nfsip}:${nfsdir} /backup
fi
cd /home
tar zcf /backup/${DATE}-admin.tgz admin
tar zcf /backup/${DATE}-git.tgz git
find /backup -mtime +7 -type f -name "*.tgz" -exec rm -f {} \;
[root@git-server ~]# ./git_backup.sh
[root@git-server ~]# cd /backup/
[root@git-server /backup]# ls
20191206-admin.tgz 20191206-git.tgz
[root@git-backup ~]# cd /nfs/
[root@git-backup /nfs]# ls
20191206-admin.tgz 20191206-git.tgz
计划任务进行备份。
git-server不可用。
[root@git-backup ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
改成git-server的IP
[root@git-backup ~]# /etc/init.d/network restart
[root@git-backup /nfs]# tar zxf 20191206-admin.tgz -C /home/
[root@git-backup /nfs]# tar zxf 20191206-git.tgz -C /home/
[root@git-backup /home]# useradd -u 1000 git
[root@git-backup /home]# useradd -u 1001 admin
修复完毕