Git/Gitosis
Gitosis 是一种工具,用于保护集中式的 Git 仓库,允许多个维护者同时管理同一个项目,通过限制对只通过安全网络协议的访问来实现。
要安装 Gitosis,您首先必须安装 Git 客户端。安装完成后,从其仓库签出一个 Gitosis 的副本
git clone git://eagain.net/gitosis.git
安装
cd gitosis python setup.py install
创建一个用户来管理仓库
sudo adduser \ --system \ --shell /bin/sh \ --gecos 'git version control' \ --group \ --disabled-password \ --home /home/git \ git
如果您还没有公钥,请在您的本地计算机上创建一个
ssh-keygen -t rsa
将此密钥复制到 Gitosis 服务器。假设您在您的主目录中
scp .ssh/id_rsa.pub [email protected]:/tmp
初始化 Gitosis
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
成功后,您将看到
Initialized empty Git repository in ./ Initialized empty Git repository in ./
确保 Git post-update hook 具有正确的权限
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
Gitosis 创建了它自己的 Git 仓库。要配置 Gitosis,您需要克隆这个仓库,设置您的配置选项,然后将您的配置推送到 Gitosis 服务器。
克隆 Gitosis 仓库
git clone [email protected]:gitosis-admin.git cd gitosis-admin
编辑 gitosis.conf
一个默认 gitosis.conf 的示例
[gitosis]
[group gitosis-admin] writable = gitosis-admin members = jdoe
您可以像这样定义成员组以及他们对仓库的权限
[group blue_team] members = john martin stephen writable = tea_timer coffee_maker
在这个例子中,blue_team
组中的任何成员,在本例中是 john、martin 和 stephen,都将可以写入 tea_timer
和 coffee_maker
Git 仓库
保存、提交并推送此文件。
git commit -am "Give john, martin, and stephen access to the repositories tea_timer and coffee_maker." git push
接下来,创建一个仓库。您需要先切换到您要存储 Git 仓库本地副本的目录。
创建仓库
mkdir tea_timer cd tea_timer git init git remote add origin [email protected]:tea_timer.git # Add some files and commit. git push origin master:refs/heads/master # The previous line links your local branch master to the remote branch master so you can automatically fetch and merge with git pull.
用户通过他们的公钥来标识。Gitosis 将这些密钥保存在 gitosis-admin 仓库的 keydir
目录中。用户通过密钥文件的名称与其 Git 用户名相关联。例如,将一个 RSA 密钥添加到 keydir/john.pub
将会将用户 john 与 john.pub
中定义的机器相关联。密钥必须以 .pub 结尾!
添加用户
cd gitosis-admin cp /path/to/rsa/key/john.pub keydir/ git add keydir/* git commit -am "Adding the john account." git push
John 现在可以克隆他可以访问的 Git 仓库,这些仓库由 gitosis.conf
定义。在本例中,他可以读取和写入仓库,因为他拥有 writable
权限。