- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问:当 git 在 Smart Protocol 上推送没有共同历史的引用时, 在构建要发送的精简包时,是否可以考虑本地和 origin
之间已经共有的根或子树?
tl;dr
在使用和推送到远程 Git 存储库时考虑这种(不常见的)情况。
master
指向具有 1110 个后代子树的树 a[0-9]/b[0-9]/c[0- 9]
.origin/master
与本地 master
提交是最新的,即相同的历史记录。它使用 ssh
协议(protocol)。squashed
。我将该分支设置为一个新的单根提交,但具有与 master
相同的内容/树。这可以通过 git commit-tree
来完成。所以这个分支只有一个提交,没有与 master
共同的提交,但是根树哈希是相同的,它指向 master
和 来源/主人
。为了讨论这个问题,这是一个单一的/压缩的提交并不重要 - 任何历史重写回根提交,没有共同的历史都可以。git push origin HEAD # push squashed
通过观察大型存储库的性能和发送的对象数量,我怀疑 push
、send-pack
和 receive- pack
和关于 Smart Protocol 的相关瘦包协商做类似的事情:
squashed
与 origin
当前拥有的任何提交没有共同历史。squashed
指向的树不仅在 origin
中,而且是当前 HEAD
的树引用在这种情况下,树是相同的。如果在 squashed
中进行了后续更改......要么是额外的提交,要么是更改 a0
中文件的新压缩,2 棵树(/
和 a0
) 会改变,其他 1109 不会改变。根树已更改,这意味着需要进行下一级搜索以查看是否值得搜索更多公共(public)子树。这可能需要启发式方法,因为如果不比较所有子树直至叶子,就不可能从任何特定深度的树中推断出共同后代树的数量。
当然,如果在推送的无共同历史记录中有多个提交,则需要为每个提交重复此协商。
智能 API 在考虑每次提交时可以考虑已经存在的公共(public)子树,或者至少是根树,这听起来合理吗?或者 Git 应该已经这样做了,而我的客户端或服务器有问题吗?
git 版本 2.8.2
最佳答案
检查 git 的源代码并尝试使用 git 守护进程和 GIT_TRACE_PACKET 表明您对它正在做的事情是正确的:git 仅在提交级别进行协商。如果历史没有共享,git 将不会检测到共享的内容。
Does it sound reasonable that the Smart API could consider already-held common sub-trees, or at the very least, the root-tree, as it considers each commit?
如果已经持有的公共(public)子树不能通过已经持有的公共(public)提交来识别,那么为了识别这些子树,它必须发送它们的 ID。
问题是,对于任何缺少完整读数的情况,我可以构建一个听起来似是而非的角落案例,发送任意大量的冗余数据——但每次都发送每个现有的子树 ID 以避免这种可能性显然是一个巨大的损失。不要忘记往返延迟非常昂贵。那么,当考虑在所有 提取中增加总体开销时,您在什么时候可能会花更多的时间进行谈判?如果您要争辩说某些特定的替代方法会节省总体时间,您将不得不展示实际生产流量的硬数据。
另请记住,您可以自己构建包。这并不难,您将对象 ID 提供给 git pack-objects pack
并将输出放入 .git/objects/pack
,恭喜,您刚刚获取了这些对象进入那个 repo 协议(protocol)。
关于git - Git Smart API 精简包计算是否可以考虑重用公共(public)子树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149185/
我正在尝试向自定义操作添加一个按钮,但未在操作中添加一个新列,使该按钮与其他按钮重叠。 代码: settings = { actions: { custom: [
背景 一段时间以来,作为用户,我注意到在某些应用程序上我可以对部分文本执行常见操作,例如: 这称为“智能文本选择”(视频 here ),它从 Android O 开始就有了,如图 here . 问题
我有一个带有 W3EditBox 的 modalDialog,用户在其中输入一个字符串,该字符串最终被添加到主窗体上的 W3ListBox 如果存在这些条件之一,我试图阻止 modalDialog 关
经过一番研究,我得出结论,这个应用程序的 ID 为 org.volt.apps , 但通过 tizen.application.launch 启动它或 tizen.application.launch
我正在评估 SMS,并且非常享受这种体验。我需要使用 window.open() 在浏览器上打开一个新窗口/选项卡。我已经使用 asm block 完成了这项工作,但我忍不住觉得有一种我不知道的更好的
我在Third Web上部署了一份智能合同,但我没有加入其中。在资源管理器页面上,智能合同的功能在第三个网站的仪表板上看不到。我是否仍然可以使用相同的部署智能合同来构建我的DApp?或者我应该从头开始
我有一定数量的集合,每个集合都包含可变数量的唯一数字 - 在它们所属的集合中是唯一的,而在其他集合中找不到。 我想制作一个最好在 Python 中实现的算法 - 但它可以是任何其他语言 - 从这些集合
我正在寻找一种“聪明”的方法来连接带有分隔符的字符串。显然我可以自己编写所有这些代码,所以我想知道是否有一种简单的方法(LINQ 或我不知道的其他方法)来执行此操作。 假设我有一组字符串(这可以是任意
我正在从事一个非常关键的性能项目,其中每个时钟周期都在我最重要的内部循环中。我正在考虑重构代码以隐藏指令延迟,但我想知道现代 CPU 的乱序执行硬件在多大程度上已经为我做到了这一点。考虑以下(简单的、
我有gradle的spring boot项目。我想使用json-smart库来处理存储在MySQL String记录中的小型json数据。 这是我对build.gradle的依赖: dependenc
我想在飞利浦电视(NETTV 型号)浏览器中提供我自己的页面预览图像。显示在历史页面地址附近。 我该怎么做? (图片来自avforum,通过google搜索获得) 飞利浦电视使用 Opera 11
“计数”列接收的数据是一个 int (0, 1, 2, ...)。对于 0 的单元格不应显示任何内容,当数据 > 0 时,应显示图像。 count.setImageURLPrefix("silk/
我是否应该构建一个自动完成的“智能”,因为每个结果都必须隐藏在一系列信息之后。 例如: 我正在寻找“博洛尼亚”,我必须运行一个查询(或多个查询,我正在寻找一种尽可能少的方法),在“名称”字段中搜索“博
知道如何做到这一点吗?我想为我的类(class)制作类似 HDTUNE PRO 的东西,但我不知道如何在 java 中读取 HDD Smart,这可能吗?它专为 Windows 设计 最佳答案 您将需
我想进行“智能”正则表达式替换。例如,考虑: import re str = "x(x) and y(y)" res = re.sub("\(.*?\)","z", str) 结果是: xz and
所以我有一个 UI 元素(单行文本),我希望它相对于整个设备水平居中——除非/直到它与给定 View 组/布局中的其他 UI 元素发生冲突。那时我希望它要么在剩余空间中居中,要么在不发生碰撞的情况下尽
我希望我能很好地解释我的问题,以便有人提供帮助。 基本上,我有一个水平滚动条(范围为 0 到 1000)和一个表示滚动条位置除以 1000 的编辑控件,以便用户可以使用滚动条选择 0 到 1 之间的数
我正在尝试制作一个自动缩进的文本区域,到目前为止它可以使用以下代码。我遇到的问题是,我目前正在阻止默认操作,即按 enter 键计算行中的制表符,然后再插入换行符。 这行得通,但我想要文本区域的默认操
我正在为我的基于 php 的网站创建一个搜索引擎。我需要搜索一个 mysql 表。 问题是,搜索引擎必须非常“智能”,这样用户才能轻松找到他们的元素(这是一个分类网站)。 我目前已经使用这段代码设置了
如何智能解析页面搜索结果返回的数据? 例如,假设我想创建一个网络服务,通过解析许多图书提供商网站的搜索结果来搜索在线图书。我可以获得页面的原始 HTML 数据,并执行一些正则表达式以使数据适用于我的
我是一名优秀的程序员,十分优秀!