当前位置:   article > 正文

上传到gitlab的代码怎么保存到git服务器_Gitolite - 轻量级的 Git 代码托管系统

gitolite gitlab

c1504b8bf95e7666fb609e0d37e35b20.png

今天给大家介绍一个轻量级的 Git 代码托管系统 Gitolite。

一提起 Git,大家基本上都会想到 GitHub, GitLab 这一类在线托管平台。

我们可能习惯了在这些平台上创建仓库、推拉代码、创建 Pull/Merge Request、发起 Issue。但这些特性都不是 Git 提供的,Git 能跟踪的只有代码信息。这类平台是在 Git 之上重新构建了一套 Web 系统来保存诸如用户、Pull/Merge Request、Issue 等信息的。

功能越强大,系统越复杂。

如果你只是想简单控制一下用户权限,则不需要这么复杂的系统,gitolite 就够用。我也是偶然发现 gitolite 的,很喜欢这种轻量级的设计。但我没想到的是好多著名的开源项目也在使用 gitolite:

  • linux 内核,参考这里
  • gentoo linux 发行版,参考这里
  • fedora linux 发行版,参考这里

gitolite 的原理很简单。首先,它提供了一个 gitolite-shell。当你使用 ssh 访问 gitolite 时 ssh 服务会启动 gitolite-shell。这个脚本会检查当前用户是否有权限访问对应的仓库。如果用户通过 git push 修改了仓库内容,则会触发 gitolite 预先配置 git hook,这些 hook 会执行创建仓库、添加用户之类的操作。

gitolite 的本质是几个 prel 脚本加一些纯文本配置文件,没有什么魔法。


简单说一下 gitolite 的安装与使用。

先安装好 git 和 openssh,再创建一个 git 系统用户:

  1. # -m 表示创建对应的 /home/git 目录
  2. $ userad -m git

把你的 ssh 公钥保存成 yourname.pub 备用。你可以把这个 yourname 改成你喜欢的名字。

这个时候,基础准备工作就完成了,开始安装:

  1. $ su - git
  2. $ git clone https://github.com/sitaramc/gitolite
  3. $ ./gitolite/src/gitolite setup -pk /tmp/yourname.pub
  4. Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
  5. Initialized empty Git repository in /home/git/repositories/testing.git/
  6. WARNING: /home/git/.ssh missing; creating a new one
  7. (this is normal on a brand new install)
  8. WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
  9. (this is normal on a brand new install)

这里的 -pk 选项是指定管理员的公钥和用户名。git 跟 gitolite 服务器通信用的是 git 这个真正的系统用户,而 gitolite 控制仓库权限则是使用自己的虚拟用户。这里的 yourname 就是虚拟用户。

好了,到此安装完毕。让我们来体验一下。


gitolite 默认为大家创建了一个开放的 testing 仓库。

  1. $ git clone git@yourhost:testing.git
  2. Cloning into 'testing'...
  3. warning: You appear to have cloned an empty repository.

如果你想克隆一个不存在的仓库,则会报错:

  1. $ git clone git@yourhost:foo.git
  2. Cloning into 'foo'...
  3. FATAL: R any foo yourname DENIED by fallthru
  4. (or you mis-spelled the reponame)
  5. fatal: Could not read from remote repository.
  6. Please make sure you have the correct access rights
  7. and the repository exists.

那怎样添加新仓库呢?这就得用到 gitolite-admin 这个特殊的仓库了,先克隆下来,其目录结构如下:

  1. tree .
  2. .
  3. ├── conf
  4. │ └── gitolite.conf
  5. └── keydir
  6. └── yourname.pub
  7. 2 directories, 2 files

keydir 保存用户的公钥,一个用户对应一个文件。conf/gitolite.conf 保存用户权限。

  1. $ cat conf/gitolite.conf
  2. repo gitolite-admin
  3. RW+ = yourname
  4. repo testing
  5. RW+ = @all

这里配置了两个仓库,gitolite-admin 仓库只有 yourname 用户可以读写。testing 仓库的读写权限则授予了 @all,不用猜就知道是授予所有人可以读写的意思。

如是想添加一个新仓库,则添加一条 repo 配置就行,比如:

  1. $ cat conf/gitolite.conf
  2. repo gitolite-admin
  3. RW+ = yourname
  4. repo testing
  5. RW+ = @all
  6. repo foo
  7. RW+ = @all

改好之后提交并推送到远端,gitolite 就会自动创建 foo 仓库。

  1. $ git push
  2. Enumerating objects: 7, done.
  3. Counting objects: 100% (7/7), done.
  4. Delta compression using up to 4 threads
  5. Compressing objects: 100% (3/3), done.
  6. Writing objects: 100% (4/4), 378 bytes | 378.00 KiB/s, done.
  7. Total 4 (delta 0), reused 0 (delta 0)
  8. remote: Initialized empty Git repository in /home/git/repositories/foo.git/
  9. To 192.168.56.101:gitolite-admin.git
  10. c8a8aa8..d36e1a1 master -> master

显然,gitolite 是利用 git 的 hook 机制自动创建 foo 仓库的。

加人就更简单。如果要添加的用户名是 hello,则只需将将 hello 的公钥保存到 keydir/hello.pub 并推到远端就可以了。就个是候你打开服务端的 /home/git/.ssh/authorized_keys 会发现:

  1. # gitolite start
  2. command="/home/git/gitolite/src/gitolite-shell hello",...
  3. command="/home/git/gitolite/src/gitolite-shell yourname",...
  4. # gitolite end

hello 的用户名已经配置好了。

gitolite 使用 git 来管理 git 的权限,是不是有点自举的意思。

gitolite 还支持仓库分组、用户分组、分支/tag权限控制等高级功能,大家可以移步官方文档,我就不赘述了。


最后总结一下。gitolite 是一个非常轻量级的 git 代码托管方案,只能控制权限,没有 Pull Request/Issue 等功能,有好多大型开源项目在使用。同时,gitolite 也是很好的学习 git 相关知识的平台。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1008710
推荐阅读
相关标签
  

闽ICP备14008679号