“索引包失败”

2023-12-10

在克隆 git 存储库时,我收到一条我不太明白的错误消息。

$ git clone [email protected]:group07
Initialized empty Git repository in /cygdrive/C/Users/Martin Bigler/p2/group07/.
remote: Counting objects: 2269, done.
remote: Compressing objects: 100% (1936/1936), done.
git: 'index-pack' is not a git-command. See 'git --help'.

什么可能导致这种行为?


这是否类似于票 269?

git index-pack不是内置的git.exe, so git.exe需要找到git-index-pack.exe in $GIT_EXEC_PATH(通常应该是“/libexec/git-core/“)。 你有 ”/libexec/git-core/git-index-pack.exe"?

因为如果是,则这是导致错误的服务器,而不是本地安装的 git 进行推送。

您可以尝试以交互方式记录日志并检查索引包是否可用:

$ ssh git#***.com@***.com
Enter passphrase for key '/c/Users/***/.ssh/id_rsa':
Last login: Tue Feb  9 13:48:32 2010 from ***
-bash-3.2$ git version
git version 1.6.1
-bash-3.2$ git-index-pack
usage: git index-pack [-v] [-o <index-file>] [{ ---keep | --keep=<msg> }] [--strict] 
{ <pack-file> | --stdin [--fix-thin] [<pack-file>] }

该测试给出了以下答案:

Your git-index-pack交互登录时发现。
但当您不交互式登录时显然不会。
这表明你调整了你的PATH适当地在$HOME/.profile or $HOME/.bash_profile,但不在HOME/.bashrc

结论是:

我的解决方案是:

ssh user@server
cp .bash_profile .bashrc

请注意,对于 Git 2.25.2(2020 年 3 月),索引包代码现在可以诊断记录同一对象两次的错误输入包流当它用作 Delta 基时;遇到此类输入时用于声明软件错误的代码,但它是输入错误。

See commit a217810 (03 Feb 2020) by Jeff King (peff).
(Merged by Junio C Hamano -- gitster -- in commit 7b029eb, 14 Feb 2020)

index-pack: 降级两次解决REF_DELTA去死()

Signed-off-by: Jeff King

当我们解决一个REF_DELTA,我们比较并交换它的类型REF_DELTA到基础对象具有的任何实际类型,如中讨论的ab791dd138 ("index-pack:修复重复碱基的竞争条件”,2014-08-29,Git v2.2.0-rc0 --merge).
如果旧类型不是REF_DELTA,我们认为这是一个 BUG()。但正如该提交中所讨论的,每当我们尝试两次解析一个对象时,我们都可能会看到这种情况,这可能会发生,因为我们有基础对象的多个副本。

所以这根本不是一个错误,而是输入包损坏的迹象。事实上,这种情况已经在 t5309.5 和 t5309.6 中触发,它们创建了具有增量循环和重复碱基的包。但我们从未注意到,因为这些测试都被标记了expect_failure.

这些测试是由b2ef3d9ebb(“在具有可恢复增量周期的包上测试索引包”,2013-08-23,Git v1.8.5-rc0 --merge列于batch #4),这为我们理论上认为的情况敞开了大门could handle.
当我们看到这样一个已经解析的对象时,理论上我们可以在确认之前解析的对象后继续进行child->real_type火柴base->obj->real_type.

But:

  • 在这里强制执行“仅解析一次”规则可以使我们免于代码其他部分的无限循环。
    如果我们继续下去,那么 t5309.5 中的 delta 循环会导致我们无限循环,如下所示find_ref_delta_children()不知道哪些对象已经被解析。
    因此,需要进行更多更改才能使此案例发挥作用,同时我们的情况会更糟。

  • 无论如何,任何触发此问题的包都会被破坏。
    它要么有一个重复的基础对象,要么有一个循环,导致我们通过以下方式引入重复的对象--fix-thin.
    无论哪种情况,我们最终都会拒绝该包裹write_idx_file(),它还可以检测重复项。

所以测试对于记录我们的内容没有什么价值could正在做的事情(并且已经被忽视了 6 年多)。
让我们切换它们以确认我们干净地处理了这个案例(并切换出BUG()以获得更多信息die()以便我们这样做)。


使用 Git 2.30(2021 年第 1 季度),访问 packdata 的进程.idx文件被删除(例如,重新打包时)并没有失败或优雅地回退。

See commit 506ec2f, commit c8a45eb (25 Nov 2020) by Taylor Blau (ttaylorr).
(Merged by Junio C Hamano -- gitster -- in commit 6bac6a1, 08 Dec 2020)

packfile.c:防止索引消失

Co-authored-by: Jeff King
Signed-off-by: Taylor Blau

In 17c35c8969 ("packfile: 如果在 multi-pack-index 中则跳过加载索引", 2018-07-12, Git v2.20.0-rc0 --merge列于batch #1)我们停止加载.idx多包索引中包含的包的文件。

这节省了我们加载的精力.idx并通过 ' 进行一些轻量级有效性检查packfile.c:load_idx()',但是在需要加载索引(例如,生成反向索引)的进程和可以删除索引的进程之间引入了竞争。

例如,在 shell 中运行以下命令:

$ git init repo && cd repo
$ git commit --allow-empty -m 'base'
$ git repack -ad && git multi-pack-index write  

其次是:

$ rm -f .git/objects/pack/pack-*.idx
$ git rev-parse HEAD | git cat-file --batch-check='%(objectsize:disk)'  

在此补丁之前将导致段错误.

这里发生的情况是,我们注意到该包位于多包索引中,因此不检查它是否仍然有.idx.
当我们尝试加载该索引以生成反向索引时,我们没有它,因此调用 'find_pack_revindex()' in 'packfile.c:packed_object_info()' 返回NULL,然后取消引用它会导致段错误。

Of course, we don't ever expect someone to remove the index file by hand, or to be in a state where we never wrote it to begin with (yet find that pack in the multi-pack-index). But, this can happen in a timing race with 'git repack -ad'(man), which removes all existing packs after writing a new pack containing all of their objects.

通过恢复大块来避免这种情况17c35c8969当包包含在 a 中时,它将停止加载索引MIDX.
这使得后半段17c35c8969无用,因为我们总是有一个非 NULL'p->index_data',在这种情况下, if 语句不保护任何内容。

这两个一起有效地恢复17c35c8969,并避免上面解释的竞争。


在 Git 2.31(2021 年第 1 季度)中,引入一个磁盘文件来记录 packdata 的 revindex,传统上该文件总是动态创建且仅在核心内创建。

See commit 6885cd7 (28 Jan 2021), and commit ec8e776, commit e8c58f8, commit 35a8a35, commit 1615c56, commit c977334, commit e37d0b8, commit 84d5449, commit 8ef50d9, commit 2f4ba2a (25 Jan 2021) by Taylor Blau (ttaylorr).
(Merged by Junio C Hamano -- gitster -- in commit 3c12d0b, 12 Feb 2021)

pack-revindex:确保磁盘上的反向索引优先

Signed-off-by: Taylor Blau

当磁盘上存在反向索引时,无需在内存中生成反向索引。
事实上,这样做可能很慢,并且需要大量的堆。

让我们通过教 Git 在生成反向索引时如何有条件 die() 来确保我们优先处理磁盘上的反向索引(即,当它存在时,我们不会费心尝试在内存中生成等效的索引)在记忆中。

然后,添加一个测试以确保当 (a) 磁盘上反向索引存在时,以及 (b) 设置时GIT_TEST_REV_INDEX_DIE_IN_MEMORY,我们不会死,这意味着我们从磁盘上读取数据。


在 Git 2.34(2021 年第 4 季度)中,组成单个(概念)包文件的各种文件的顺序已被重新评估和理顺。
这对于正确性很重要,因为不能向正在运行的 Git 显示不完整的文件集。

See commit 4bc1fd6, commit 2ec02dd, commit 8737dab, commit 66833f0 (09 Sep 2021), and commit 0c41a88 (08 Sep 2021) by Ævar Arnfjörð Bjarmason (avar).
See commit 522a5c2, commit 4e58ced, commit 16a8690, commit ae44b5a (09 Sep 2021) by Taylor Blau (ttaylorr).
(Merged by Junio C Hamano -- gitster -- in commit a1af533, 20 Sep 2021)

index-pack: 在 Final() 中重构重命名

Signed-off-by: Ævar Arnfjörð Bjarmason
Signed-off-by: Taylor Blau

将 Final() 中的重命名重构为辅助函数,这在精神上类似于前面的重构finish_tmp_packfile() in pack-write.c.

Before e37d0b8 ("builtin/index-pack.c:编写反向索引”,2021-01-25,Git v2.31.0-rc0 --merge列于batch #8)由于“pack”文件与“pack”文件的“else if”情况不同,拥有这种帮助器可能不值得。
“idx”文件。

但是既然我们现在也有了“rev”,那么让我们通过助手进行重命名,这既减少了行数,又提高了可读性,因为我们可以很容易地一眼看出编写这三个内容的逻辑除了明显不同的情况外,文件类型完全相同"*final_name" being NULL, and "make_read_only_if_same"与众不同。


Also, Geometric repacking ("git repack --geometric=<n>"(man)) in a repository that borrows from an alternate object database had various corner case bugs, which have been corrected with Git 2.41 (Q2 2023).

See commit d85cd18, commit 932c16c, commit 19a3a7b, commit f302841, commit 752b465, commit 732194b, commit b7b8f04, commit 5186134, commit 3d74a23, commit ceb96a1 (14 Apr 2023) by Patrick Steinhardt (pks-t).
(Merged by Junio C Hamano -- gitster -- in commit 36628c5, 25 Apr 2023)

pack-objects:修复包含和排除相同包文件时的错误

Signed-off-by: Patrick Steinhardt

当通过包含和排除相同的包文件时--stdin-packs选项,那么我们将返回一个错误,因为找不到排除的包文件。
这是因为我们只会设置util如果找到了包含的包文件列表的指针,这样当我们注意到它实际上没有为排除的包文件列表设置时,我们就会死掉。

通过始终设置来修复此错误util包含和排除列表条目的指针。


而且,在 Git 2.41(2023 年第 2 季度)中:默认情况下启用了磁盘反向索引,该索引允许从包偏移量映射到存储在偏移量处的对象的对象名称。

See commit 9f7f10a, commit a8dd7e0, commit dbcf611, commit 2a250d6, commit 65308ad, commit b77919e, commit 3969e6c (12 Apr 2023) by Taylor Blau (ttaylorr).
(Merged by Junio C Hamano -- gitster -- in commit 849c8b3, 27 Apr 2023)

pack-revindex: 介绍GIT_TEST_REV_INDEX_DIE_ON_DISK

Signed-off-by: Taylor Blau
Acked-by: Derrick Stolee

In ec8e776 ("pack-revindex:确保磁盘上的反向索引优先”,2021-01-25,Git v2.31.0-rc0 --merge列于batch #8),我们介绍了GIT_TEST_REV_INDEX_DIE_IN_MEMORY当 Git 从头开始​​生成反向索引时中止该过程。

ec8e776是为了确保 Git 更喜欢.rev文件可用时从头开始在内存中生成相同的信息。

在后续补丁中,我们将引入pack.readReverseIndex,可用于禁用读取“.rev” 文件可用时。
为了确保这些文件确实被忽略,请引入一个类似的选项,以便在 Git 读取“.rev“来自磁盘的文件。

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

“索引包失败” 的相关文章

  • 无法快速删除 Git 中的许多文件

    我删除了 Git 分支中的 777 个文件新功能 by rm example 我愿意承诺 Git 要求我手动删除每个已删除的文件 git rm file 对于所有名称不相似的 777 个文件 编写上述命令将花费大量时间 如何删除我的 Git
  • 我应该如何将更改从一个提交转移到另一个提交?

    我在同一个分支上有两个提交 一个接一个 我在第一次提交中添加了对文件 A 的更改 然后对其他文件进行了一些更改 然后进行了另一次提交 现在我希望对文件 A 的更改是在第二次提交而不是第一次提交 最优雅的方式是什么 我知道这是一个老问题 但我
  • 如何更新我的裸存储库?

    我创建了一个裸存储库来发布我的存储库 但我不知道如何使用主存储库的当前状态更新裸存储库 如果您想复制主存储库中的所有对象 请在主存储库中执行此操作 git push all
  • Eclipse git checkout(又名恢复)

    是否可以做相当于git checkout在 Eclipse 中使用 Egit 插件 我有一个已修改的文件 我想放弃更改并将文件恢复到源存储库中的内容 在 Subversion 中 这称为恢复 在 git 中 相当于 checkout 我在团
  • 从“git diff”中排除文件

    我正在尝试排除一个文件 db irrelevant php 来自 Git diff 我尝试将文件放入db子目录名为 gitattributes与线irrelevant php diff我还尝试创建一个名为 git info attribut
  • 撤消多个文件和文件夹“git add”[重复]

    这个问题在这里已经有答案了 我执行了 git add 现在我想恢复 git add 我怎样才能做到这一点 git reset 这相当于git reset HEAD 将取消 add 更常见的是 取消暂存 所有文件 In Git revert用
  • 是否有 git-merge --dry-run 选项?

    我正在合并一个可能有很多冲突的远程分支 我怎么知道它是否会发生冲突 我没有看到任何类似的东西 dry run on git merge 如前所述 传入 no commit标志 但为了避免快进提交 也传入 no ff 像这样 git merg
  • 是否可以使用“最小”算法进行交互式添加?

    当从快照计算变更集时 Git 并不总是正确选择块边界 git diff has a diff algorithm允许在这方面进行一些调整的选项 git diff minimal有时会给出比git diff alone 有没有办法获得相同的优
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi
  • 竹子 - 构建我的拉取请求

    当拉取请求进入 git 时 我试图触发竹子中的构建 我可以将 webhook 信息发送到竹子 但它不是构建适当的 sha 标记的签入 而是构建 主 分支 这是否需要对竹子进行一些自定义 git 设置 到目前为止我还没有看到任何简单的事情 在
  • 在 Bitbucket 中分叉存储库,保留分叉删除原始内容

    我在 Bitbucket 中分叉了一个存储库 但我想知道删除原始存储库后会发生什么 克隆也会被删除吗 别担心 分叉将继续存在
  • 本地 git 存储库强制从远程 git 存储库更新。 (胖客户端部署)

    Update 我认为这与 Windows git 客户端 msysgit 的问题有关 抱歉打扰你们了 我正在寻找一种方法来使多个客户端框与远程 git 存储库保持同步 强制从远程存储库进行更新并放弃客户端上可能已更改的任何内容 我遇到的问题
  • 使用 reposurgeon 将 svn repo 转换为 git

    我正在尝试使用 svn repo 转换为 git再生外科医生 http www catb org esr reposurgeon 这是我所做的 有一个具有 svn 名称 gt git 名称映射的 repo map 文件 svnadmin d
  • Git 子模块未在 Jenkins 构建中更新

    我在詹金斯的一个项目中有一个子模块 我已启用高级设置以递归更新子模块 当我运行构建时 我看到工作区包含子模块中的文件 问题是 它似乎是子模块的第一个修订版 当我推送更改 托管在 GitHub 上的存储库 时 Jenkins 似乎没有更新子模
  • 如何从另一个目录使用git?

    假设有如下文件夹结构 repos repo1 lt here is git repository I do cd repos 我现在如何使用存储库 repo1仍然在repos目录 我不想做 cd repo1 git status git c
  • Git 择优挑选然后 rebase

    当我在 git 中挑选樱桃后进行 rebase 时 有一些我不明白的事情 有人可以告诉我发生了什么事吗 场景是这样的 我正在主分支和主题分支上工作 如下所示 该主题有两次提交 C D topic A B master 我的主题分支有问题 所
  • 为什么我无法在 Windows 10 中将 notepad++ 设置为 git 提交编辑器?

    我知道这个问题已经被不止一次地提出和回答过 但我尝试了答案所建议的至少十种不同的方法 但没有一个对我有用 我总是得到nano当我这样做时作为编辑 git commit 如果我可以剪切并粘贴到nano 但这是做不到的 举个例子 这是我的 gi
  • GitLab 是否通过 git-annex 或其他方式支持大文件?

    我运行一个 GitLab 实例 并希望允许我的用户上传几乎任何大小的文件 众所周知 git 在处理大文件方面仍然存在问题 我知道通过将文件存储在其他地方并仅对元数据进行版本控制来规避此问题的方法 例如git annex git media
  • Git 命令查找哪些分支合并到当前分支以及何时合并

    我有几个功能分支正在自动合并到集成分支中 我想知道这种情况是否以及何时发生 我可以打字git log这将向我显示合并已经发生 但由于某种原因 它没有向我显示来自哪个功能分支 它只是说 将integration branch合并到integr
  • 如何在 *Windows* 中将 Mercurial 存储库转换为 Git? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Windows 上将 Mercurial hg 存储库转换为 Git 7 https stackoverflow com questions 3267232 converting a mercur

随机推荐

  • 垂直于圆锥体的曲面

    我用 OpenGL C 编写一个程序来对圆锥体进行光线追踪 对于我的强度计算 我需要知道表面法线 给定基础半径 高度和中心坐标 如何计算表面法线 我假设您需要在给定表面上的点的情况下找到表面的法线 我进一步假设这是一个圆锥体 其底座朝下 y
  • Firebase云函数对象可能“未定义”

    我在打字稿中有以下代码 并且在线收到此错误 change after data 对象可能是 未定义 import as functions from firebase functions import as admin from fireb
  • .NET 4.0 中的重大变化

    新 4 0 中有很多关于新功能和类的信息 但也有一些更改可能会影响现有应用程序 例如 Timespan 现在实现了 IFormattable 和旧版本字符串 Format 无效选项将引发异常 而不是调用简单的 ToString 然而 CLR
  • 如何使用 J2EE 容器 (Websphere) 全局设置响应标头

    有没有办法在 Web 服务器级别 web xml 为所有事务设置标头 具体来说 我想这样做 response setHeader Cache Control no cache no store response setDateHeader
  • Environment.TickCount是否受系统时间调整影响?

    我很好奇 NET BCL 属性Environment TickCount 是如何实现的 我现在特别想知道它是否受到以下影响系统时间调整 我对该属性是如何实现的第一个猜测是它只是一个围绕获取TickCount方法 但是 该文档的获取刻度数方法
  • 从 URL 获取图像但未完全加载

    我试图从 URL 获取图像 但当我将其保存到文件时 它是实际图像的一半 我搜索了许多网站和解决方案 例如 HttpWebRequest BeginGetResponse 因为我认为这是因为我必须缓冲数据 但它不起作用 我不知道我的代码的哪一
  • 从蓝牙输出到线路输出或扬声器的 AudioSession 输入

    设置音频会话后 以下代码将允许蓝牙输入 UInt32 allowBluetoothInput 1 AudioSessionSetProperty kAudioSessionProperty OverrideCategoryEnableBlu
  • 无法获取 Ripple 会话信息。例外:contentp-body

    Visual Studio 2015 CTP 5 创建了一个空白的 Apache Cordova 项目 没有更改任何文件 文件 gt 新建项目 gt JavaScript gt Apache Cordova 应用程序 已发表 调试 Andr
  • 如何让 php_http 扩展在 Windows 的 PHP 版本 5.4 上工作?

    有人知道如何让 php http 扩展在 Windows 上的 php 5 4 5 上运行吗 我正在尝试在我的 Windows 计算机上升级到 PHP 5 4 5 运行 IIS 我正在开发的项目依赖于 php http 扩展 http ww
  • 如何获取远程文件的上次修改日期

    我需要获取远程文件的文件修改日期 明显地 attributes在这个例子中返回NULL BOOL fileHasBeenModifiedSinceLastLaunch NSError err nil NSDictionary attribu
  • 在 MS-SQL 中将行数据分组并求和到列中?

    原始问题 我不知道我是否应该提出一个新问题或取消标记最后一个问题 所以 我想做的是 WorkWeek Catg Item Cost WorkWeek1 Cat1 Item1 Price WorkWeek1 Cat1 Item2 Price
  • 使用正则表达式删除 JavaScript

    我无法使用 C 从 HTML 页面中删除所有 javascript 我有三个正则表达式 它们删除了很多 但也错过了很多 使用 MSHTML DOM 解析器解析 javascript 会导致 javascript 实际运行 这是我试图通过使用
  • Bootstrap / CSS - 输入、按钮和选择在同一行

    我试图使用 bootstrap css 将输入 按钮和选择放在同一行中 但是select 根据其内容大小 将转到下一行 如下所示 我能做些什么 这是 HTML 的部分 div class form inline div class form
  • {}.toString() 未捕获的语法错误:意外的标记

    当我在 chrome 开发工具中尝试时 它显示Uncaught SyntaxError Unexpected token 但是 如果当它分配给a var a toString a object Object 是什么造成了这种差异 是什么造成
  • CoffeeScript 的存在运算符如何工作?

    Coffeescript 使用存在运算符来确定变量何时存在 并且在咖啡脚本文档它表明something 将编译为something undefined something null但是我注意到我的咖啡脚本版本只是将其编译为something
  • 如何使用 Prolog 删除列表中的偶数

    我需要删除第一个列表中的所有偶数并将其余的保存到第二个列表中 我的第一个非工作方法是 remove even remove even H1 T1 H2 T2 H1 mod 2 0 remove even T1 remove even H1
  • 在SQL中批量插入.txt文件

    我正在尝试将 txt 文件导入高级查询工具 我使用的 SQL 客户端 到目前为止 我有 CREATE TABLE tb test id INTEGER name varchar 10 dob date city char 20 state
  • 使用 C# .NET 中的 XDocument 库删除内部节点,但不删除 xml 中的值

    我有以下 XML 文件 p span class screenitems Add span p 我要删除它 span 节点但是Add存在 所以最后看起来如下 p Add p 有没有好的 简单的方法来做到这一点 Use ReplaceWith
  • VS 2015许可证已过期

    我昨天 2015年7月21日 从我的MSDN帐户下载了VS 2015 enterprise 发布版 并将其安装在全新的W8 1 pro机器上 是的 遗憾的是 我无法将Win8 1 Pro升级到Enterprise https superus
  • “索引包失败”

    在克隆 git 存储库时 我收到一条我不太明白的错误消息 git clone email protected group07 Initialized empty Git repository in cygdrive C Users Mart