我希望安装 Git 服务器来与我的团队共享项目。我不想在服务器上为每个需要 Git 访问权限的开发人员创建具有 SSH 访问权限的用户帐户。 看起来有两个并行的解决方案可以解决这个问题:Gitosis 和 Gitolite。
我找不到它们之间的比较。它们之间的主要区别是什么?还有其他类似的解决方案吗?
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服务器文档很简短——因为它确实很容易实现。
总体而言:
.ssh/authorized_keys
文件中git-shell
使用专用Git用户和不使用的唯一区别是,如果您设置了Git用户使用git-shell
,它将不允许自己执行其他任何操作。但就作为Git服务器而言,它与无需安装的解决方案完全相同。
主要区别在于gitosis已经过时,不再得到积极维护。
它最有趣的功能是虚拟引用(简称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
以获取实现。
等等...
顺便提一下,您也可以使用Gerrit来满足您的需求:
起初看起来Gerrit仅用于代码审查,但实际上您还可以使用它来管理用户并为他们定义良好的权限。您可以通过访问控制绕过代码审查,仅用于管理项目和ssh密钥。 Gerrit具有非常强大的访问控制机制:
您可以限制推送任何分支、标签或文档中定义的任何内容。
如果您想要更快速和简单的解决方案,只需使用git daemon并进行点对点共享。这篇文章介绍了如何实现。
编辑:我知道这并没有严格回答楼主的问题。我将其放在这里,主要是为了像我一样的人,他们在寻找一种快速而简单的方式来共享代码,直到企业github账户设置好。
git push -u origin master
,然后你可以使用git push
。我更喜欢gito*,因为在我看来,访问存储库的人不应该关心它在远程系统上的绝对路径。 - ThiefMaster/home/git/
目录下,那么访问项目的URL为git@server:project.git
。 - AD7sixgit-shell
@fabspro。 - wsams