使用 --depth 1 进行浅层克隆、创建提交并再次拉取更新是否安全?

2024-02-23

The --depth 1选项中git clone http://git-scm.com/docs/git-clone:

创建一个shallow克隆历史记录被截断为指定数量的修订版。浅存储库有许多限制(您不能从中克隆或获取,也不能从其中推入或推入其中),但如果您只对具有悠久历史的大型项目的最近历史感兴趣,并且想要以补丁形式发送修复程序。

但我已经成功地完成了浅层克隆,并进行了一些更改并推动这些改变回到(裸克隆)原点。

这对我来说很有意义——我的意思是为什么不呢?当克隆的 HEAD 在源中是可识别的,并且我的提交位于此之上时,似乎没有理由。但手册上却另有说法。

我喜欢浅克隆的想法 - 例如drupal 核心:当我从 7 开始时,我不需要知道 drupal 4 中发生了什么。 - 但我不想搬起石头砸自己的脚。

那么浅层克隆、在其中开发提交、再次拉取以跟上原始更新是否安全?


请注意,Git 1.9/2.0(2014 年第一季度)有removed那个限制。
See 提交 82fba2b https://github.com/git/git/commit/82fba2b9d39163a0c9b7a3a2f35964cbc039e1a, from 阮泰玉维 (Nguyễn Thái Ngọc Duy)pclouds) https://github.com/pclouds:

现在 git 支持从浅克隆到浅克隆的数据传输,这些限制不再存在。

The 文档现在显示 https://github.com/git/git/blob/82fba2b9d39163a0c9b7a3a2f35964cbc039e1aa/Documentation/git-clone.txt#L182-L184:

--depth <depth>::

创建一个“浅”克隆,其历史记录被截断为指定的修订数量。

这源于像这样的提交0d7d285 https://github.com/git/git/commit/0d7d285f0e29abb994fe32db87ee81b00f403bd2, f2c681c https://github.com/git/git/commit/f2c681cf12c54ce3859b36693f8a13c36126577b, and c29a7b8 https://github.com/git/git/commit/c29a7b8b3f71c1bede1f57626bafe120280aaea3支持克隆、使用浅克隆发送包/接收包。
smart-http 现在也支持浅层获取/克隆 https://github.com/git/git/commit/16094885ca94f72abc28a915f9aa4021e203a16d.

所有详细信息都在“shallow.c:选择新提交的 8 个步骤.git/shallow https://github.com/git/git/commit/58babfffdeeecaa4d6edecaac1fb0c595218b801".

2015 年 6 月更新:Git 2.5 甚至允许获取单个提交! https://stackoverflow.com/a/30701724/6309
(终极浅案例)


Update January 2016: Git 2.8 (Mach 2016) now documents officially the practice of getting a minimal history.
See commit 99487cf https://github.com/git/git/commit/99487cf228ecba869d2f87f1b55f281fdd1342db, commit 9cfde9e https://github.com/git/git/commit/9cfde9ee8f6dc82365f1e977935960f34108076b (30 Dec 2015), commit 9cfde9e https://github.com/git/git/commit/9cfde9ee8f6dc82365f1e977935960f34108076b (30 Dec 2015), commit bac5874 https://github.com/git/git/commit/bac58749bb2cd04720a4d5a1f58ebc428869f9a2 (29 Dec 2015), and commit 1de2e44 https://github.com/git/git/commit/1de2e442af45acf52ad45f9ac86d4c19f6475590 (28 Dec 2015) by Stephen P. Smith (``) https://github.com/.
(Merged by Junio C Hamano -- gitster -- https://github.com/gitster in commit 7e3e80a https://github.com/git/git/commit/7e3e80a88181c99d33567c05fc865e26f971e954, 20 Jan 2016)

这是 ”Documentation/user-manual.txt https://github.com/git/git/blob/9cfde9ee8f6dc82365f1e977935960f34108076b/Documentation/user-manual.txt#L2131-L2149"

A <<def_shallow_clone,shallow clone>>通过指定创建git-clone --depth https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---depthltdepthgt switch.
深度可以稍后更改git-fetch --depth https://git-scm.com/docs/git-fetch开关,或恢复完整历史记录--unshallow.

合并到一个内<<def_shallow_clone,shallow clone>>只要合并基础在最近的历史中就可以工作。
否则,就像将不相关的历史合并一样,可能会导致巨大的冲突。
此限制可能会使此类存储库不适合在基于合并的工作流中使用。

2020 年更新:

  • git 2.11.1 引入了选项git fetch --shallow-exclude=以防止获取所有历史记录
  • git 2.11.1 引入了选项git fetch --shallow-since=以防止获取旧的提交。

有关浅克隆更新过程的更多信息,请参阅“如何更新 git 浅克隆? https://stackoverflow.com/a/41369314/6309".


正如评论者理查德·迈克尔 https://stackoverflow.com/users/420947/richard-michael:

回填历史记录:git pull --unshallow

And 奥勒·哈斯泰特 https://stackoverflow.com/users/2138090/olle-h%C3%A4rstedt adds 在评论中 https://stackoverflow.com/questions/6941889/is-it-safe-to-shallow-clone-with-depth-1-create-commits-and-pull-updates-aga/21217267?noredirect=1#comment82025001_21217267:

回填part历史:git fetch --depth=100.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 --depth 1 进行浅层克隆、创建提交并再次拉取更新是否安全? 的相关文章

  • git pull origin master 返回致命错误:无效的 refspec

    问题是这样的 每当我这样做时 git pull https github com username reponame github io git 接下来是网址 我没有遇到任何问题 但是当我这样做时 git pull origin maste
  • dns-prefetch + 预连接与浏览器缓存

    为了提高页面加载时间 我想使用dns prefetch and preconnect对于外部 JavaScript 如果资源 在我的例子中是外部 javascript 已经在浏览器缓存中会发生什么 做dns prefetch and pre
  • 如何将“develop”分支推送到远程“origin”?

    当我做git flow init它创造了一个master and develop分支机构 当我添加遥控器时git remote add origin email protected cdn cgi l email protection Ne
  • 简单的Java程序插入USB热点后速度慢100倍

    我有以下Java程序 class Main public static void main String args throws java io IOException long start System nanoTime java io
  • Gitflow错误无法初始化

    我已经将 gitflow 安装在我的 github 项目所在的目录中 但是 当我尝试使用命令 启动时git flow init 我收到以下错误消息 git flow init C cygwin64 usr local bin gitflow
  • 每组最大 n 个 SQL 查询的高性能方法

    我正在尝试构建一个基础设施 以便根据需要快速运行回归 从包含我们网络服务器上所有历史活动的数据库中提取 apache 请求 为了通过确保我们仍然回归来自较小客户的请求来提高覆盖范围 我想通过为每个客户检索最多 n 个 为了这个问题 假设 1
  • 使用 numpy tensordot 进行张量乘法

    我有一个张量 U 由 n 个维度 d k 的矩阵和一个维度 k n 的矩阵 V 组成 我想将它们相乘 以便结果返回一个维度为 d n 的矩阵 其中 j 列是 U 的矩阵 j 与 V 的 j 列之间的矩阵乘法的结果 获得此信息的一种可能方法是
  • 我应该在 Heroku 上部署 Ruby on Rails 应用程序吗?

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于我自己的一些情况 我今年 24 岁 去年从北卡罗来纳州立大学毕业 获得了分析硕士学位 统计 数学之类的 我没有很强的编程背景 这对我的问题非
  • 如何运行“git status”并获取文件名

    如何运行 git status 并只获取文件名而不是长相对路径 的输出git status porcelain旨在易于在脚本中解析 输出完整路径而不是相对路径 无论当前目录位于树中的位置 每行输出由git status porcelain有
  • 无法完成 Git Rebase

    我目前正在一个分支上工作 想用 master 来更新它 所以我尝试做一个变基 我正在处理的当前分支 crtdev 我尝试做变基 git checkout crtdev git rebase master used diff mergetoo
  • 最大化数组中成对距离的总和

    想象一个清单 e1 e2 en 和一个函数f e1 e2 gt number返回常数时间内任意两个元素之间的距离 f e e 0 e1 e2 gt f e1 e2 gt 0 f e1 e2 lt f e1 e3 f e3 e2 目标是排列列
  • Sublime 中的文件内容不会因 Git 分支更改而更改

    如果在 Sublime text 2 中打开一个文件 然后切换到终端中对该文件进行更改的分支 则在通过单击编辑器选择编辑器之前 文件内容不会在 Sublime text 2 中更新 如何自动神奇地改变它 Sublime Text 没有任何内
  • 如何使用 git-svn 切换 svn 存储库?

    我有许多使用 git svn 创建为 SVN 存储库克隆的 git 项目 我们已将 SVN 存储库迁移到新的提供商 因此 URL 现在已更改 如何更新 git 克隆的远程 SVN URL 一种可能性是我从新的 SVN 存储库重新克隆 但我不
  • 将 git 设置为始终提示输入凭据

    由于一些专门的硬件 我们有一台与几个开发人员共享的机器 我希望 git 提交和推送始终提示输入凭据 我尝试过在 SO 上找到的一些修复 包括git config global unset credential helper以及编辑配置以包括
  • git - 奇怪的分支合并错误,我不知道如何解决

    当我 git status 时 我收到以下错误消息 On branch master Your branch and origin master have diverged and have 1 and 2 different commit
  • 为什么any (True for ... if cond) 比any (cond for ...) 快得多?

    检查列表是否包含奇数的两种类似方法 any x 2 for x in a any True for x in a if x 2 计时结果与a 0 10000000 每次尝试五次 次数以秒为单位 0 60 0 60 0 60 0 61 0 6
  • 为什么 Numpy 创建零数组比用零替换现有数组的值要快得多?

    我有一个用于跟踪各种值的数组 数组是2500x1700尺寸上 所以不是很大 在会话结束时 我需要将该数组中的所有值重置为零 我尝试创建一个新的零数组并将数组中的所有值替换为零 并且创建一个全新的数组要快得多 代码示例 for in sess
  • 如何提高 Guice 启动时的性能

    好吧 我知道我的计算不客观等等 但无论如何 我讨厌在执行单元测试时等待这么多时间 我的 guice swing 应用程序需要大约 7 秒来初始化 这是一个简单的 IRC 客户端 在那一刻 没有打开连接 我什至还没有调用任何 java io
  • Git:需要递归地'git rm'所有bin和obj文件夹的内容

    有人不小心将所有 bin 和 obj 文件夹提交到我们的存储库 大约有 40 个这样的文件夹 我想做一个git rm r在所有这些文件夹上 有命令可以执行此操作吗 有备份 find type d name bin exec git rm r
  • 如何欺骗 git-svn 来识别使用 svn 进行的合并?

    我们有一个 SVN 设置 具有稳定的主干和不稳定的开发分支 开发工作 大部分 在分支上完成 然后在部署之前合并到主干 我使用 git svn 作为我的 SVN 客户端 我从unstable到trunk的合并过程如下 git svn fetc

随机推荐

  • 如何使用Python查找文本文件中的所有isbn?

    我有一个文本文件text isbn里面有大量的 ISBN 我想编写一个脚本来解析它并将其写入一个新的文本文件 每个 ISBN 编号都在新行中 到目前为止 我可以编写用于查找 ISBN 的正则表达式 但无法进一步处理 import re li
  • AngularJS mailto 不发送电子邮件

    我使用以下代码允许我的 AngularJS 应用程序用户使用他们最喜欢的邮件客户端发送电子邮件 但是当我单击 发送 按钮时没有任何反应 有人可以检查我的代码并告诉我我在这里到底缺少什么吗 谢谢
  • 如何在不构建“音频可视化工具”的情况下将 JavaScript 动画与歌曲的节奏同步?

    从我的基本理解来看 JavaScript 音频可视化器是根据实际声波反映音乐的 我想构建像节拍器 http bl ocks org 1399233 这样的东西 我每隔一段时间就为一些 DOM 元素设置动画x beats 我现在这样做的方式是
  • Jasmine 对象“没有方法 'andReturn'”

    茉莉花初学者 茉莉花间谍的第一次尝试 我以为我在模仿格式显示在这里 http pivotal github io jasmine 搜索 andReturn 但我收到一个无法解决的错误 TypeError Object function ca
  • Visual Studio 构建事件立即返回

    我有一个运行时间较长的构建后事件 长到足以令人厌烦地等待 但又短到足以在每次发布编译后完成 我想立即返回到 VS 我尝试过运行批处理文件start但视觉工作室仍在等待cmd返回成功之前关闭窗口 有没有办法在生成此构建后事件时立即返回成功 T
  • 我可以使用 JavaScript 停止元刷新吗?

    以下代码允许用户停止元刷新的发生 并且它成功删除了meta refresh从页面 但浏览器仍然刷新页面 知道如何让它发挥作用吗
  • 无法在 python 3.7 中安装 Matplotlib

    在 Windows 10 64 位机器中安装 matplotlib 时出现错误显示 python setup py egg info failed with error code 1 in C Users Animus AppData Lo
  • Systemd 启用的服务不再在启动时启动

    我很久以前制作了一些自定义的 systemd 服务 它们都具有相同的配置 当然 ExecStart 除外 这个配置工作了很多年 我从 18 04 LTS 版本开始就已经启动并运行了 ubuntu 但现在看起来其中一些 systemd 服务根
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 重绘canvas html5而不闪烁

    我的屏幕每 25 毫秒重绘一次 并且图像闪烁 这是我的代码 var FRAME RATE 40 var intervalTime 1000 FRAME RATE gameLoop function gameLoop context clea
  • 使用装饰器进行 Python 日志记录

    这是我们面对装饰器时遇到的第一个例子 但我无法意识到我到底想要什么 一个名为 LOG 的简单装饰器 它应该像这样工作 LOG def f a b 2 c d pass 结果应该是这样的 f 1 pippo 4 paperino luca E
  • 阻止执行父事件处理程序

    我有一棵 div 树 div div div div div div 当单击 div 时 它会使其子级不可见 即单击 a 将使 b 和 c 不可见 function func if childId hasClass visible chil
  • 带有条件的 Ansible 即席命令

    我想运行此剧本的 Ansible ad hoc 命令 hosts localhost tasks name Print message if ansible version is greater than 2 7 0 debug msg A
  • 在 Ruby 中,术语“元类”、“特征类”和“单例类”完全是同义且可替换的吗?

    的文档Class http www ruby doc org core 2 1 2 Class html类有一个涉及 元类 的令人难以置信的混乱图 我试图揭开这里到底发生了什么的神秘面纱 这三个词都是 元类 特征类 单例类 同义 in Ru
  • 什么是snakemake元数据文件?我什么时候可以删除那些?

    我注意到我的备份 rsync 脚本花费了相当多的时间从以下位置复制具有随机名称的内容 snakemake metadata文件夹 这些文件有什么用 在 Snakemake 运行完成后我可以安全地删除它们吗 或者它们对于 Snakemake
  • 从 jar 文件加载图像

    我有一个可以在 Netbeans IDE 中完美运行的应用程序 但是当从 dist 目录中的 jar 文件运行时 不会加载必要的图像 我花了 1 1 2 天阅读这个论坛和其他论坛 试图找到答案 但我无法让 jar 图像工作 这是我的代码的摘
  • C# 和 SQL Server 中的 DateTimeOffset 解析

    文档指出 NET 和 SQL Server 中的分辨率均为 100 纳秒 DateTimeOffset 值的时间部分以 100 纳秒为单位 称为刻度 进行测量 C 精度 100 纳秒 SQL服务器 然而 SQL 似乎删除了最后一位数字 例如
  • 循环内导入模块

    我有一个文件 我们称之为 foo py 它执行一些操作 包括通过串行端口发送一些数据并通过电子邮件发送返回的响应 我有另一个文件 看起来像这样 iteration 0 while True iteration 1 do some stuff
  • 在不使用外部 gem 的情况下将文件上传到 db Rails 3

    我有一个任务 我需要在 Rails 3 2 中上传一个文件 txt 而不使用任何外部 gem 来完成腿部工作 恐怕是不可协商的 该文件还需要保存到数据库中 我有以下代码 但是当我尝试使用表单上传 创建新附件时 它会返回错误 No route
  • 使用 --depth 1 进行浅层克隆、创建提交并再次拉取更新是否安全?

    The depth 1选项中git clone http git scm com docs git clone 创建一个shallow克隆历史记录被截断为指定数量的修订版 浅存储库有许多限制 您不能从中克隆或获取 也不能从其中推入或推入其中