git - 我可以通过 http "disable"git-clone 吗?

标签 git http git-clone

我正在使用 git 来管理一个小项目。我一直在通过 SSH 执行所有事务(克隆、推送、 pull 等),但最近运行了 git-update-server-info,因为我想尝试通过 http 运行 git-clone。效果很好。凉爽的。现在我意识到任何人都可以在没有任何凭据的情况下通过 http 克隆我的存储库。我隐约知道通过 gitosis 设置 http 身份验证,但这真的不是我想要的。我宁愿完全禁用 http 克隆。

有没有办法让 git 只允许通过 ssh 进行交易?或者我可以撤消我在运行 git-update-server-info 时所做的操作以首先启用通过 http 的克隆吗?

最佳答案

要使 git 存储库通过 HTTP 传输可用,它需要由(任何)网络服务器“导出”。如果您的存储库(更准确地说是它的 .git 目录)在 Web 浏览器中从外部可见,则可以通过 HTTP 协议(protocol)匿名克隆或获取它。 git update-server-info用于生成额外的辅助帮助信息(.git/objects/info/packs.git/info/refs)以供克隆(或获取)了解可用的内容.

所以您需要做的是删除这两个文件(.git/objects/info/packs.git/info/refs) ,或者只是让它无法通过网络访问您的存储库,可能是通过更改权限以网络服务器运行的用户(通常是'nobody'或'www',或'apache') 无权访问 .git 存储库。或者配置网络服务器,使其不会导出(使其可见)您的存储库。

HTTP 协议(protocol)(​​目前)是所谓的“哑”协议(protocol),这意味着它按原样提供文件,访问控制由 [哑] 服务器完成,在本例中由您使用的 Web 服务器(或文件系统)完成.

我猜你的存储库不是由网络服务器导出的,所以你不必担心:你的存储库无法通过 HTTP 访问

请注意,Git 存储库通常具有匿名、未经身份验证的只读访问权限,并且仅在写入存储库时需要身份验证,即推送(至少对于开源项目而言)

关于git - 我可以通过 http "disable"git-clone 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348568/

相关文章:

git - 我如何判断一个提交是否是另一个提交的祖先(反之亦然)?

json - 休息 HATEOAS : How to determine and set media-type while browsing links?

git 致命 : error in object: unshallow <SHA-1>

git - git 克隆是空的?为什么会这样

git - 设置本地git存储库

Git 在更新文件时更改默认的 umask

git - 如何跟踪未跟踪的内容?

rest - http post - 如何发送授权 header ?

http - 为什么来自服务器的 HTTP 回复不指定回复对应的 GET 请求?

git - 带 repos 的文件夹的配置