git 如何只克隆指定范围内的提交,同时忽略较新和较旧的提交以保存带宽

rvpgvaaj  于 2023-01-04  发布在  Git
关注(0)|答案(2)|浏览(133)

任务:

要在回购协议上执行git bisect,比如https://example.git,二等分范围的两端都非常旧:例如:za3bca(较新)和fabce1(较旧)。
由于带宽有限,我不想下载所有的提交,直到最新的范围结束,因为我知道我肯定不需要它们。

我的方法:

因此,正如git文档页面上给出的git clone,我想同时使用这两个选项:--depth <depth>--shallow-since=<date>组合在一起。

  • 我将指定范围中较早结束的日期,例如20220212(yyyymmdd),
  • 我有counted the number of commits在这个范围之间(比如100),并且将提供更多的值作为“depth”
git clone https://example.git --shallow-since=20220212 --depth 100

但这样做会产生错误:fatal: error processing shallow info: 4

szqfcxe2

szqfcxe21#

两件事:首先,你的--shallow-since datespec解析不正确,尝试2022-02-12
但是这仍然不能达到你的目的,因为--depth--shallow-since都指定了从被 checkout 的引用(远程的主分支HEAD,如果没有指定的话)到 * 后退 * 的距离,你不能用--depth来指定从--shallow-since找到的提交到 * 前进 * 的距离。
如果有一个标签或分支头位于或接近平分范围的末端,可以将其作为ref,使用--branch选项 checkout (不管名称如何,它都接受分支和标签):

git clone --single-branch --shallow-since=2022-02-12 --branch=end-point https://some.repo

如果没有,那么我不认为你能做什么,除了说服别人为你做这样的标签或分支:)

iaqfqrcu

iaqfqrcu2#

最直接的方法是在服务器端标记你要开始的tips,然后用--shallow-since来获取它们。现在很多服务器都配置成允许你获取任意可达的(甚至是不可达的)提交,特别是为了迎合这种节省比特的冲动,所以如果标记它们很烦人,你可以试着查找它们并显式地指定开始提交:

git fetch origin --shallow-since=2022212 \
        +602c0cb92c50a259c29138d8e107615569c0767d:refs/tags/starthere

相关问题