gitosis和gitolite有何区别?

141

我希望安装 Git 服务器来与我的团队共享项目。我不想在服务器上为每个需要 Git 访问权限的开发人员创建具有 SSH 访问权限的用户帐户。 看起来有两个并行的解决方案可以解决这个问题:Gitosis 和 Gitolite。

我找不到它们之间的比较。它们之间的主要区别是什么?还有其他类似的解决方案吗?

5个回答

193
我正在寻找一种安装git服务器以与团队共享项目的方法。
你可以直接使用git。要拥有一个git服务器,远程服务器上所需的唯一事物就是git。如果您不需要细粒度权限(与您的团队分享表明这是可能的),或任何其他功能,则不需要gitolite或类似工具。
无需安装即可解决问题。如果遠程服務器上已安裝了Git,您現在可以立即執行您所要求的操作,而無需進行其他任何操作。
ssh [user@]server
cd repos/are/here/
mkdir project.git
cd project.git
git init --bare

本地:

cd projects/are/here/project
git remote add origin [user@]server:repos/are/here/project.git
git push -u origin master

建立一个Git服务器很容易。

如果你想使用专用的Git用户进行操作,设置Git服务器文档很简短——因为它确实很容易实现。

总体而言:

  • 安装Git
  • 创建一个名为“git”的用户
  • 将您和您团队的公钥添加到“git”用户的.ssh/authorized_keys文件中
  • 将“git”用户的shell更改为git-shell
  • 在服务器上创建存储库
  • 开始使用 git@yourserver.com 进行拉取/推送操作

使用专用Git用户和不使用的唯一区别是,如果您设置了Git用户使用git-shell,它将不允许自己执行其他任何操作。但就作为Git服务器而言,它与无需安装的解决方案完全相同。


13
安装GitLab+Gitolite这个庞然大物后,如果您不需要对项目进行精细控制等操作,那么使用它是一个不错的选择。 - Andrew T Finnell
2
@wsams:git push -u origin master,然后你可以使用 git push。我更喜欢gito*,因为在我看来,访问存储库的人不应该关心它在远程系统上的绝对路径。 - ThiefMaster
8
假设你的意思是将仓库放在/home/git/目录下,那么访问项目的URL为git@server:project.git - AD7six
1
@wsams 阅读答案中的这一部分:“将git用户的shell更改为git-shell”。 - fabspro
这是一个普通用户 - 我不想使用 git-shell @fabspro。 - wsams
显示剩余2条评论

142

主要区别在于gitosis已经过时,不再得到积极维护。

Gitolite则更加功能完善,并刚刚发布了第三个版本

它最有趣的功能是虚拟引用(简称VREF),它允许您声明尽可能多的更新钩子,从而可以通过以下方式限制推送:

  • 目录/文件名:
    假设你不希望初级开发人员对Makefile进行更改,因为它相当复杂:
    - VREF/NAME/Makefile = @junior-devs

  • 新文件数量:
    假设你不希望初级开发人员在每次提交中添加超过9个文件,因为你希望他们进行小的提交:
    - VREF/COUNT/9/NEWFILES = @junior-devs

  • 高级文件类型检测:
    有时文件具有标准扩展名(不能被 'gitignore'),但实际上是自动生成的。下面是一种捕获它的方法:
    - VREF/FILETYPE/AUTOGENERATED = @all
    请查看src/VREF/FILETETYPE以查看检测机制。

  • 检查作者电子邮件:
    有些人想要确保“你只能推送自己的提交”。
    - VREF/EMAIL-CHECK = @all
    请查看src/VREF/EMAIL-CHECK

  • 提交投票:
    关于提交投票的基本实现令人惊讶地简单:
    - VREF/EMAIL-CHECK = @all.
    # 需要2个投票才能推送主分支,但可信开发人员不受此限制
    # RW+ VREF/VOTES/2/master = @trusted-devs
    # - VREF/VOTES/2/master = @devs
    请查看src/VREF/VOTES以获取实现。

  • 等等...


3
我已经使用Gitolite三年多了。从来没有遇到过任何问题。我们的生产和分期服务器只能读取它们需要的仓库。如果你已经掌握Unix和Git,那么设置它就很容易 :) 然后,与其他开发团队分享项目也很简单。 - complistic
Gitolite文档包括与替代方案的比较:http://gitolite.com/gitolite/gitolite.html#alt - Quinn Comendant

15

顺便提一下,您也可以使用Gerrit来满足您的需求:

Gerrit代码审查

起初看起来Gerrit仅用于代码审查,但实际上您还可以使用它来管理用户并为他们定义良好的权限。您可以通过访问控制绕过代码审查,仅用于管理项目和ssh密钥。 Gerrit具有非常强大的访问控制机制:

Gerrit访问控制

您可以限制推送任何分支、标签或文档中定义的任何内容。


8

如果您想要更快速和简单的解决方案,只需使用git daemon并进行点对点共享。这篇文章介绍了如何实现。

编辑:我知道这并没有严格回答楼主的问题。我将其放在这里,主要是为了像我一样的人,他们在寻找一种快速而简单的方式来共享代码,直到企业github账户设置好。


2
我已经折腾了一段时间,想要使用LDAP访问、细粒度访问控制等功能来搭建一个Git服务器...发现了一个启示:使用Gitlab
  • git仓库
  • 细粒度访问控制(据我所知,Gitlab在内部使用gitolite)
如果你想要快速安装的方法:使用bitnami installer

是的,但是GitLab(与gitlab-shell一起)失去了您可以轻松设置的所有VREF钩子,而很多人希望它们回来:https://github.com/gitlabhq/gitlab-shell/issues/14和https://github.com/gitlabhq/gitlab-shell/pull/85 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接