Gitolite 来创建 Git 仓库

好的,利用 Gitolite 来创建 Git 仓库是一个非常高效和安全的方案,特别适合团队协作。它通过在服务器上创建一个专门的“管理”用户,然后通过你本地机器的 SSH 密钥和一個特殊的“管理仓库”来远程控制所有仓库的权限和创建。

整个过程可以分为两大部分:

  1. 服务器端初始化安装 (通常由管理员操作一次)
  2. 在本地机器上添加新仓库 (日常操作)

第一部分:服务器端初始化安装 (一次性的设置)

这一步假设你有一台作为 Git 服务器的 Linux/Unix 机器(如 Ubuntu, CentOS 等)。

1. 在服务器上创建用户

创建一个名为 git 的专用用户来托管所有仓库。

sudo adduser --system --shell /bin/bash --group --disabled-password --home /home/git git
  • --system: 创建系统用户
  • --shell /bin/bash: 为其指定一个有效的 shell,以便后续操作
  • --home /home/git: 指定家目录

2. 收集管理员公钥

在你的本地电脑上,如果你还没有 SSH 密钥对,请生成一个:

ssh-keygen -t ed25519 -C "your_email@example.com"
# 或者使用 RSA
# ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

默认情况下,公钥会保存在 ~/.ssh/id_ed25519.pub~/.ssh/id_rsa.pub

将你本地电脑的公钥.pub文件的内容)复制到服务器上。暂时将其命名为 yourname.pub,并通过任何方式(如 scp)将其上传到服务器的 /tmp 目录下。

3. 在服务器上安装 Gitolite

切换到 git 用户,并安装 Gitolite。

# 切换到 git 用户
sudo su - git

# 克隆 gitolite 源码
git clone https://github.com/sitaramc/gitolite

# 创建 bin 目录
mkdir -p ~/bin

# 安装到 ~/bin 目录
gitolite/install -to ~/bin

4. 初始化 Gitolite

使用你上传的管理员公钥来初始化 Gitolite。

# 确保在 git 用户的家目录下
~/bin/gitolite setup -pk /tmp/yourname.pub

执行成功后,你的公钥就被设置为 Gitolite 的管理员密钥。服务器端的初始化就完成了。


第二部分:在本地机器上创建新仓库

现在,所有日常管理操作(包括创建新仓库、分配权限)都可以在你的本地电脑上通过操作一个特殊的 Git 仓库来完成。

1. 克隆管理仓库

在你的本地电脑上,使用初始化时指定的管理员密钥对应的私钥,克隆 Gitolite 的管理仓库。地址中的 git@yourserver.com 需要替换为你服务器的实际地址或主机名。

git clone git@yourserver.com:gitolite-admin

克隆成功后,你会看到一个名为 gitolite-admin 的文件夹,里面包含两个子目录:

  • conf/: 存放配置文件 gitolite.conf
  • keydir/: 存放所有用户的 SSH 公钥

2. 添加新仓库

创建新仓库非常简单,只需编辑 conf/gitolite.conf 文件并添加相应的配置即可。

例如,要创建一个名为 my-new-repo 的新仓库,并对你自己授予读写(RW+)权限:

用文本编辑器打开 gitolite-admin/conf/gitolite.conf,在文件末尾添加:

repo my-new-repo
    RW+ = yourname  # 这里的 ‘yourname’ 必须与你公钥的文件名(不含.pub后缀)一致

更常见的例子:创建一个团队项目仓库

repo awesome-project
    RW+ = alice bob   # 管理员,可强制推送
    RW  = dev-team    # 普通开发者,可正常推送
    R   = tester      # 测试人员,只读

3. 添加用户(协作者)的公钥

如果要添加其他协作者,需要将他们的 SSH 公钥(.pub文件)复制到 keydir/ 目录下。公钥文件的名称将决定他们的用户名

例如,添加用户 alice

  1. 将她的公钥文件保存为 keydir/alice.pub
  2. 添加用户 bob,将他的公钥文件保存为 keydir/bob.pub

4. 提交并推送更改

将你对 gitolite-admin 仓库的修改(包括 confkeydir 的更改)提交并推送到服务器。

cd gitolite-admin
git add .
git commit -m "Added new repo 'my-new-repo' and user 'alice'"
git push

5. 奇迹发生!

git push 命令成功执行后,Gitolite 服务器会自动处理你的配置:

  1. 如果仓库不存在:会自动在服务器上创建裸仓库(my-new-repo.git)。
  2. 设置权限:根据配置,为相应的用户设置读/写权限。
  3. 添加用户:将 keydir 中的新公钥部署到服务器的 ~/.ssh/authorized_keys 文件中,从而授予用户访问权限。

现在,你和你的协作者就可以像使用普通 Git 仓库一样使用这个新仓库了:

# 在你的本地电脑上克隆新创建的仓库
git clone git@yourserver.com:my-new-repo

# 或者,如果已经克隆过,可以添加为新远程仓库并推送现有项目
git remote add origin git@yourserver.com:my-new-repo
git push -u origin master

总结与关键点

  • 管理方式:Gitolite 采用“配置即代码”的理念,通过一个 Git 仓库来管理另一个 Git 仓库(gitolite-admin),非常巧妙。
  • 无需服务器操作:日常创建仓库、添加用户完全在本地完成,无需再次登录服务器。
  • 权限灵活:Gitolite 提供了非常精细的权限控制(分支级别、标签级别、根据修改内容拒绝推送等),远强于简单的 Linux 文件权限。
  • 用户标识:用户的身份由他们 SSH 密钥对的公钥唯一确定,而不是服务器上的用户名。keydir/ 中的文件名只是 Gitolite 内部用来识别公钥的标签。
  • 仓库位置:服务器上的所有仓库默认位于 git 用户的家目录下的 repositories/ 文件夹中(例如 /home/git/repositories/)。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容