gitosis与甘露石?[关闭]


139

我正在寻找安装git服务器与我的团队共享项目。我不想为每个需要git访问权限的开发人员在具有SSH访问权限的服务器上创建一个用户帐户。似乎有两个并发解决方案可以解决此问题:gitosis和gitolite。

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

Answers:


191

我正在寻找安装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 pull / push到git@yourserver.com

使用专用的git用户和不使用专用的git用户之间的唯一区别是,如果您将git用户设置为使用git-shell它,它将不允许自己执行任何其他操作。在充当git服务器方面,它与免安装解决方案相同


13
在安装了名为GitLab + Gitolite的野兽之后,如果您不需要对项目等进行精细控制,则可以采用这种方法。
Andrew T Finnell,2012年

感谢您的回答!实际上,当我说我不想为每个帐户创建用户帐户时,我还应该提到我不希望git用户通过ssh访问服务器外壳。通过您的解决方案,我认为他们将可以通过“ git”用户访问shell,对吗?
greydet 2012年

2
@wsams:之后git push -u origin master可以使用git push。我更喜欢gito *,因为我认为没有人可以访问回购协议,而不必关心远程系统上的绝对路径。
ThiefMaster 2012年

8
如果您将repos放在/home/git/URL中以访问项目,则@ThiefMaster会对您的意思大加猜测git@server:project.git
2012年

1
@wsams阅读答案的这一部分“将git用户的shell更改为git-shell”。
fabspro

142

主要区别在于,现在已经不再使用gitosis,并且不再积极地对其进行维护。

Gitolite 功能更加完善,并且刚刚发布了其第三版

它最有趣的功能是虚拟参考(Virtual Reference,简称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 votes required to push master, but trusted devs don't have this restriction
    # RW+ VREF/VOTES/2/master = @trusted-devs
    # - VREF/VOTES/2/master = @devs
    有关src/VREF/VOTES实施,请参见。

  • 等等...


3
我已经使用Gitolite超过3年了。从来没有任何问题。我的生产和登台服务器具有对仓库的只读访问权限。与其他开发团队共享项目很容易。如果您已经知道unix和git,也很容易设置:)
全面的

Gitolite文档包括对替代品的比较:gitolite.com/gitolite/gitolite.html#alt
Quinn Comendant 2015年

15

只是一个旁注。您也可以根据需要使用Gerrit

Gerrit代码审查

首先,似乎Gerrit用于代码审查,但实际上您也可以将其用于管理用户并为他们提供良好的定义权限。您可以绕过代码审查(通过访问控制),而仅将其用于管理项目和ssh键。Gerrit具有非常强大的访问控制机制:

Gerrit访问控制

您可以限制推送任何分支,标签或您可以想象的在访问控制文档中定义的任何内容。


8

对于更快,更脏的解决方案,只需使用git daemon并进行对等。这是有关执行此操作的文章

编辑:我知道这不能严格回答OP的问题。我将其放在这里的主要对象是像我这样的人,他们在寻找一种卑鄙而肮脏的方式共享代码直到建立企业github帐户之前遇到了这种情况。


2

我一直在弄乱一段时间,以使git服务器可以使用LDAP访问,细粒度的访问控制等。发现一个启示:使用Gitlab

  • git存储库
  • 细粒度的访问(afaik gitlab在引擎盖下使用乙醇钠矿)

如果您想使用快速安装方法,请使用bitnami安装程序


是的,但是GitLab(带有gitlab-shell)丢失了您可以使用Gitolite轻松设置的所有VREF挂钩。很多人希望他们回来:github.com/gitlabhq/gitlab-shell/issues/14github.com/gitlabhq/gitlab-shell/pull/85
VonC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.