Git的学习笔记(二)

文章摘自: http://git-scm.com/book/zh/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-Gitosis

注意操作过程尽量用 git 用户操作,这样可以避免权限及一些不必要的麻烦
ntpdate asia.pool.ntp.org
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

yum install git

yum install git-core

$ sudo adduser git$ su git$ cd
2014/4/25 16:06
yum install python-setuptools

接下来,从Gitosis 项目主页克隆并安装:
$ git clone https://github.com/tv42/gitosis.git$ cd gitosis$ sudo python setup.py install

这会安装几个供 Gitosis 使用的工具。默认 Gitosis 会把 /home/git 作为存储所有 Git 仓库的根目录
好了,现在可以初始化 Gitosis 了。你可以用自己的公钥执行 gitosis-init 命令,要是公钥不在服务器上,先临时复制一份:
$ sudo -H -u git gitosis-init < /tmp/id_dsa.pubInitialized empty Git repository in /opt/git/gitosis-admin.git/Reinitialized existing Git repository in /opt/git/gitosis-admin.git/

或者直接使用 git 用户在相应的目录下直接执行 gitosis-init < /tmp/id_dsa.pub
这样该公钥的拥有者就能修改用于配置 Gitosis 的那个特殊 Git 仓库了。接下来,需要手工对该仓库中的 post-update 脚本加上可执行权限:

$ sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
# 在你本地计算机上$ git clone git@gitserver:gitosis-admin.git

这会得到一个名为 gitosis-admin 的工作目录,主要由两部分组成:
$ cd gitosis-admin$ find ../gitosis.conf./keydir./keydir/scott.pub

看一下 gitosis.conf 文件的内容,它应该只包含与刚刚克隆的 gitosis-admin 相关的信息:
$ cat gitosis.conf[gitosis][group gitosis-admin]members = scottwritable = gitosis-admin

它显示用户 scott― 初始化 Gitosis 公钥的拥有者 ― 是唯一能管理gitosis-admin项目的人。

现在我们来添加一个新项目。为此我们要建立一个名为 mobile的新段落,在其中罗列手机开发团队的开发者,以及他们拥有写权限的项目。由于 'scott' 是系统中的唯一用户,我们把他设为唯一用户,并允许他读写名为iphone_project的新项目:

[group mobile]members = scottwritable = iphone_project

修改完之后,提交 gitosis-admin里的改动,并推送到服务器使其生效:

$ git commit -am 'add iphone_project and mobile group'[master 8962da8] add iphone_project and mobile group 1 file changed, 4 insertions(+)$ git push origin masterCounting objects: 5, done.Compressing objects: 100% (3/3), done.Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@gitserver:gitosis-admin.git   fb27aec..8962da8  master -> master

在新工程 iphone_project里首次推送数据到服务器前,得先设定该服务器地址为远程仓库。但你不用事先到服务器上手工创建该项目的裸仓库― Gitosis 会在第一次遇到推送时自动创建:

$ git remote add origin git@gitserver:iphone_project.git$ git push origin masterInitialized empty Git repository in /opt/git/iphone_project.git/Counting objects: 3, done.Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@gitserver:iphone_project.git * [new branch]      master -> master

过这次不用在服务器上一个一个手工添加到 ~/.ssh/authorized_keys文件末端,而只需管理keydir目录中的公钥文件。文件的命名将决定在gitosis.conf中对用户的标识。

然后把他们都加进 'mobile' 团队,让他们对 iphone_project具有读写权限:

[group mobile]members = scott josie jessicawritable = iphone_project[group mobile_ro]members = johnreadonly = iphone_project

现在 John 可以克隆和获取更新,但 Gitosis 不会允许他向项目推送任何内容。像这样的组可以随意创建,多少不限,每个都可以包含若干不同的用户和项目。



你可能感兴趣的:(Git的学习笔记(二))