保持浅git克隆只是最新的一种方法?

Cha*_*ack 7 git version-control github shallow-clone

我的目标是能够构建一个具有悠久历史的项目的最新版本并为之做出贡献 - 并且不使用本地存储来复制许多历史分支和历史可以追溯到十年甚至更长时间(无论如何,我总是可以在项目的中央存储库的Web UI中查找,如果我需要的话,我可能不会这样做.

我第一次尝试时似乎很幸运:

git clone --depth 40 -b master http://github.com/who/what.git/ what
Run Code Online (Sandbox Code Playgroud)

这给了我一个整洁的本地克隆'什么'只有' master'分支,并有足够的承诺来涵盖最近的两个标记版本.
然后我可以做' git checkout latest-release-tag并构建最新版本.yippee的!

正如我想象的那样,我需要做一个补丁.一切顺利进行:' git checkout -b my-patch-branch',进行我的更改,提交,我能够将我的补丁分支推回到github上的克隆,以便项目可以拉动它.简单!
我觉得我很幸运,因为根据我的阅读,例如,在这里,我不能在git 1.9之前做到这一点.
但安装的版本竟然是1.9,所以我侥幸成功.

现在我要做的下一个显而易见的事情是从远程获取并获取master上的最新活动(包括我的补丁的上游合并,所以我不再需要该分支).我尝试了'git fetch --dry-run upstream'并惊恐地看着它无数兆字节的下载,然后给了我一个新的标签列表,可以追溯到乳齿象时代.我很高兴我说--dry-run!

我真的希望它能master从我的克隆的HEAD中获得十几个新的提交,然后我可能会有一个深度52克隆而不是40,但这就是我想要的......在我介入之前,先从有用的近期历史开始,然后从这一点开始跟踪和增长,并能够构建,分支和推送补丁.它似乎非常接近.

有没有简单的方法让git做我想做的事情?我想做的不合理吗?

编辑:更多信息.
(1)上流实际上是靠近我提前一百次,我估计十几次被拉出空中.
(2)事实证明,我在克隆中获得的原始40次提交都是单父提交.我正在尝试获取的一堆后者是在我的克隆不包含的某个分支中与第二个父进行合并提交.因为我克隆中最早的提交不是一个共同的祖先,那些是否会导致git引入他们所有的古代历史?
有没有办法告诉它我不想要那个?

更多新信息:
(1)我之前发现我之前使用的是http协议,它实际上并没有与服务器上的git进程交互,所以它没有机会定制下载大小.
但是,当我使用git-over-ssh重试时,我仍然有一个巨大的提取.
然后
(2)手动,就像动物一样,我点击了github的'newtork'显示中显示的合并提交,找到涉及在我的浅切之前开始的分支的那些,并将他们的父-2 SHA添加到我的.git/shallow文件中,然后尝试再次在ssh上'git fetch'.这很好用,并下载了一个小包文件,可以快速转发我当地的master分支机构.我认为这正是我想要git能够自动完成的操作,但我还没有找到办法.手动,这很乏味.:)

Von*_*onC 4

\n

我应该传递什么值?如果我最初在深度 40 进行克隆,并且上游有 100 个新提交,我是否需要深度 140?

\n
\n\n

Git 2.11(2016 年第 4 季度)将允许您增加深度,因此如果您的 fetch 确实带来了 100 个新提交,您可以将新深度设置为 140

\n\n

请参阅提交 cccf74e提交 079aa97提交 2997178、提交cdc3727、提交859e5df提交 a45a260 、提交 269a7a8提交41da711 、提交 6d43a0c 提交994c2aa提交 508ea88提交 569e554提交 3d9ff4d提交 79891cb提交 1dd73e2提交 0d789a5提交45a3e52提交 3f0f662提交 7fcbd37提交 6e414e3(2016 年 6 月 12 日),作者:Nguy\xe1\xbb\x85n Th\xc3\xa1i Ng\xe1\xbb\x8dc Duy ( )。\n帮助者:Duy Nguyen ( )Eric Sunshine ( )Junio C Hamano ( )。\n (由Junio C Hamano 合并 -- --提交 a460ea4中,2016 年 10 月 10 日)pclouds
pcloudssunshinecogitster
gitster

\n\n

特别是,提交 cccf74e

\n\n
\n

fetch, upload-pack:通过提交--deepen=N扩展浅边界N

\n\n

在 中git fetch--depth参数始终与最新的远程引用相关。
\n 这使得覆盖这个用例有点困难,用户想要创建浅层历史记录,比如更深 3 个级别。
\n 如果远程引用尚未移动,它会起作用,但没有人可以保证这一点,特别是当该用例是在最后一次克隆或“”之后几个月执行时git fetch --depth
\n 此外,使用 修改浅边界对于或--depth创建的克隆效果不佳。--since--not

\n\n

这个补丁解决了这个问题。
\n 新参数--deepen=<N>将添加<N>更多 (*) 父提交到当前历史记录,无论远程引用在哪里。

\n\n

(*) 我们甚至可以支持--deepen=<N>负数<N>
\n 在这种情况下,我们可以从浅层克隆中删除一些历史记录。此操作\n(和--depth=<shorter depth>)不需要与远程端交互(因此实现起来更加复杂)。

\n
\n\n
\n\n

在 Git 2.27(2020 年第 2 季度)之前,“ git pull”与底层的“ ”共享许多选项git fetch,但其中一些选项没有记录下来,而一些有意义的传递则没有传递。

\n\n

这意味着您可以通过一个命令加深您的存储库历史记录并更新当前分支:

\n\n
git pull --deepen=x\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅Ren\xc3\xa9 Scharfe ( )的提交 13ac5ed提交 f05558f(2020 年 3 月 28 日)。\n (由Junio C Hamano 合并 -- --提交 9f471e4,2020 年 4 月 22 日)rscharfe
gitster

\n\n
\n

pull:传递记录的获取选项

\n\n

报告人:\xe5\xa4\xa9\xe5\x87\xa0
\n 签署人:Ren\xc3\xa9 Scharfe

\n\n

获取选项--deepen--negotiation-tip--server-option--shallow-exclude和 也--shallow-since有记录git pull,但实际上并不被该命令接受。

\n\n

传递它们以使代码与其文档相匹配。

\n
\n