我遇到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'.
有人可以告诉我,/DIRECTORY
和file:///DIRECTORY
之间的区别是什么?为什么我会在这里得到不同的结果?
答案 0 :(得分:1)
如果您在网址开头明确指定
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客户端。