`git clone/DIRECTORY`vs`git clonefile:///DIRECTORY`

`git clone/DIRECTORY`vs`git clonefile:///DIRECTORY`,git,shell,Git,Shell,我的git clone命令有问题。当我跑的时候 $git clone/SOURCE\u目录/TARGET\u目录 一切都很好,我很高兴 在/TARGET\u目录/.Git中初始化了空的Git存储库/ 当我运行此命令时(仅添加了文件://) $git克隆file:///SOURCE_DIRECTORY /目标目录 我明白了 在/TARGET\u目录/.Git中初始化了空的Git存储库/ 远程:计数对象:737,完成。 远程:压缩对象:100%(189/189),完成。 远程:总计737(增量

我的git clone命令有问题。当我跑的时候

$git clone/SOURCE\u目录/TARGET\u目录
一切都很好,我很高兴

在/TARGET\u目录/.Git中初始化了空的Git存储库/
当我运行此命令时(仅添加了
文件://

$git克隆file:///SOURCE_DIRECTORY /目标目录
我明白了

在/TARGET\u目录/.Git中初始化了空的Git存储库/
远程:计数对象:737,完成。
远程:压缩对象:100%(189/189),完成。
远程:总计737(增量264),重复使用725(增量256)
接收对象:100%(737/737),68.25千磅,完成。
解析增量:100%(264/264),完成。
错误:尝试使用不存在的对象XXXXXXXX写入引用头
致命:无法更新引用“HEAD”。
谁能告诉我,
/DIRECTORY
file:///DIRECTORY
为什么我会在这里得到不同的结果?

从链接到注释为:

如果在URL的开头显式指定
file://
,则Git的操作略有不同。如果只指定路径,Git会尝试使用硬链接或直接复制所需的文件。如果指定
file://
,Git将启动它通常用于通过网络传输数据的进程,而这种网络传输数据的效率通常要低得多。指定
文件://
前缀的主要原因是,如果您希望存储库的一个干净副本,而不包含无关的引用或对象,通常是在从其他版本控制系统或类似系统导入之后

因此,您看到的额外输出表明Git正在旋转其网络堆栈以传输数据,而不是像第一个示例中那样进行本地复制。因此,除非您有理由使用网络堆栈传输数据,否则最好删除
文件://

至于错误:

错误:试图用不存在的对象XXXXXXXX写入ref HEAD
致命:无法更新引用“HEAD”。
这些答案表明,这可能是由于使用较旧版本的Git造成的:


因此,请尝试升级您的Git客户端。

它是在特定的目录名上还是在任何目录名上?我没有尝试“任何”目录,但它可以在我尝试过的任何目录上复制(例如,
/var/lib/jenkins/jobs/project/workspace
)请参阅
本地协议
at
https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols
Thx获取详细答案。我的问题是,我不能“删除”
文件://
,因为此操作发生在Maven命令内部,我无法轻松影响它。但现在我知道下一步该怎么做了,我将尝试一个新的Git版本。更新Git成功了——我仍然想知道为什么两天前一切正常,然后突然“停止”工作……是的,我不知道是什么导致它突然崩溃。很高兴你修好了!