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

我们有一个SVN的设置,有一些我们不喜欢它的事情,我们喜欢它的一些事情。 我们想要转移到git,但是我们不确定到底是什么设置对我们有用。 我们目前正在使用SVN(w / Authz)+ Apache(w / WebDAV和LDAP)。

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

上面的第5点是不断给我们填塞的。 有人从活网站提交一个提交,然后钩中断。

我们正在考虑使用gitosis / gitolite来获得访问控制,但是因为他们使用ssh密钥,所以我们不需要密码。 我们也在考虑使用git-http-backend,并使用Apache进行身份validation,但是我们是否会失去访问控制? 如果Apache需要validation,现场网站是否可以自动更新? 我们可以以某种方式将git-http-backend和gitosis / gitolite结合起来吗? 我们可以用git存储http凭证吗?

如果你仍然喜欢使用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 

我们也在考虑使用git-http-backend,并使用Apache进行身份validation,但是我们是否会失去访问控制?

不,您可以使用ldap设置身份validation,这与您使用SVN的方式几乎完全相同。 Gitweb和git-http-backend使用mod_ldap就像SVN的auth目的。

如果Apache需要validation,现场网站是否可以自动更新?

Git默认带有gitweb。 这是非常有用的为您的源代码库的在线浏览器。 你可以在Apache后面使用mod_ldap来configuration它,就像git-http-backend一样。 更新在线浏览器和存储库不需要挂钩。 这一切都由cgi,git-http-backend维护。

我们可以以某种方式将git-http-backend和gitosis / gitolite结合起来吗?

gitolite是你想要的:

https://github.com/sitaramc/gitolite/wiki/

Gitosis基本上被剥夺:

Ubuntu服务器:gitosis用户命名约定

就个人而言,我们只是使用LDAP进行用户授权和身份validation。 如果您使用的是LDAP,您并不需要gitolite来进行用户pipe理。 您可以使用任何一般的LDAP用户pipe理工具。 大多数Linux发行版都附带有用于pipe理openLDAP的各种UI工具。 如果你windows,只需使用活动目录。

默认的方法(git,gitweb,git-http-backend,LDAP)和gitolite都支持以下内容:

  • 他们不是“真正”的用户,就像login物理主机(根据你如何使用LDAP)
  • 他们不能访问shell(根据你如何使用LDAP)
  • 控制对许多git存储库的访问
  • 阅读访问控制在回购水平
  • 可以在没有root用户权限的情况下安装,假设已经安装了git和perl,authentication通常使用sshd来完成,但是如果您愿意,也可以使用httpd(这可能需要root权限)。

但是,如果你想要没有LDAP的细粒度用户pipe理,并符合以下标准,那么gitolite可能是一个更好的解决scheme:

  • 在服务器上使用一个unix用户(“真实”用户)
  • 提供访问许多gitolite用户
  • 写入权限在分支/标签/文件/目录级别进行控制,包括谁可以倒带,创build和删除分支/标签

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有这个奇怪的黑客,sslVerify = false,使其与自签名证书,哪种似乎击败使用证书的目的。

当你将代码从svn迁移到git时,你需要一个好的导入工具。 我找不到任何对大型版本库有效的东西,所以我写了自己的。 随意尝试,如果遇到与git-svn的问题:

https://github.com/onepremise/SGMS