乐趣区

关于git:使用Gitolite搭建Git服务器

Git 服务的管理工具,次要有如下几种。

  • Gitosis- 轻量级,开源我的项目,应用 SSH 公钥认证,只能做到库级的权限管制。目前我的项目曾经进行开发,不再保护。
  • Gitolite – 轻量级,开源我的项目,应用 SSH 公钥认证,能做到分支级的权限管制。
  • Git + Repo + Gerrit – 超级重量级,集版本控制,库治理和代码审核为一身。可治理大型及超大型我的项目。Android 平台应用的就是这种计划。
  • GitLab- 是 GitHub 的开源版本,应用和配置比较复杂,适宜大型团队、资源密集型开发的管理工具

Gitolite应用 perl 语言编写,保护和更新比拟踊跃,上面测试应用 Gitolite 搭建 Git 服务器。

Gitolite 的装置

  • 新建用户 Git 服务器用户gitolite(用于寄存治理 Git 公钥和仓库)
adduser gitolite
  • 应用 gitolite 用户登陆服务器
$ su - gitolite
明码:
  • 确保家目录 ~/.ssh/authorized_keys 是空的或者不存在

个别新建用户 ~/.ssh/ 目录是不存在的。

  • 客户端生成 ssh 密钥,并将公钥上传到服务器的 Gitolite 用户家目录下
$ ssh-keygen -t rsa

生成门路会在 ssh-kengen 执行后给出,也可批改。windows 下生成门路默认位于 C:/user/ 用户名 /.ssh 下。

  • 上传客户端的公钥到 gitolite 用户家目录下
$ pscp C:/Users/win7hostsver/.ssh/id_rsa.pub gitolite@192.168.1.18:git1.pub
  • 在服务器端下载gitlite
git clone https://github.com/sitaramc/gitolite
  • 创立 bin 目录, 并将 gitolite 装置到 bin 目录下
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
  • 将上传的公钥 git1.pub 设置为 gitolite 的超级管理员
$HOME/bin/gitolite setup -pk git1.pub
初始化空的 Git 仓库于 /home/gitolite/repositories/gitolite-admin.git/
初始化空的 Git 仓库于 /home/gitolite/repositories/testing.git/
WARNING: /home/gitolite/.ssh/authorized_keys missing; creating a new one
    (this is normal on a brand new install)

此时,gitolite会初始化两个仓库,同时创立 authorized_keys 文件

也能够将 gitolite 命令门路退出到零碎环境变量,这样能够在任何门路应用gitolite

  • 客户端克隆受权治理仓库
$ git clone gitolite@192.168.1.18:gitolite-admin

治理库中有两个目录,conf/keydir/

  1. conf/gitolite.conf 用于 Git 我的项目配置,拜访权限设置。
  2. keydir/ 用于存储用户的 SSH public key(公钥)。

配置 Git 服务器的我的项目

增加新的 Git 我的项目仓库到本地

仓库的创立通过编辑 gitolite-admin/conf/gitolite.conf 即可,而后将配置后的文件上传服务器。

  • gitolite.conf中增加如下两行, 新建一个 repo1 的仓库:
repo repo1
    RW+     =   @all

gitolite.conf治理仓库有三种权限,RW+、RW、R

权限能够赋值给 @all 所有有用户;或增加到 \keydir\ 目录中的公钥对应的某一个用户 (公钥文件的名字为RW+ 值)

git1.pub 公钥文件,RW+ = git1

  • 增加并提交批改到gitolite-admin
 git add .
 git commit -m "added repo1 gave access to all"
[master 613f720] added repo1 gave access to all
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 推送到近程服务器,gitolite会在服务器创立对应的 git 仓库
 git push
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 703 bytes | 175.00 KiB/s, done.
Total 8 (delta 1), reused 0 (delta 0)
remote: 初始化空的 Git 仓库于 /home/gitolite/repositories/repo1.git/
To 192.168.1.22:gitolite-admin
   f68d497..613f720  master -> master
  • 服务器端 repositories/ 仓库库目录下会多出一个空仓库repo1
$ ls -al repositories/
总用量 20
drwx------  5 gitolite gitolite 4096 5 月   7 21:10 .
drwxr-xr-x 10 gitolite gitolite 4096 5 月   7 21:10 ..
drwx------  8 gitolite gitolite 4096 5 月   7 21:10 gitolite-admin.git
drwx------  7 gitolite gitolite 4096 5 月   7 21:10 repo1.git
drwx------  7 gitolite gitolite 4096 5 月   7 21:10 testing.git
  • 客户端间接克隆
$ git clone gitolite@192.168.1.22:repo1.git
Cloning into 'repo1'...
warning: You appear to have cloned an empty repository.

本地现有仓库增加到服务器

若本地已有仓库 repo2,将其增加到服务器

  • gitolite.conf中配置仓库 repo2
repo repo2
    RW+     =   git1

新用户要将其公钥增加到 /keydir 目录

  • 增加、提交和 push
git add .
git commit -m "added repo2 gave access to git1"
git push
  • 本地配置近程服务器
git remote add origin gitolite@192.168.1.22:repo2.git
  • 推送本地仓库
git push origin master

权限规定示例

repo foo
    RW+                     =   alice
    -   master              =   bob
    -   refs/tags/v[0-9]    =   bob
    RW                      =   bob
    RW  refs/tags/v[0-9]    =   carol
    R                       =   dave
  • alice 对 foo 仓库有最高权限,创立、推送、删除、回退、覆写等
  • bob 对非 master 结尾的分支和非 v + 数字结尾的标签进行创立和推送
  • carol 可能创立以 v + 数字结尾的标签。
  • dave 能够克隆和fetch(拉取)

组 groups 治理

gitolite 能够通过用户组的形式进行治理

gitolite.conf相似于变量的模式治理组,并且非常灵活

@admins     =   macken steven

@engineers = macken steven wally alice

@staff = @admins @engineers

@interns    =   ashok

repo secret
    RW      =   @staff

repo foss
    RW+     =   @admins
    RW      =   @interns
  • 同时能够应用正则对分支和标签进行匹配受权
RW int$ = @interns  # @interns 组只对以“int”结尾的分支有创立和推送权限
RW eng- = @engineers    # @engineers 组只对以“eng-”结尾的分支有创立和推送权限
RW refs/tags/rc[0-9] = @engineers   # @engineers 组只对以“rc[0-9]“结尾的标签有创立和推送权限
RW+ = @admins   # @admins 组则对仓库有最高权限

遇到的报错

$ git clone gitolite@192.168.1.18:gitolite-admin
Cloning into 'gitolite-admin'...
gitolite@192.168.1.18's password:
fatal: 'gitolite-admin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

如上提醒,须要输出明码。
须要装置 openssh,并将gitolite 用户增加在 sshusers 组中,有的服务器可能是 ssh 组。

SSL(Secure Sockets Layer)安全套接字层,次要用来加密数据传输

SSH (Secure SHell)平安 shell, 实现对所有传输的数据进行加密。这样“中间人”攻击方式就不可能实现了,并且数据通过压缩,传输速度快。

openssh 依赖于 openssl,openssl 是一个安全套接字层明码库,包含次要的明码算法、罕用密钥和证书封装治理及 SSL 协定。

OpenSSH 是 SSH 协定的实现,实现过程中,须要用到密钥替换算法,对称 / 非对称加密算法,Mac 算法,随机数算法。会用到 OpenSSL 的 libcrypto 库{openssl 还有 libssl 库}。

  • https://www.zhihu.com/questio…
  • https://segmentfault.com/a/11…

计算机领域的 Cookbook 指的是实用经典案例的意思,是对一些普遍性问题的解决方案的总结和整顿。

参考

  • 应用 Gitolite 搭建轻量级的 Git 服务器
退出移动版