Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以吗;禁用";http上的git克隆?_Git_Http_Git Clone - Fatal编程技术网

我可以吗;禁用";http上的git克隆?

我可以吗;禁用";http上的git克隆?,git,http,git-clone,Git,Http,Git Clone,我正在使用git管理一个小项目。我一直在通过SSH执行所有事务(克隆、推送、拉取等),但最近运行了git update server info,因为我想尝试通过http运行git clone。效果很好。酷。现在我意识到,任何人都可以通过http克隆我的存储库,而无需任何凭据。我隐约知道通过gitosis设置http身份验证,但这并不是我想要的。我更愿意完全禁用http克隆 有没有办法让git只允许通过ssh进行事务?或者我可以撤销我在运行git update server info以启用http

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


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

删除
.git/objects/info/packs
.git/info/refs

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

因此,您需要做的是删除这两个文件(
.git/objects/info/packs
.git/info/refs
,或者只是通过更改权限使您的存储库不可通过web访问(通常是“nobody”或“www”或“apache”)无法访问
.git
存储库。或者配置web服务器,使其不会导出(显示)您的存储库

HTTP协议(目前)被称为“dumb”协议,这意味着它按原样提供文件,访问控制由[dumb]服务器完成,在本例中由您使用的web服务器(或文件系统)完成

我猜您的存储库不是由web服务器导出的,所以您无需担心:您的存储库无法通过HTTP访问

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

有没有办法让git只允许通过ssh进行事务

6到8年后,Git 2.12(2017年第1季度)将提出允许或禁用Git使用的协议的配置

 git config protocol.http.allow never
 git config protocol.https.allow never
 git config protocol.git.allow never
 git config protocol.file.allow never

 git config protocol.ssh.allow always
参见(2016年12月14日)作者。
参见,,(2016年12月14日)作者。
(于2016年12月27日被合并)

这允许更细粒度地控制通过新配置启用克隆/获取/推送期间允许传输的协议 机制

现在包括:

protocol.allow
如果已设置,则为没有明确策略的所有协议提供用户定义的默认策略(
protocol..allow
)。
默认情况下,如果未设置

  • 已知的安全协议(http、https、git、ssh、file)的默认策略为
    始终
  • 已知危险协议(ext)的默认策略为
    从不
    ,并且
  • 所有其他协议都有一个默认策略
    user
支持的政策:

  • 始终
    -协议始终可以使用
  • 从不
    -协议永远无法使用
  • user
    -只有当来自用户的
    GIT\u protocol\u未设置或值为1时,才能使用协议。
    当您希望协议可由用户直接使用,但不希望在没有用户输入的情况下执行克隆/获取/推送命令的命令(例如递归子模块初始化)使用该协议时,应使用此策略

我的.git/objects/info目录已为空,我仍有相同的问题。我的.git/objects/info目录已为空,我仍有相同的问题。使用git 2.12(2017年第1季度),您将有
git配置协议..允许…
。看,我不会改变答案,但我非常感谢你添加此信息!很高兴知道。@georgemandi没问题。无论如何,它还没有发布。