1.部署环境
系统:CentOS 7 最小化安装
2.安装基础依赖包
一路YES安装:
[root@xiao ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y
3.在线安装git
[root@xiao ~]# yum -y install git
下载安装包安装方式:
[root@xiao ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.2.0.tar.gz
[root@xiao ~]# tar xf git-2.2.0.tar.gz
[root@xiao ~]# cd git-2.2.0/
指定安装目录:方便删除,只要删除一个目录即可。
如果不指定prefix,则:
可执行文件默认放在/usr/local/bin
;
库文件默认放在/usr/local/lib
;
配置文件默认放在/usr/local/etc
;
其它的资源文件放在/usr/local/share
。
[root@xiao git-2.2.0]# make prefix=/usr/local/git all
[root@xiao git-2.2.0]# make prefix=/usr/local/git install
4.增加软连接
符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。
它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
[root@xiao git-2.2.0]# ln -s /usr/local/git/bin/* /usr/bin/
验证结果,显示出版本号,表示安装成功
[root@xiao git-2.2.0]# git --version
git version 2.2.0
5.创建git用户
创建用户时,指定用户所使用的shell(-s):
[root@xiao ~]# useradd -s /bin/bash git
切换到git用户:
[root@xiao ~]# su - git
[git@xiao ~]$ pwd #查看当前位置
/home/git
确认.ssh/authorized_key
是否存在
[git@xiao ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
6.获取git版本库并安装
克隆gitolite
仓库:
[git@xiao ~]$ git clone https://github.com/sitaramc/gitolite
然后创建bin目录并安装gitolite 到bin目录($ 表示普通用户)
[git@xiao ~]$ mkdir $HOME/bin
[git@xiao ~]$ gitolite/install -to $HOME/bin
[git@xiao ~]$ cd bin/
[git@xiao bin]$ ls
commands gitolite gitolite-shell lib syntactic-sugar triggers VERSION VREF
7.配置gitolite管理员
gitolite 使用特殊的版本库gitolite-admin
来管理用户和版本库,所以需要创建一个管理员来管理所有的用户和版本库
7.1 用git用户生成公钥
如果你是接着上面一直做下来的,那么只需要输入cd ,然后回车,则就进入了该用户的目录,如果不是git用户,则需要输入su – git
,来切换到git用户.
[git@xiao ~]cd
[git@xiao ~]$ ssh-keygen -t rsa
7.2 修改.ssh/id_rsa.pub 为admin.pub
为什么要改成admin.pub 因为gitolite根据这个文件名来设立帐号.我这里用admin
[git@xiao ~]$ mv .ssh/id_rsa.pub admin.pub
7.3 使用管理员公钥安装gitolite
(然后去/home/git/repositories 里面,可以看见仓库文件.gitolite-admin.git 和test.git 一个是管理仓库的,一个是测试用)
[git@xiao ~]$ $HOME/bin/gitolite setup -pk admin.pub
7.4 生成管理员管理仓库
(不需要输密码)
[git@xiao ~]$ git clone git@127.0.0.1:gitolite-admin
进入仓库后可以看到conf 和keydir ,
conf/gitolite.conf
是添加用户/仓库的配置,
keydir 是放客户端的公钥(客户端连接服务器用).并且此时,admin.pub
这个公钥可以删除了
7.5 编辑gitolite.conf
[git@xiao ~]$ vim gitolite-admin/conf/gitolite.conf
编辑内容(用户名与keydir中的.pub文件名一致即可):
@admin = admin
@user = root test1 test2
repo gitolite-admin
RW+ = admin
repo project
RW+ = @admin
RW = @user
上面的配置含义是:
定义两个用户组: admin
和 user
定义两个版本库: gitolite-admin
和 testing
用户admin对这两个版本库有(读 写 删除)RW+ 权限
user
组对project
有(读 写)RW 权限
也可按照格式,添加多个组,多个版本库
7.6 然后提交修改
提交修改:
[git@xiao conf]$ git add keydir/test.pub conf/gitolite.conf
[git@xiao conf]$ git add .
[git@xiao conf]$ git commit -am "new project"
[git@xiao conf]$ git push origin master
7.7 提交完后,查看管理仓库中多了一个project.git
[git@xiao ~]$ cd repositories/
[git@xiao repositories]$ ls
gitolite-admin.git project.git
这个时候,服务器已经搭建完毕了,只需要添加用户并给用户添加权限就可以了。
7.8 权限控制
查看管理员git库状态:
[root@xiao gitolite-admin]# git status
将有改动的文件添加到git库:
[root@xiao gitolite-admin]# git add keydir/test.pub conf/gitolite.conf
[root@xiao gitolite-admin]# git status
[root@xiao gitolite-admin]# git commit -m "add repo mytest; add user test"
在这里我们执行以下2条命令表明身份:
[root@xiao gitolite-admin]# git config --global user.email "jeiker@126.com"
[root@xiao gitolite-admin]# git config --global user.name "jeiker"
再重新执行git commit命令:
[root@xiao gitolite-admin]# git commit -m "add repo mytest; add user test"
执行完以上命令后,修改的文件只是提交在本地了,并没有提交到git server中,还需要执行git push命令。
推送到远端的master分支:
确保remote origin
的仓库名是对的:
[root@xiao gitolite-admin]# git push origin master
git remote 命令
不带参数,列出已经存在的远程分支:
# git remote
列出详细信息,在每一个名字后面列出其远程url:
# git remote -v | --verbose
删除远程仓库
# git remote rm origin
添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行:
# git remote add [shortname] [url]:
例如:
# git remote add origin git@192.168.189.22:test.git
要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行
# git fetch origin
Paul 的主干分支(master)已经完全可以在本地访问了,对应的名字是 origin/master