安装gitolite搭建git服务器
本文讲解在ubuntu上安装gitolite,为客户端提供git仓库服务器功能。ubuntu版本:server 16.04
安装准备
1.安装gitolite前,要安装 git,openssh-server和 openssh-client
apt-get update apt-get -y install git openssh-server openssh-client
2.准备好你的ssh私钥和公钥
没有的话可在本地执行
ssh-keygen -t rsa -C "yourname@example.com
生成一个,生成后在~/.ssh/目录里,id_rsa是私钥,id_rsa.pub是公钥,文件生成后可以改名。
本文用的客户端管理用户都在同一服务器上。
3.上传公钥
将公钥上传到服务器备用,比如是/tmp/YourName.pub
添加git用户
添加git管理用户gitadmin
useradd -m -d /data/db/gitadmin -s /bin/bash gitadmin su - gitadmin ssh-keygen -t rsa cd .ssh mv id_rsa gitadmin mv id_rsa.pub gitadmin.pub
添加git仓库用户
useradd -m -d /data/db/git -s /bin/bash git cp gitadmin/.ssh/gitadmin.pub git chown git.git git/gitadmin.pub
安装gitolite
1.登录到git用户
su - git
2.确保 ~/.ssh/authorized_keys 文件不存在或者为空
mkdir .ssh chmod 700 .ssh
3.把公钥拷贝到git主目录下
#上边已经复制过,不需要操作以下命令 cp /data/db/gitadmin/.ssh/gitadmin.pub $Home/gitadmin.pub
4.下载并安装gitolite
git clone https://github.com/sitaramc/gitolite mkdir -p $HOME/bin gitolite/install -to $HOME/bin
5.初始化gitolite, 同时配置管理员
$HOME/bin/gitolite setup -pk gitadmin.pub #运行此命令后会在.ssh文件夹中生成 authorized_keys 文件 cat .ssh/authorized_keys #///////////////////////文件内容//////////////////////////////////////// # gitolite start command="/data/db/git/bin/gitolite-shell gitadmin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLEz4ATHj+07/PHJheOTaPN2Vr9HGWy80Pujx2UoTFRak88W0BhW7JO/IlTpO30JHw72bQ6u24ZP4DbafuKZLIG2PYtYfVyhIsbNJp9U8BR0G3CQJZGYgh4znpYKkFV2HhXwzFOpEcpBoVYnzJ2y/rmgBocHLc22KLYVDVMam9F2qm715lhWlccfJzAcePvvOnHkgUJESWGm2OJcbyeT1nrL+nkgqpNyrfc2nIZKqBXuxr7+aHT4YuGQ6lyHUR0CstJeB43KGDM+pxJEqXfOla1Jb2HKWyG1wiuFUrOaRHoPjhWsAB371aMbHJtM+nJV+PWZ5ccl/nZnd83CbDvlPV gitadmin@hhk-op-01 # gitolite end #/////////////////////////////////////////////////////////////////////// #退出git用户 exit
克隆管理库到本地
不要直接在服务器上创建和管理仓库,仓库管理是通过叫gitolite-admin的仓库进行的,这个仓库在初始化gitolite时就已经生成了,管理员可以克隆到本地进行配置,在客户端执行
su - gitadmin git clone git@127.0.0.1:/gitolite-admin.git #>>>>>>>>>>>>>>>输出内容>>>>>>>>>>>>>>>>>>>>>>> Cloning into 'gitolite-admin'... Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts. Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #需要以下操作
如果提示输入密码,编辑客户端的~/.ssh/config文件,添加以下内容:
#添加文件 ~/.ssh/config #///////////////////////////////文件内容//////////////////////////// Host 服务器地址 HostName 服务器地址 User git Port 22 IdentityFile ~/.ssh/gitadmin #////////////////////////////////////////////////////////////////// #在运行命令 git clone git@git:/gitolite-admin.git cd gitolite-admin/ vim conf/gitolite.conf #///////////////////////////////文件内容//////////////////////////// ########################################### # user and group ############################################ # general @admin = gitadmin ebj-hhk @cm = @admin @op = @cm hhkgit @confuser = @cm hhkgit ############################################ # repo groups ############################################ @apps_repos = apps/rainbow apps/mountain apps/forest apps/hail apps/lake apps/glacier apps/inverse apps/hamster apps/sunlight @conf_repos = conf/rainbow conf/mountain conf/forest conf/hail conf/lake conf/glacier conf/inverse conf/hapoxy conf/hhk-web-01-nginx conf/hamster conf/sunlight conf/hhk-web-01b-nginx repo gitolite-admin RW+ = @cm gitadmin repo testing RW+C = @cm RW+ = @all repo @apps_repos RW+C = @op repo @conf_repos RW+C = @confuser #///////////////////////////////文件内容结束/////////////////////////////////// git add . git commit -m "add" #出现错误 #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account is default identity. Omit --global to set the identity only in this repository. fatal: empty ident name (for <gitadmin@hhk-op-01.(none)>) not allowed #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #运行以下命令解决 git config --global user.email "gitadmin@example.com" git config --global user.name "gitadmin" git commit -m "add" git push
添加用户和仓库
gitolite-admin里面两个文件夹keydir和conf:
1.keydir存储用户的公钥,添加用户可以直接拷贝用户的公钥到此文件夹;
2.conf目录里的gitolite.conf是配置文件,格式如下:
repo gitolite-admin RW+ = gitadmin repo testing RW+ = @all
比如要添加一个仓库'foo',并给alice,bob和carol不同的权限,首先把他们的公钥(alice.pub,bob.pub,carol.pub)拷贝到keydir;然后编辑conf/gitolite.conf添加:
repo foo RW+ = alice RW = bob R = carol
最后把修改push到服务器:
git add conf git add keydir git commit -m "added foo, gave access to alice, bob, carol" git push
服务器会自动添加用户到~/.ssh/authorized_keys,并且添加一个新的空仓库’foo’。
上述操作完成后,alice、bob和carol就可以将仓库克隆到本地:
git clone git@服务器地址:foo
查看对仓库的操作权限,可以在客户端执行
ssh git@服务器地址 info
访问规则示例
gitolite的访问规则功能强大,以下是示例:
repo foo RW+ = alice - master = bob - refs/tags/v[0-9] = bob RW = bob RW refs/tags/v[0-9] = carol R = dave
规则解释:
alice对所有branch和tag拥有所有权限--create, push, delete, rewind/overwrite等等
bob可以创建或者fast-forward push名字中不以’master‘开头的branch,可以创建不以v+数字开头的tag
carol只可以创建v+数字开头的tag
dave只有只读权限,可以clone/fetch。
管理组
某些时候使用组来管理用户是非常方便的,下面是两个组:
@staff = alice bob carol @interns = ashok repo secret RW = @staff repo foss RW+ = @staff RW = @interns
组成员可以累加,下面对@staff的定义和上面的效果是一样的:
@staff = alice bob
@staff = carol
组也可以包含其他组:
@all-devs = @staff @interns
@all是一个特殊组名称,既可以指所有的仓库,可以指所有的用户。
常用命令
客户端可以通过ssh远程执行一些命令,以下命令可以查看帮助:
ssh git@host help
info是最长用到的命令,在命令后跟上’-h’可以查看命令的用法。
在服务器端有非常丰富的使用命令,运行gitolite help查看详细信息。