本地目录的浅克隆需要file://
,如:git clone: warning: --depth is ignored in local clones; use file:// instead
但是如何使用相对路径?
例如:如果我在当前目录中有一个回购myrepo
,那么我会这样做:
git clone --depth 1 file://mymodule mymodule2
然后失败了:
Cloning into 'mymodule2'...
fatal: No path specified. See 'man git-pull' for valid url syntax
如果我尝试:
git clone --depth 1 file://./mymodule mymodule2
失败了:
Cloning into 'mymodule2'...
fatal: '/./mymodule' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我能找到的唯一解决方法是将其转换为以/
开头的绝对路径:
git clone --depth 1 "file://$(pwd)/mymodule" mymodule2
这种行为是否有深刻的原因,或者它只是马车?
也许文件URI根本不支持相对路径:
git 2.14.1。
答案 0 :(得分:0)
浅浅地克隆本地存储库既没有必要,也没有好处。只需git clone ./relative/path
,您就可以使用了。
我假设您想进行浅拷贝,因为您想节省磁盘空间并节省时间,但是
1。它不会在本地克隆中节省磁盘空间。
从Git 2.24.1手册开始:
对于本地存储库(Git本身也支持),以下语法可能是 已使用:
•/path/to/repo.git /
•file:///path/to/repo.git/
这两种语法几乎是等效的,除了前者暗含--local选项。
和
-l,--local
当要从中克隆的存储库位于本地计算机上时,此标志将绕过常规的“ Git感知”传输机制,并通过在对象和引用目录下创建HEAD以及所有内容的副本来克隆存储库。 .git / objects /目录下的文件经过硬链接以节省空间。
因此,使用file:///path/to/repo.git/
语法的浅表副本比使用/path/to/repo.git/
语法的完整副本要消耗更多的磁盘空间,因为前者具有对象的真实副本而不是硬链接。
(而且我相信硬链接是设置--depth
时--local
被忽略的原因。)
2。也不节省时间。
还是Git 2.24.1手册:
-l,--local
要从中克隆的存储库位于本地计算机上时,此标志绕过常规的“ Git感知”传输机制,并通过复制HEAD以及对象和refs目录下的所有内容来克隆存储库。尽可能将.git / objects /目录下的文件进行硬链接以节省空间。
“ Git感知”传输机制即使在URI为file://...
的情况下也很耗时,因为它包括对象压缩:
$ time git clone --depth 1 --local --shallow-submodules file://$(pwd)/../linux
Cloning into 'linux'...
warning: --local is ignored
remote: Enumerating objects: 65607, done.
remote: Counting objects: 100% (65607/65607), done.
remote: Compressing objects: 100% (61137/61137), done.
remote: Total 65607 (delta 4886), reused 39965 (delta 3556)
Receiving objects: 100% (65607/65607), 176.65 MiB | 10.81 MiB/s, done.
Resolving deltas: 100% (4886/4886), done.
Updating files: 100% (61793/61793), done.
git clone --depth 1 --local --shallow-submodules 73.55s user 4.97s system 245% cpu 31.976 total
(我不知道为什么NVMe SSD的接收速度为10.81 MiB / s)
使用--local
标志进行克隆要快得多:
$ time git clone ../linux
Cloning into 'linux'...
done.
Updating files: 100% (61793/61793), done.
git clone ../linux 4.16s user 1.71s system 100% cpu 5.857 total
答案 1 :(得分:0)
但是如何使用相对路径呢?
不支持此功能; file://
仅期望绝对路径。有例如RFC1738和RFC8089描述了这种URI。
文件URL的格式为:
file://<host>/<path>
其中是系统上的标准域名
形式的目录路径
可以访问,并且是分层的
//.../.
写file://mymodule
时,mymodule
可以解释为主机名。
答案 2 :(得分:-1)
您应该尝试不使用file://
前缀:
git clone --depth 1 ./mymodule mymodule2