给git仓库只读权限

7
我不确定这个问题应该放在这里还是放在superuser上(因为它似乎涉及到两个主题),所以我把它放在这里,如果不合适,我会去superuser上问。
无论如何,我有一个git仓库不能完全开源(否则我就把它放在github上了),我有一个服务器可以通过ssh访问(但没有超级用户权限),这个服务器已经安装了所有的git二进制文件。我需要给某个人只读访问权限(或者至少只读访问某些分支,虽然我想那可能更难)。
目前,我正在使用ssh将我的本地git仓库推送和轮询到这个服务器上。有没有办法让另一个人只读访问这个服务器?(我想我可以接受我们两个都有写入仓库的权限,尽管我不确定如何使用unix权限来实现这一点,因为我没有超级用户权限,无法创建新的unix组)。
谢谢你的帮助。

请查看https://dev59.com/93I-5IYBdhLWcg3w0L_x 看起来最好的选择是使用git守护进程,但可能会有所不同。 - cbeer
2
也许对你的情况来说有点过于复杂,但是你看过gitolite了吗?gitolite - bstpierre
是的...我试过了,似乎有很多不同的方式可以在服务器上搞砸我的账户(因为我必须使用非root访问方法),所以我宁愿不这样做。 - Leif Andersen
为什么这个问题有“cvs”标签? - Andrew Grimm
因为我一直认为cvs是一个通用的版本控制系统,从未意识到它是一个特定的版本控制软件包。所以我将其删除了。 - Leif Andersen
CVS的通用变体是VCS。 - Steven Kramer
5个回答

4
您想使用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 daemon。问题是我必须保持git daemon运行才能保持... - Leif Andersen
这个分支是公开可用的,但只要我关闭连接,它就停止了。那么有没有办法(不需要超级用户权限)来让它一直工作呢?谢谢。 - Leif Andersen
2
尝试运行nohup git daemon&。这将使它在后台执行,当您断开ssh会话时,它不会退出(没有挂起)。 - jonescb
嗯...可以了,谢谢。希望它不会有任何负面影响。 - Leif Andersen

1
在 .ssh/authorized_keys 文件中,您可以指定一个命令,当使用给定的公钥登录时始终运行该命令。您可能可以将其设置为 git-upload-pack /path/to/repo.git,这样 git pull 可能就能工作了。但是,这种方法可能存在非明显的安全风险。
请参阅 sshd 手册页 以获取 authorized_keys 文件的格式。

哦...看起来我的 .ssh 文件夹实际上没有 authorized_keys文件,只有一个 known_hosts 文件。 - Leif Andersen
您可以创建一个带有多个公钥的密钥。 - Jouni K. Seppänen

1

您可以设置ACL来管理您的存储库上的权限...关于这个主题有很多细节在Pro Git book中。根据我目前所读的内容,如果您愿意,可以将其应用于选择的分支。


1
你可以使用其中之一的git仓库管理工具,例如gitosis(用Python编写)或gitolite(用Perl编写),它们允许控制对仓库的访问权限(或者您可以使用自己的解决方案,类似于示例update-paranoid更新挂钩)。
另一个解决方案是使用git托管网站之一提供的私有仓库(例如Codaset在免费计划中提供1个半私有仓库,带有200 MB的磁盘空间限制)。

0
您可以在Github上拥有私人代码库...这只需要支付每月几美元的费用,费用取决于开发者的数量。您可以非常轻松地从那里控制访问权限。

非常容易...很棒的解决方案 :) - Chris Allinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接