为什么"git clone"在传递本地 file:/// URL 时打包对象数据库?



下面描述了要执行的bash命令,以便重现观察到的行为。尽管这些已经通过msysgit运行,但我怀疑在*nix环境中的结果应该是类似的。

设置源存储库

$ mkdir main && cd main
$ git init .
Initialized empty Git repository in d:/temp/main/.git/
$ echo a > a.txt
$ git add . && git commit -m "Initial commit"
[master (root-commit) e1ec355] Initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 a.txt

使用本地文件克隆源存储库:///url

$ cd ..
$ mkdir clonefromfileurl && cd clonefromfileurl
$ git clone file:///d:/temp/main
Cloning into 'main'...
remote: Counting objects: 3, done.
Receiving objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)

使用本地文件路径克隆源存储库

$ cd ..
$ mkdir clonefrompath && cd clonefrompath
$ git clone /d:/temp/main
Cloning into 'main'...
done.

根据维基百科的说法,带有三斜杠的文件url意味着本地资源。

但是,当通过本地file:/// url进行克隆时,对象数据库会在传输(复制?)之前打包。当源存储库的位置表示为本地路径时,情况并非如此。

考虑到源和目标回购都托管在localhost上,为什么git的行为方式不同?

来自git克隆手册:

对于本地存储库(也由git原生支持),可以使用以下语法:

  • /路径/to/repo.git/
  • file:///path/to/repo.git/

这两种语法基本上是等价的,只是前者暗示了--local选项。

因此,当您使用file:///时,并不意味着必须显式添加--local克隆。

相关内容

  • 没有找到相关文章

最新更新