使用 gitolite 管理 git 服务器

os:Ubuntu 12.04 LTS 32bit

gitolite:2.2-1
服务器端和客户端都是ubuntu linux
由于gitosis不再更新,打算迁移到gitolite。由于项目的用户不多,这里就不做详细的迁移,仅安装好gitolite后重新配置允许访问的用户,原版本库甚至不用移动,但是gitolite-admin库建议重新克隆并推送一次,以免管理出错
通过apt安装,gitolite使用SSH key来认证用户,但用户不需要在主机上添加用户,而是使用服务器上的一个受限用户git。 安装的过程需要在客户端和服务器之间切换,留意操作步骤之前的说明。
服务器端(ip:192.168.1.254) 
1.安装git
sudo apt-get install git-core
2.安装gitolite
sudo apt-get install gitolite
这里使用软件源中的2.2-1,最新的在 https://github.com/sitaramc/gitolite 上。
3.创建git用户
sudo adduser --system --shell /bin/sh --gecos 'git user' --group --disabled-password --home /home/git git
如果原来gitosis就有创建的,这里可以不用。
4.检查以上是否正常 ^_^
客户端(也需要先安装 git) 
5. 在 gitolite 管理员的机器上生成 密钥,把公钥重命名为comet.pub,这里用scp传到服务器上
ssh-keygen -t rsa 
mv id_rsa.pub comet.pub 
scp comet.pub comet@192.168.1.254:comet.pub
注意:这里的公钥文件comet.pub只有一行内容,如果是在windows中用puttygen生成的会有多行,在后面初始化的时候会提示:
WARNING: a pubkey file can only have one line (key); ignoring comet.pub
         Perhaps you're using a key in a different format (like putty/plink)?
         If so, please convert it to openssh format using 'ssh-keygen -i'.
         If you want to add multiple public keys for a single user, use
         "user@host.pub" file names.  See the "one user, many keys"
         section in doc/3-faq-tips-etc.mkd for details.
6.在 ~/.ssh/config 添加以下内容,以便连接到服务器
Host 192.168.1.254
Compression yes
IdentityFile ~/.ssh/id_rsa
服务器端
7.使用上面的 comet.pub 初始化 gitolite
先切换到git用户,再进行
su - git
gl-setup /home/comet/comet.pub
creating gitolite-admin...
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
creating testing...
Initialized empty Git repository in /home/git/repositories/testing.git/
[master (root-commit) 0aa63a9] start
 2 files changed, 6 insertions(+)
 create mode 100644 conf/gitolite.conf
 create mode 100644 keydir/comet.pub
初始化是根据/usr/share/gitolite/conf/example.conf 和 example.gitolite.rc 在/home/git下生成 .gitolite.rc,.gitolite,projects.list,repositories ,生成 gitolite-admin 和 testing 两个版本库,并在.ssh/authorized_keys中加入comet.pub文件。
客户端 
8.获取服务器上的 gitolite-admin 项目,会有keydir和conf两个文件夹
git clone git@192.168.1.254:gitolite-admin
由于前面已经把comet用户的公钥加入git用户.ssh/authorized_keys中,这里是不需要git密码的。
注意:这里的gitolite-admin是git用户根目录中的repositories/gitolite-admin,不能用绝对路径,如:/srv这样的,但可以做软链接过去。
9.添加新组jichuteam、用户jichu、项目jichu,并推送到远程服务器
注:如果客户端是windows,使用Puttygen生成公钥和私钥:参数为SSH-2 RSA,1024位,按需加上密码。
如果之前是使用ssh-keygen生成的,在这里直接Load private key,然后save private key,保存为ppk格式才能用。
复制puttygen显示的公钥保存为*.pub文件,注意不是"save public key",保证公钥文件只有1行内容,否则不正确。把公钥给git的管理员,让他用gitolite-admin的方法把公钥加入git服务器,并设置好对应项目的权限。
在新的客户端生成密钥,并把公钥放到 gitolite-adminkeydir ,这里是Admin.pub
cd gitolite-admin/conf
vi gitolite.conf
修改为下面内容,其中repo是对应的项目版本库,RW+表示可读写,Admin是 Admin.pub 的文件名,表示用户,多个用户用空格隔开。
repo    gitolite-admin
        RW+     =   comet
repo    testing
        RW+     =   @all
repojichu
RW+=comet Admin
git push
10.到其他地方建立项目根目录,并设置默认用户和邮箱,在.git/config添加master主分支和远程服务器URL
mkdir jichu 
cd jichu 
git init 
git config user.name Comet 
git config user.email iamcomet@3gcomet.com 
git remote add master git@192.168.1.254:jichu.git
11.在 jichu 目录下进行开发,这里新建了 log.txt(一定要有新文件),提交到index,加上"initial import"信息并提交到本地仓库,最后是推送到远程服务器。
echo "begin develop" > log.txt 
git add . 
git commit -a -m "initial import" 
git push master master
服务器端
12.在服务器的 /home/git/repositories/ 可以看到有 jichu.git 的版本库。
推荐参考:
Gitolite 构建 Git 服务器
http://www.ossxp.com/doc/git/gitolite.html

3 thoughts on “使用 gitolite 管理 git 服务器”

发表评论

电子邮件地址不会被公开。 必填项已用*标注