Windows 目标为网络驱动器时git克隆失败
在MINGW32 shell中使用git在Windows上克隆git存储库时遇到问题。基本症状是,当目标位于本地磁盘上时,克隆此特定存储库可以正常工作,但当克隆目标位于网络驱动器上时,相同的命令失败。以下是本地克隆命令(修改了repo名称): 我还尝试通过添加Windows 目标为网络驱动器时git克隆失败,windows,git,networking,Windows,Git,Networking,在MINGW32 shell中使用git在Windows上克隆git存储库时遇到问题。基本症状是,当目标位于本地磁盘上时,克隆此特定存储库可以正常工作,但当克隆目标位于网络驱动器上时,相同的命令失败。以下是本地克隆命令(修改了repo名称): 我还尝试通过添加git clone-c transfer.fsckObjects=1让git验证对象,但这并没有改变症状 正如前面提到的,这个问题似乎是特定于存储库的。以下是一些其他数据点: 代码托管服务器(它与目前提到的所有其他机器是分开的)有许多存储
git clone-c transfer.fsckObjects=1
让git验证对象,但这并没有改变症状
正如前面提到的,这个问题似乎是特定于存储库的。以下是一些其他数据点:
- 代码托管服务器(它与目前提到的所有其他机器是分开的)有许多存储库,我已经将其他几个存储库克隆到了网络上,没有任何问题
- 无论是制作常规克隆还是裸克隆,都会出现此问题
- 导致失败的对象似乎没有任何特殊之处(压缩大小为中间-727字节)
- 如果我在git解包时连接ProcMon并断开连接,进程仍然会失败,通常是在另一个对象上
- 根据目的地的位置,同事也会经历相同的成功/失败模式
- 如果从本地目录执行git,并将目标目录指定为UNC路径,则该过程仍然失败
$ systeminfo
<snip>
OS Name: Microsoft Windows 8.1 Pro
OS Version: 6.3.9600 N/A Build 9600
<snip>
$ uname -a
MINGW32_NT-6.3-WOW LT-DR 2.5.0(0.295/5/3) 2016-03-31 18:26 i686 Msys
$ git --version
git version 2.8.3.windows.1
$systeminfo
操作系统名称:Microsoft Windows 8.1 Pro
操作系统版本:6.3.9600不适用于内部版本9600
$uname-a
MINGW32_NT-6.3-WOW LT-DR 2.5.0(0.295/5/3)2016-03-31 18:26 i686 Msys
$git—版本
git版本2.8.3.windows.1
托管有问题的目标目录的服务器运行Windows server 2008。代码服务器正在运行gitlab ce 8.9.3。这就是“promissor remote的概念 这个概念与
transfer.fsckobjects
配置一起使用:它告诉“git fetch
”验证接收包中对象的数据和连接状态;执行此检查的代码已被告知有关狭义克隆的约定,即缺少可从来自promissor remote的包中的对象访问的对象是正常的
在Git2.29(2020年第4季度)之前,当使用promissor remote将许多对象打包到存储库中时,一个接一个地从promissor remote惰性地获取丢失的对象可能效率低下
代码现在尝试批量获取所有缺失的对象(显然,对于懒惰地获取树对象的懒惰克隆来说,这不起作用,因为在了解哪些树缺失之前,您甚至无法枚举缺失的blob)
这可能有助于从网络驱动器进行git克隆
参见(2020年7月20日)by.(于2020年8月4日合并) :预取要打包的对象 签字人:Jonathan Tan 当发现要打包的对象丢失时,一批预取所有要打包的对象
在Git2.29(2020年第4季度)中,当使用packfile URI功能时,“()工作得更好 参见(2020年8月17日)by.
(于2020年9月3日合并) :使packfile URI与
transfer.fsckobjects一起工作
签字人:Jonathan Tan
当使用packfile URI和传输.fsckobjects=1
进行获取时,在调用索引包时,使用--fsck objects
而不是--strict
标志,以便不检查链接,只检查对象
这是因为预期的链接不完整。(无论是否设置了transfer.fsckobjects
,下载所有包后都将进行后续连接检查。)
这类似于(“fetch pack
:不要检查部分fetch的链接”,2018-03-15,Git v2.17.0-rc1-),但用于packfile URI,而不是部分克隆
通过Git2.31(2021年第1季度),我们了解了更多关于使用packfile URI特性下载的packfile的信息
参见(2021年1月20日)作者
(于2021年2月3日合并)
:澄清作为URI发送的打包文件的内容
签字人:Jonathan Tan
请澄清,当使用packfile uri功能时,客户端不应假定下载的额外packfile仅包含单个blob,而应支持包含所有类型的多个对象的packfile
technical/packfile uri
现在包含在其中:
blob被排除,替换为uri。如下文“未来工作”所述
服务器将来可以发展为支持排除其他对象(或
服务器的实现可以支持(不包括其他对象)
不需要更改协议,因此客户端不应该期望packfiles
以这种方式下载的内容仅包含单个blob
Git 2.33(2021年第3季度)增强了对打包文件uri(用于获取,包括OP中的网络驱动器路径)的uploadpack.blobPackfileUri
的描述:
参见(2021年5月13日)作者
(于2021年6月10日合并)
:修复blobPackfileUri描述
签字人:滕龙
审核人:谭国强
修复packfile-uri.txt中的“uploadpack.blobPackfileUri”描述,正确的格式也可以在t5702中看到
technical/packfile uri
现在包含在其中:
要由一个或多个uploadpack.blobPackfileUri=
条目配置的服务器
每当要创建的对象列表
sent被组装,所有这样的blob被排除,替换为uri
如下面“未来工作”中所述,服务器可以在未来发展,以支持排除其他对象(或者可以使服务器的其他实现支持排除其他对象),而无需更改协议,因此客户端不应该期望以这种方式下载的包文件只包含单个blob
drichards@LT-DR MINGW32 /s/temp
$ git clone -v --progress <repo> gitrepo
Cloning into 'gitrepo'...
POST git-upload-pack (250 bytes)
remote: Counting objects: 82, done.
remote: Compressing objects: 100% (71/71), done.
fatal: failed to read object 9b081a422a5f7d06ff5a2cb4889d26b4f18c6181: Permission denied
fatal: unpack-objects failed
11:07:48.262535 run-command.c:336 trace: run_command: 'unpack-objects' '--pack_header=2,82'
11:07:48.324578 git.c:350 trace: built-in: git 'unpack-objects' '--pack_header=2,82'
fatal: failed to read object 9b081a422a5f7d06ff5a2cb4889d26b4f18c6181: Permission denied
fatal: unpack-objects failed
$ systeminfo
<snip>
OS Name: Microsoft Windows 8.1 Pro
OS Version: 6.3.9600 N/A Build 9600
<snip>
$ uname -a
MINGW32_NT-6.3-WOW LT-DR 2.5.0(0.295/5/3) 2016-03-31 18:26 i686 Msys
$ git --version
git version 2.8.3.windows.1