从 svn 到 git (+ LDAP + 无密码更新 + 密码访问控制)

从 svn 到 git (+ LDAP + 无密码更新 + 密码访问控制)

我们有一个 SVN 设置,它有我们不喜欢的地方,也有我们喜欢的地方。我们想转移到 git,但我们不确定哪种设置适合我们。我们目前使用 SVN(带 Authz)+ Apache(带 WebDAV 和 LDAP)。

  1. 钩子更新实时站点[喜欢]
  2. 实时网站更新无需额外交互[喜欢]
  3. 实时网站更新使用存储的密码 [不喜欢]
  4. 提交需要集中密码验证[如]
  5. 从实时站点提交更改存储的凭据 [不喜欢]
  6. 提交的访问控制(每个存储库)[如]

上面的第 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 基本上被弃用了:

Ubuntu-server: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 问题,请随意尝试:

https://github.com/onepremise/SGMS

相关内容