当我从存储库创建本地克隆时,如果源存储库很浅,则克隆将失败。
git clone -l -- . target-dir
由于情况并非总是如此,我想找出之前的克隆但不知道如何做到这一点。
到目前为止我尝试的内容很少,基本上是在克隆上创建错误消息。目前我只是获取unshallow,如果失败了,我会做一个简单的获取,因为如果repo很浅,那么之后它应该是unshallow:
if ! git fetch --unshallow; then
git fetch
fi
然而,之后不能保证unshallow(远程提取也可能很浅),因此测试git存储库的(un)浅度会好得多。
答案 0 :(得分:13)
可能git rev-parse
,其中公开了其他几个项目(--is-inside-git-dir
,--is-inside-work-tree
和--is-bare-repository
),应该进行浅度测试({ {1}})。 Until Git version 2.15,但事实并非如此。如果您的Git较旧, 1 只需测试Git存储库目录中的文件--is-shallow-repository
:
shallow
或(更短):
if [ -f $(git rev-parse --git-dir)/shallow ]; then
echo this is a shallow repository;
else
echo not a shallow repository;
fi
1 [ -f $(git rev-parse --git-dir)/shallow ] && echo true || echo false
将打印当前版本号:
git --version
等。 (此时我在不同的VM /机器上有多个版本。)您也可以运行:
$ git --version
2.14.1
$ git --version
git version 2.7.4
如果它只是打印git rev-parse --is-shallow-repository
,那么你的Git是2.15之前的版本而且没有选项。
答案 1 :(得分:1)
当您无权访问远程存储库时(这里不是这种情况,但仍然是一种可能的情况),git clone
仍然是测试远程存储库是否浅层的好方法。< /p>
当克隆最终失败时,问题不是不必要地传输/创建文件,因为所述远程存储库的性质很浅。
此问题现已在 Git 2.32(2021 年第二季度)中得到修复:"git clone
"(man) 新的 --reject-shallow
选项在我们执行克隆后立即失败请注意,我们是从浅层存储库进行克隆。
请参阅 commit 4fe788b 的 Li Linchao (Cactusinhand
)(2021 年 4 月 1 日)。
(由 Junio C Hamano -- gitster
-- 于 commit 22eee7f 合并,2021 年 4 月 8 日)
builtin/clone.c
:添加--reject-shallow
选项签字人:李林超
<块引用>在某些情况下,用户可能想要比提供用于克隆的存储库更多的历史记录,这恰好是一个浅存储库,可以给他们。
但是因为用户在下载到本地之前并不知道它是一个浅存储库,所以我们可能希望拒绝克隆这种存储库,而不创建任何不必要的文件。
'--depth=x
' 选项不能用作解决方案;源代码的深度可能足以在克隆时为我们提供“x
”提交,但用户稍后可能需要将历史记录加深到任意深度。
将 '--reject-shallow
' 选项教给 "git clone
"(man) 以在我们发现我们正在从浅存储库进行克隆时立即中止.
未创建本地文件!
错误信息将是(使用测试克隆命令):
git -c clone.rejectshallow=true clone --no-local shallow-repo
source repository is shallow, reject to clone.
git config
现在包含在其 man page 中:
clone.rejectShallow
拒绝克隆一个浅的仓库,可以被覆盖
在命令行中传递选项 --reject-shallow
。
git clone
现在包含在其 man page 中:
--[no-]reject-shallow
如果源存储库是浅存储库,则失败。
'clone.rejectShallow
' 配置变量可用于
指定默认值。