我的目标是能够构建一个具有悠久历史的项目的最新版本并为之做出贡献 - 并且不使用本地存储来复制许多历史分支和历史可以追溯到十年以及更多(我总是可以在项目中央存储库的Web UI中查找,如果我需要的话,我可能不会这样做。)
我第一次尝试时似乎很幸运:
git clone --depth 40 -b master http://github.com/who/what.git/ what
这给了我一个整洁的本地克隆'只有'master
'分支的'what',并且有足够的提交来覆盖最近的两个标记版本。
然后我可以做'git checkout latest-release-tag
'并构建最新版本。 YIPPEE!
正如我想象的那样,我需要做一个补丁。一切顺利进行:'git checkout -b my-patch-branch
',进行我的更改,提交,然后我能够将my-patch-branch推回到github上的克隆,以便项目可以拉动它。简单!
我觉得我很幸运,因为根据我的阅读,例如here,我在git 1.9之前无法做到这一点。
但是安装的版本是1.9,所以我侥幸成功。
现在我想做的下一个显而易见的事情是从远程获取并获取master上的最新活动(包括我的补丁的上游合并,所以我不需要那个分支了。我尝试了'git fetch --dry-run upstream'并惊恐地看着它无数兆字节的下载,然后给了我一个新的标签列表,可以追溯到乳齿象时代。我很高兴我说--dry-run
!
我真的希望自从克隆的HEAD以来,它会在'master
'上提取十几个新的提交,然后我可能会有一个深度为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能够自动完成的操作,但我还没有找到办法。手动,这很乏味。 :)
答案 0 :(得分:1)
我应该通过什么价值?如果我最初克隆到深度40并且上游有100个新提交,我是否要求深度140?
Git 2.11(2016年第4季度)将允许您增加深度,因此如果您的fetch确实带来了100次新提交,则可以将新深度设置为140
请参阅commit cccf74e,commit 079aa97,commit 2997178,commit cdc3727,commit 859e5df,commit a45a260,commit 269a7a8,{{3} },commit 41da711,commit 6d43a0c,commit 994c2aa,commit 508ea88,commit 569e554,commit 3d9ff4d,commit 79891cb,commit 1dd73e2, commit 0d789a5,commit 45a3e52,commit 3f0f662,commit 7fcbd37(2016年6月12日)commit 6e414e3。
帮助:Nguyễn Thái Ngọc Duy (pclouds
),Duy Nguyen (pclouds
)和Eric Sunshine (sunshineco
)
(Junio C Hamano (gitster
)于2016年10月10日Junio C Hamano -- gitster
--合并)
特别是commit a460ea4:
扩展浅边界
fetch
,upload-pack
:--deepen=N
通过N
提交在commit cccf74e中,
--depth
参数始终与最新的远程引用相关 这使得覆盖这个用例有点困难,用户想要制作浅层历史记录,比如更深层次 如果远程引用尚未移动,它将起作用,但没有人可以保证,特别是在最后一次克隆或“git fetch --depth
”之后几个月执行该用例时。 此外,使用--depth
修改浅边界不适用于--since
或--not
创建的克隆。这个补丁修复了这个问题 新参数
--deepen=<N>
将向当前历史记录添加<N>
个更多(*)父提交,无论远程引用位于何处。(*)我们甚至可以支持
--deepen=<N>
,<N>
为负数 在那种情况下,我们可以从浅层克隆中删除一些历史记录。这个操作 (和--depth=<shorter depth>
)不需要与远程端进行交互(结果更复杂)。