git fsck:duplicateEntries:包含重复的文件条目 - 无法推送到 gitlab

2023-12-31

我们有一个很大的 git 存储库,我想将其推送到一个自托管的 gitlab 实例。

问题是 gitlab 远程不允许我推送我的存储库:

git push --mirror https://mygitlab/xy/myrepo.git

这会给我这个错误:

Enumerating objects: 1383567, done.
Counting objects: 100% (1383567/1383567), done.
Delta compression using up to 8 threads
Compressing objects: 100% (207614/207614), done.
remote: error: object c05ac7f76dcd3e8fb3b7faf7aab9b7a855647867: 
duplicateEntries: contains duplicate file entries
remote: fatal: fsck error in packed object    

所以我做了一个 git fsck:

error in tree c05ac7f76dcd3e8fb3b7faf7aab9b7a855647867: duplicateEntries: contains duplicate file entries
error in tree 0d7286cedf43c65e1ce9f69b74baaf0ca2b73e2b: duplicateEntries: contains duplicate file entries
error in tree 7f14e6474400417d11dfd5eba89b8370c67aad3a: duplicateEntries: contains duplicate file entries

接下来我做的是检查git ls-tree c05ac7f76dcd3e8fb3b7faf7aab9b7a855647867:

100644 blob c233c88b192acfc20548d9d9f0c81c48c6a05a66    fileA.cs
100644 blob 5d6096cb75d27780cdf6da8a3b4d357515f004e0    fileB.cs
100644 blob 5d6096cb75d27780cdf6da8a3b4d357515f004e0    fileB.cs
100644 blob d2a4248bcda39c0dc3827b495f7751b7cc06c816    fileC.xaml

请注意fileB.cs显示两次,具有相同的哈希值。我认为这就是问题所在,因为为什么该文件会在同一棵树中出现两次,并且具有相同的文件名和 blob 哈希值?

现在我用谷歌搜索了这个问题,但找不到解决这个问题的方法。 我发现的一个看似不错的资源是:树包含重复的文件条目 https://stackoverflow.com/questions/13178720/tree-contains-duplicate-file-entries/24868719#24868719

然而,它基本上归结为使用 git Replace 并不能真正解决问题,因此 git fsck 仍然会打印错误并阻止我推送到远程。

然后有一个似乎完全删除了该文件(但我仍然需要该文件,但在树中只需要一次,而不是两次):https://stackoverflow.com/a/44672692/826244 https://stackoverflow.com/a/44672692/826244

还有其他方法可以解决这个问题吗?我的意思是确实应该可以修复,以便 git fsck 不会抛出任何错误,对吧?我知道在损坏的提交之后我需要重写整个历史记录。我什至找不到一种方法来获取指向特定树的提交,否则我可能可以使用变基并修补损坏的提交或其他东西。任何帮助将不胜感激!

更新: 我很确定我知道what要做,但还没有how去做吧:

  1. 从旧树创建一个新的树对象,但更正为git mktree
  2. 创建一个与引用坏树的旧提交相同的新提交,但使用新修复的树
  3. Run git filter-branch -- --all

可悲的是我不能只使用git replace --edit到坏树上然后跑git filter-branch -- --all因为filter-branch似乎只适用于提交,但忽略树替换......


你可以尝试跑步git fast-export将存储库导出到数据文件中,然后运行git fast-import将数据文件重新导入到新存储库中。 Git 将在快速导入过程中删除任何重复的条目,这将解决您的问题。

请注意,在导出时,您可能必须通过将适当的参数传递给git fast-export;既然你正在重写历史,你可能想通过--signed-tags=strip.

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

git fsck:duplicateEntries:包含重复的文件条目 - 无法推送到 gitlab 的相关文章

  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • bash:gitolite:找不到命令

    我正在尝试使用 Gitolite 在 Gitlab 中创建一个新分支 我完成安装步骤 当我遇到 设置 gitolite 部分时 我遇到了麻烦 我跟着这个link http sitaramc github com gitolite setup
  • 在 github 上的 fork 中跟踪上游的最佳实践

    摘要 对于要维护一组本地更改的上游存储库 处理长期运行跟踪的最佳实践是什么 我想让 github 上的 fork 与上游保持同步 但仍然允许清晰跟踪 fork 特有的更改 对于本次讨论 假设upstream指向主项目存储库并且origin指
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 我可以直接从我的谷歌云端硬盘在线推送/拉取吗?

    有一些方法可以通过谷歌驱动器同步 Windows 应用程序将我的本地 git 存储库同步到我的谷歌驱动器 但我想知道我是否可以完全绕过它的需要 Fro eg git remote add origin https drive google
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • Git 提交失败:“请使用 -m 或 -F 选项提供消息。”

    当我键入 git commit 命令来提交文件时 我收到以下错误消息 Microsoft Visual Studio 微软 找不到命令 错误 核心编辑器 Microsoft Visual Studio 存在问题 请使用 m 或 F 选项提供
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc
  • 除非我在项目目录中,否则 Git 不会显示日志

    我正在尝试打电话git log当我在不同的目录中时 我经过的位置 git is git log Users Leica proj1 但它说 不是 git repo 如果我cd进入这个目录 就可以正常工作了 cd Users Leica Pr
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re

随机推荐

  • 网站上的 WhatsApp 分享按钮。检测 WhatsApp 是否存在的简单方法?

    我正在我的网站上添加 WhatsApp 共享按钮 并且当用户设备上不存在 不支持 WhatsApp 功能时 我想隐藏此按钮 有简单的方法吗 或者有什么办法吗 I found http whatsapp sharing com http wh
  • 如何在 VSCode 中的 TypeScript 构建过程中忽略“node_modules”文件夹

    我正在使用 Visual Studio Code IDE 和 TypeScript 如何让它在构建过程中忽略 node modules 文件夹 或者让它构建 ts保存文件 它显示了很多错误 因为它正在尝试编译 node modules ts
  • Android - 在 Android 8 上隐藏键盘

    我在 Android 8 上隐藏键盘时遇到问题 我之前用过这个 它适用于较旧的机器人 val view activity currentFocus if view null val imm activity getSystemService
  • 即使路径中存在百分比编码部分,如何才能可靠地获取实际 URL?

    IIS 和 ASP NET MVC 有一些小故障 https stackoverflow com questions 7913830 is iis performing an illegal character substitution i
  • ServiceStack:从 Javascript 访问会话信息

    我正在使用 ServiceStack 和 AngularJs 创建 SPA 当用户登录时 我在 OnAuthenticated 方法中设置一些变量 public override void OnAuthenticated IServiceB
  • Linux 更新后 JVM 中的文件编码错误

    更新linux和java 1 6 0 13 gt 1 6 0 45 后 Java进程使用不同的文件编码 系统属性file encoding 新操作系统版本 不幸的是我不再知道以前的版本了 但我可以看出 更新出错了 我的同事首先使用 x32
  • PHP 中从类别到子类别的循环

    我们的结构类似于您在下面的屏幕截图中看到的方式 我们的数据库结构如下所示 这里在数据库表中 PID 是父 ID 其中 0 父 ID 其余 PID 是相同 id 的父 id 现在我们正在尝试获取 品牌 或 鞋类 的所有子类别 因此它应该显示该
  • JSchException:算法协商失败 diffie-hellman-group14-sha1

    我知道这个问题已经被问过几次了 但我已经尝试了许多已经给出的公认的解决方案 我正在使用 JSch 创建一个简单的 SSH 隧道 我不断在日志中收到此错误 INFO diffie hellman group14 sha1 is not ava
  • 分组结果插入到两个表中

    我有下表 CREATE TEMPORARY TABLE temp detail purchase order detail id INTEGER item id integer qty numeric 18 2 project id int
  • Scheme中的闭包和其他语言中通常的闭包有什么区别吗?

    我现在正在学习SICP 我找到了定义closureSICP 中的闭包定义 可能 与其他语言中的闭包定义不同 SICP 的说法如下 创建元素为对的对的能力是列表结构作为表示工具的重要性的本质 我们将这种能力称为 cons 的封闭性 一般来说
  • 如何通过字符串中的单个单词匹配来提取整个句子?

    所以我有一个完整的字符串 大约 10k 个字符 然后在该字符串中搜索一个单词 或多个单词 和regex word Matches scrappedstring 但如何提取包含该单词的整个句子 我正在考虑在搜索的单词后面取一个子字符串 直到第
  • 迭代器的成员资格测试

    有人可以解释一下我的代码最后 3 行中成员资格测试的行为吗 为什么它是 False 为什么迭代器和可迭代对象的成员资格测试不同 c 1 2 3 4 5 6 7 8 9 10 11 12 print 3 in c True print 3 i
  • 英特尔重置向量

    可能重复 软件初始化代码位于0xFFFFFFF0H https stackoverflow com questions 9210296 software initialization code at 0xfffffff0h 当系统启动时 I
  • Android 中 EditText 的电子邮件验证

    我编写了以下登录代码 但是当我在电子邮件 ID 后输入 时 它接受并成功登录 它不接受任何其他符号或字符 只接受 我不希望它用 登录 Override public void onCreate Bundle savedInstanceSta
  • 如果使用 jQuery 选中复选框,如何禁用文本框?

    如果用户取消选中复选框并更改文本框的背景颜色 我想禁用文本框 如果用户选中该复选框 则该文本框应该是可编辑的并更改为白色 这是代码 document ready function ba click function tex css back
  • 如何使用 Bootstrap 突出显示 HTML 表格列

    我正在使用引导程序并创建了一个表 其中我需要将列分组在一起 有我可以使用的引导选项吗 我愿意编写自己的 CSS 来做到这一点 但如果有内置的引导方法来做到这一点 我宁愿不这样做 例如 在下表中我想要Current具有一种颜色背景的列和New
  • 将两个字节字符拆分为两个单字节字符

    我有一个值为 0xB3 的字符 我需要将其分成两个单独的字符 所以 X 0xB 且 Y 0x3 我尝试过以下代码 int main char addr 0xB3 char p addr printf c c n p 0 p 1 This p
  • Linux目录不同组的权限

    我有两个目录 public 和 private 我有三个用户 chris john dan 我有两个组 pub priv 和 god 上帝 组应该具有对 公共 和 私人 的完全访问权限 pub 组应该是唯一拥有 public 权限的组 pr
  • 强调句子或部分的正确 HTML 标签是什么?

    我意识到我正在使用blockquote在我的整个 HTML 中强调学生必须学习的段落 这显然是错误的 因为blockquote旨在指定从其他来源引用的部分 就我而言 数学 段落定义或描述一个单词 并且应该在视觉上脱颖而出 经过一番研究 我发
  • git fsck:duplicateEntries:包含重复的文件条目 - 无法推送到 gitlab

    我们有一个很大的 git 存储库 我想将其推送到一个自托管的 gitlab 实例 问题是 gitlab 远程不允许我推送我的存储库 git push mirror https mygitlab xy myrepo git 这会给我这个错误