3

以下描述了为了重现观察到的行为而要执行的 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.

根据Wikipedia,带有三斜杠的文件 url 表示本地资源。

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

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

4

1 回答 1

2

来自 git clone 手册:

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

  • /path/to/repo.git/
  • 文件:///路径/到/repo.git/

这两种语法大多是等价的,除了前者暗示 --local 选项。

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

于 2012-01-17T17:34:45.877 回答