Performance 使用--depth 1浅克隆、创建提交并再次拉取更新是否安全?
Performance 使用--depth 1浅克隆、创建提交并再次拉取更新是否安全?,performance,git,git-clone,Performance,Git,Git Clone,--depth 1选项位于: 创建一个浅层克隆,其历史记录被截断为指定的修订数。浅层存储库有许多限制(您不能克隆或从中获取,也不能从中推送或插入),但如果您只对具有长期历史的大型项目的最近历史感兴趣,并且希望以补丁的形式发送修复,则浅层存储库就足够了 但是我成功地完成了一个浅层克隆,提交了一些更改,并将这些更改推回到(裸克隆)源 这对我来说很有意义——我是说为什么不呢?当克隆头在源代码中可以识别,并且我的提交位于此之上时,似乎没有理由。但是手册上说的不是这样 我喜欢浅层克隆的想法——例如drup
--depth 1
选项位于:
创建一个浅层克隆,其历史记录被截断为指定的修订数。浅层存储库有许多限制(您不能克隆或从中获取,也不能从中推送或插入),但如果您只对具有长期历史的大型项目的最近历史感兴趣,并且希望以补丁的形式发送修复,则浅层存储库就足够了
但是我成功地完成了一个浅层克隆,提交了一些更改,并将这些更改推回到(裸克隆)源
这对我来说很有意义——我是说为什么不呢?当克隆头在源代码中可以识别,并且我的提交位于此之上时,似乎没有理由。但是手册上说的不是这样
我喜欢浅层克隆的想法——例如drupal core:当我从7开始时,我不需要知道drupal 4中发生了什么。-但我不想射中自己的脚
因此,浅层克隆、在其中开发提交、再次拉取以跟上源站的更新是否安全?查看我类似问题的一些答案以及git列表上最近线程的链接 归根结底,回购协议之间的“深度”度量是不一致的,因为它们是从各自的头部来度量的,而不是(a)你的头部,或者(b)你克隆/获取的提交,或者(c)你想做的其他事情 最困难的一点是让一个人的用例正确(即自我一致),这样分布式的,因此可能是不同的回购协议仍然可以愉快地一起工作 它看起来确实像是“签出-孤立”是正确的“设置”阶段,但仍然缺乏关于“克隆”步骤的清晰(即简单易懂的单行命令)指导。相反,看起来你必须
init
a repo,建立一个remote
跟踪分支(你只想要一个分支吗?),然后fetch
那一个分支,这让人觉得冗长,出错的机会更多
编辑:有关“克隆”步骤,请参见注意Git 1.9/2.0(2014年第1季度)已删除该限制。见,摘自: 现在git支持从浅层克隆或到浅层克隆的数据传输,这些限制不再适用 委员会:
--深度::
创建一个“浅”克隆,其历史记录被截断为指定的修订数
它源于提交,支持克隆、发送包/接收包以及浅层克隆。所有详细信息均在“”中 2015年6月更新:
(最终浅层情况)
2016年1月更新:Git 2.8(Mach 2016)现在正式记录了获取最低历史记录的实践。
参见(2015年12月30日),(2015年12月30日),(2015年12月29日)和(2015年12月28日).
(于2016年1月20日被合并) 这是“ 通过指定开关创建
。稍后可使用开关更改深度,或使用
--unshallow
恢复完整历史记录
只要合并基础在最近的历史记录中,在
中进行合并就可以工作。否则,这就像合并不相关的历史,可能会导致巨大的冲突。
此限制可能使此类存储库不适合在基于合并的工作流中使用 2020年更新:
- git 2.11.1引入了选项
,以防止获取所有历史记录git fetch--shallow exclude=
- git 2.11.1引入了选项
,以防止获取旧提交git fetch--shallow-since=
有关浅克隆更新过程的详细信息,请参阅“”
评论如下: 要回填历史记录:
git pull--unshall
并补充说:
要回填部分历史记录,请执行以下操作:git fetch--depth=100
是的,我也读过了,谢谢安迪。
--孤儿
的概念似乎很相似,我打算玩一场。仍然有点不安的是,这些文档与现实不符[因为谁能说--orphan
的文档是正确的?!]发现了另一个。但这对我没有帮助。Git 1.9(2014年第1季度)将完全支持浅层回购克隆!请参阅Git 2.5(2015年第2季度)支持单个获取提交!我已经编辑了我的答案,参考了菲利普。获取远程分支仍将在整个历史记录中进行(AFAIK)。你关于相对深度的说法是对的,我真的希望历史上有一个合适的点(比如我的例子中的git merge base 7.x 7.0)@artfulrobot:“--orphan”方法允许你创建一个短的窄“克隆”(即聚焦的片段),然后像使用正确的repo一样使用它。这是我还没有在愤怒中尝试过的东西,但这是我需要尽快证明的东西。这么多的文字只是为了说“是的,只要你的git版本还没有4年以上的历史,并且合并基础是在最近的历史中”@Boris这个答案对我帮助很大,因为我对使用浅克隆持怀疑态度。以前,当我执行提交和合并时,它有时会中断。这个答案是一个简短的历史,说明了为什么它现在可以在发生时工作,以及如何正确地执行。我的要求是,在浅层克隆之后,我需要将此代码提交到一个新的远程存储库。。我不能允许它,因为这个代码太大了。。如何在没有任何问题的情况下将此浅层克隆推送到新的repo(当前面临浅层对象更新失败的问题)。。有什么想法吗pls@Tiny我建议使用一个单独的本地存储库,它将引用您的浅层克隆文件夹。你能问一个单独的问题吗?
--depth <depth>::