`git clone / DIRECTORY`与`git clone file:/// DIRECTORY`

时间:2016-08-18 17:09:25

标签: git shell

我遇到git clone命令的问题。我跑的时候

$ git clone /SOURCE_DIRECTORY /TARGET_DIRECTORY

一切正常,我得到了

Initialized empty Git repository in /TARGET_DIRECTORY/.git/

当我运行此命令时(仅添加file://

$ git clone file:///SOURCE_DIRECTORY /TARGET_DIRECTORY

我得到了

Initialized empty Git repository in /TARGET_DIRECTORY/.git/
remote: Counting objects: 737, done.
remote: Compressing objects: 100% (189/189), done.
remote: Total 737 (delta 264), reused 725 (delta 256)
Receiving objects: 100% (737/737), 68.25 KiB, done.
Resolving deltas: 100% (264/264), done.
error: Trying to write ref HEAD with nonexistant object XXXXXXXX
fatal: Cannot update the ref 'HEAD'.

有人可以告诉我,/DIRECTORYfile:///DIRECTORY之间的区别是什么?为什么我会在这里得到不同的结果?

1 个答案:

答案 0 :(得分:1)

Git Docs注释的@ElpieKay链接:

  

如果您在网址开头明确指定file://,则Git的运作方式略有不同。如果您只是指定路径,Git会尝试使用硬链接或直接复制所需的文件。如果指定file://,Git会启动它通常用于通过网络传输数据的进程,这通常是传输数据的效率低得多的方法。指定file://前缀的主要原因是,如果您想要使用无关的引用或对象遗漏存储库的干净副本 - 通常是在从另一个版本控制系统或类似的东西导入之后

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

至于错误:

error: Trying to write ref HEAD with nonexistant object XXXXXXXX
fatal: Cannot update the ref 'HEAD'.

这些答案表明这可能是因为使用旧版本的Git:

所以尝试升级你的Git客户端。