繁体   English   中英

git 的替代方案是什么 --shallow-since 使用 git 克隆深度

[英]What's the alternative to git --shallow-since using git clone depth

我克隆的git服务器不支持shallow-since。 当我尝试这样做时,出现以下错误:

fatal: Server does not support --shallow-since

我不介意改用git clone -depth=N ,但是如何确定提交的 N 呢?

从技术上讲,这些是不同的:

  • --shallow-since= date获取提交时间戳晚于(并且可能等于,boundaries are hard)给定时间戳的提交;
  • --depth= number获取其名称(分支名称、标记名称和您告诉 Git 使用的任何其他名称)的计数深度在给定步数内的提交。

也就是说,考虑具有以下提交的 Git 存储库:

A--B--C   <-- master
    \
     D--E--F--G   <-- develop

假设CEFG都是今年的日期, ABD都是前一年的日期。 如果你这样做:

git clone --shallow-since=<this year> --no-single-branch

你会得到这样的提交CEFG

...--C   <-- origin/master

...--E--F--G  <-- origin/develop

但是,如果您这样做:

git clone --depth=2 --no-single-branch you will get:

...--B--C   <-- origin/master

...--F--G   <-- origin/develop

即,每个名称的两次提交。 (没有从G回到B的链接,因为这需要从G向后退四步才能到达D ,我们告诉 Git 在两步后切断一切。)

由于--depth默认启用--single-branch ,这种特性往往会被隐藏:如果你只是告诉你的克隆制作一个origin/master ,那么相同的深度是否适用于彼此的名字并不重要也。 添加--no-single-branch选项使差异更加清晰。

在任何情况下,如果您不能直接访问服务器,计算深度的明显方法是进行完整(但可选,单分支)克隆,然后检查您现在在本地拥有的存储库中的提交者日期. 然后你可以计算从你想要的最后日期到分支提示的修订,它告诉你有多少提交要克隆。

当然,到这个时候,你已经有了一个完整的克隆,所以你也可以直接使用它。

一个可行的替代方法是使用一些固定的--depth进行初始克隆。 然后,检查最早提交的提交者时间戳。 如果该日期在您的截止日期之后,请使用git fetch --deepen (或再次使用--depth )加深浅层克隆。 重复检查和加深直到存储库足够深。

(最初要克隆的提交数,然后是每次提取添加的提交数,取决于将每组提交移交所需的时间,以及设置另一轮git fetch所涉及的开销,因此没有明显的正确数字可供使用.)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM