【问题标题】:Give Read-only access to a git repository授予对 git 存储库的只读访问权限
【发布时间】:2011-04-23 22:31:41
【问题描述】:

我不确定这是应该放在这里还是超级用户(因为它似乎与两个主题都有关),所以我把它放在这里,如果它不合适,我会去超级用户询问。

无论如何,我有一个无法完全开源的 git 存储库(否则我只会把它放在 github 上并完成它),并且我有一个我可以访问 ssh 的服务器(但不是超级用户访问)到,这台服务器上已经有所有的 git 二进制文件。我需要授予某人对此 git-repo 的只读访问权限(或者至少是对某些分支的只读访问权限,尽管我认为这要困难得多)。

目前我正在使用 ssh 将我的本地 git repo 推送和轮询到此服务器。有没有办法让另一个人只读访问服务器? (我想我对我们都拥有对 repo 的写访问权限很好,尽管我不确定如何使用 unix 权限来做到这一点,因为我没有能力创建新的 unix 组,因为我没有超级用户权限)。

感谢您的帮助。

【问题讨论】:

  • 签出stackoverflow.com/questions/1662205/…——看起来最好的选择是使用git守护进程,但是ymmv。
  • 对你的情况来说可能有点矫枉过正,但你看过gitolite吗?
  • 是的...我做到了,似乎有很多不同的方法我可以在服务器上搞砸我的帐户(因为我必须使用非 root 访问方法),所以我宁愿不这样做。
  • 为什么这个问题有“cvs”标签?
  • 因为我一直认为 cvs 是一个通用的 scm,从来没有意识到它是一个特定的 scm 包。我删除了它。

标签: git permissions ssh


【解决方案1】:

您可以在 Github 上拥有私有存储库...它们每月只需花费几美元,具体取决于开发人员的数量。您可以从那里非常轻松地控制访问。

【讨论】:

  • 非常容易......很好的解决方案:)
【解决方案2】:

在 .ssh/authorized_keys 中,您可以指定在使用给定公钥登录时始终运行的命令。您可以将其设置为 git-upload-pack /path/to/repo.git 并且 git pull 可能会起作用。这种方法很可能存在不明显的安全隐患。

请参阅the sshd manual page 了解授权密钥文件的格式。

【讨论】:

  • 嗯...看起来我的 .ssh 文件夹实际上没有 authorized_keys 文件,只有 known_hosts 文件。
  • 您可以使用多个公钥创建一个。
【解决方案3】:

你想使用 git 协议。 http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html

它将对所有人公开,这可能不是你想要的,但没有人能够对 git:// 进行推送。

您可以通过仅推送您希望访问的分支来控制他们可以访问的分支。
我会通过从启用了 ssh 的私有存储库中获得一个单独的克隆来做到这一点,然后将其添加为远程。然后你可以做git push pub public-branch,那么private-branch就不能从那个位置访问了。

【讨论】:

  • 是的,我认为这是最好的(或至少是最简单的)方法。我只是用这样的方式混淆了目录的路径:projectname-small-set-of-random-symbols,我认为这没问题,因为我不是一个大目标,而且父目录不是世界可读的。虽然我有一个问题。虽然我需要一点帮助。我已经创建了分支,并将其推送到服务器(裸版本)(我如上所述将其重命名)。比我把 git-daemon-export-ok 文件放进去,然后运行 ​​git 守护进程。问题是我必须保持 git 守护进程运行才能保持...
  • ...分支公开可用,并且每当我关闭连接等时它都会停止。那么有什么方法(没有超级用户访问权限)可以将其设置为一直工作吗?谢谢
  • 尝试运行nohup git daemon &。这将使它在后台执行,并且在您断开 ssh 会话(无挂断)时不会退出。
  • 嗯...那行得通,谢谢。希望它不会有任何不良的副作用。
【解决方案4】:

您可以设置 ACL 来管理存储库的权限...Pro Git book 中有很多关于此主题的详细信息。根据我目前所读到的内容,是的,如果你愿意,你可以将它应用到选定的分支上。

【讨论】:

    【解决方案5】:

    您可以使用一种管理 git 存储库的工具,例如 gitosis(在 Python 中)或 gitolite(在 Perl 中),它们允许控制对存储库的访问(或者您可以使用您的自己的解决方案,类似于示例update-paranoid更新挂钩)。

    另一种解决方案是使用提供私有存储库的git hosting sites 之一(例如,Codaset 在免费计划中提供 1 个(半)私有存储库,磁盘空间限制为 200 MB)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-06
      • 2020-08-31
      • 2012-07-09
      • 2012-06-08
      • 2017-04-07
      • 2021-03-16
      • 1970-01-01
      • 2021-01-18
      相关资源
      最近更新 更多