我们有一个 SVN 设置,它有我们不喜欢的地方,也有我们喜欢的地方。我们想转移到 git,但我们不确定哪种设置适合我们。我们目前使用 SVN(带 Authz)+ Apache(带 WebDAV 和 LDAP)。
- 钩子更新实时站点[喜欢]
- 实时网站更新无需额外交互[喜欢]
- 实时网站更新使用存储的密码 [不喜欢]
- 提交需要集中密码验证[如]
- 从实时站点提交更改存储的凭据 [不喜欢]
- 提交的访问控制(每个存储库)[如]
上面的第 5 点一直困扰着我们。有人从实时站点提交了提交,然后钩子就断了。
我们正在考虑使用 gitosis/gitolite 来获得访问控制,但由于它们使用 ssh 密钥,因此我们不需要密码。我们还在考虑使用 git-http-backend,并使用 Apache 进行身份验证,但这样我们是否会失去访问控制?如果 Apache 需要身份验证,实时站点是否可以从钩子自动更新?我们可以以某种方式将 git-http-backend 和 gitosis/gitolite 结合起来吗?我们可以使用 git 存储 http 凭据吗?
答案1
如果您仍然喜欢使用svn up
实时网站,请svn help up
仔细阅读并注意一些选项,以便以智能方式处理凭证
Global options:
--username ARG : specify a username ARG
--password ARG : specify a password ARG
--no-auth-cache : do not cache authentication tokens
答案2
我们也考虑使用 git-http-backend,并使用 Apache 进行身份验证,但这样我们是否会失去访问控制?
不,您可以像在 SVN 中一样使用 ldap 设置身份验证。Gitweb 和 git-http-backend 像 SVN 一样使用 mod_ldap 进行身份验证。
如果 Apache 需要身份验证,实时站点是否可以通过钩子自动更新?
Git 默认自带 gitweb。它主要用作源代码库的在线浏览器。您可以在 Apache 后面使用 mod_ldap 配置它以进行身份验证,就像 git-http-backend 一样。更新在线浏览器和其中列出的存储库不需要任何钩子。所有这些都由 cgi git-http-backend 维护。
我们可以以某种方式结合 git-http-backend 和 gitosis/gitolite 吗?
gitolite 就是你想要的:
https://github.com/sitaramc/gitolite/wiki/
Gitosis 基本上被弃用了:
就个人而言,我们只使用 LDAP 进行用户授权和身份验证。如果您使用 LDAP,则实际上不需要 gitolite 进行用户管理。您可以使用任何通用 LDAP 用户管理工具来实现这一点。大多数 Linux 发行版都附带各种用于管理 openLDAP 的 UI 工具。如果您使用 Windows,只需使用 Active Directory。
默认方法(git、gitweb、git-http-backend、LDAP)和 gitolite 都支持以下内容:
- 他们不是“真正的”用户,就像在物理机箱托管上登录的用户一样(根据您使用 LDAP 的方式)
- 他们没有获得 shell 访问权限(根据您使用 LDAP 的方式)
- 控制对许多 git 存储库的访问
- 在 repo 级别控制读取访问
- 无需 root 访问权限即可安装,假设已经安装了 git 和 perl,身份验证通常使用 sshd 完成,但如果您愿意,也可以使用 httpd(这可能需要 root 访问权限)。
但是,如果您想要不使用 LDAP 进行细粒度的用户管理并符合以下标准,那么 gitolite 可能是一个更好的解决方案:
- 在服务器上使用单个 unix 用户(“真实”用户)
- 为众多 gitolite 用户提供访问权限
- 在分支/标签/文件/目录级别控制写访问,包括谁可以倒带、创建和删除分支/标签
从http://sitaramc.github.com/gitolite/index.html#gl_what
我们可以用 git 存储 http 凭证吗?
是的,您可以使用 git config 存储/分配用户:
git config --global user.name "Foo Bar"
git config --global user.email "[email protected]"
git config --global user.password "yourpassword"
git config --global github.user "yourusername"
git config --global github.password "yourpassword"
但是,如果您将它与 SSH 一起使用,请确保您使用的是 CA 证书而不是自签名证书。Git 有一个奇怪的 hack,sslVerify=false,使其与自签名证书一起工作,这似乎违背了使用证书的目的。
当您将代码从 svn 迁移到 git 时,您需要一个好的导入工具。我找不到任何适用于大型存储库的工具,所以我自己编写了一个。如果您遇到 git-svn 问题,请随意尝试: