如何修复 git 存储库中的“错误日期”问题?

2024-04-25

我最近尝试将存储库导入 GitHub(来自 Bitbucket),但导入失败。 GitHub 技术支持通知我,他们在存储库中看到“错误日期”问题,我应该运行git fsck在存储库上。所以我从 BitBucket 克隆它并运行git fsck这就是我得到的:

git fsck Checking object directories: 100% (256/256), done. 
error in commit fda45b4b6b06f6b815341c1f26de827c769f48b6: badDate: invalid
 author/committer line - bad date error in commit
 636d259fd0ac343af2a5561ff799a54a6aeb9b1c: badDate: invalid
 author/committer line - bad date error in commit
 41dc786816992e3c42c904e8c848aa1078475386: badDate: invalid
 author/committer line - bad date error in commit
 c55a0fa0d98e02aa4621be202d7b7d21ed2ff2ab: badDate: invalid
 author/committer line - bad date error in commit
 e6ad8f5ea7cf6441b6ea6ab5583117113a8f49fb: badDate: invalid
 author/committer line - bad date error in commit
 4aea97fdd999484319a9fbbc4dc42b024e1eba80: badDate: invalid
 author/committer line - bad date error in commit
 531f7783e383868c1d52a1bf2dc3212f5e10a91c: badDate: invalid
 author/committer line - bad date Checking objects: 100% (546/546),
 done.

好吧,天哪,这是怎么发生的?我什至不知道如何开始解决这个问题。搜索“糟糕的约会”并没有产生任何有用的建议。

一位好心的 git 大师愿意引导我走向正确的方向吗?


好吧,天哪,这是怎么发生的?

有人使用了错误版本的 Git(或者构建 Git 对象的错误工具)。谁、何时、如何等等,不可能说出来,但是如果你检查各种错误的提交,那可能会提供一些非常大的线索,因为错误的行应该具有以下一般形式:

author A U Thor <[email protected] /cdn-cgi/l/email-protection> 1575578639 -0800

or:

committer A U Thor <[email protected] /cdn-cgi/l/email-protection> 1575578639 -0800

日期和时间戳是最后两个数字字段。介于两者之间的内容可能会告诉您该向谁询问他们使用的 Git 版本。

我什至不知道如何开始解决这个问题。

从技术上来说,你can't自行修复错误的提交。原因是,无论好坏,原始数据in提交是提交的哈希 ID 的来源。由于哈希IDis提交的真实姓名,提交的真实姓名要求该提交的数据是坏的。如果你did修复它们,它们将成为不同的提交,这些提交将具有不同的哈希 ID 名称。

As 冯克说 https://stackoverflow.com/a/59231457/1256452,要生成一个新的、不兼容但已纠正的存储库,您必须用新的和改进的提交替换每个错误的提交,也许使用git filter-branch或新的git filter-repo。无论您使用什么工具或方法,您都需要提供某种方法来替换坏的author and/or committer错误提交的提交头中的行,以及新的正确行——满足 Git 内部要求的日期和时间戳。

用更正的提交替换了错误的提交后,您现在还必须替换每个后续(后代)提交,因为这些提交的直接子级将其父哈希 ID(错误提交的哈希 ID)存储在其中作为其数据的一部分。因此,您必须编写一个新的更正的子提交来保留所有内容except父哈希 ID。这会使子提交的子提交无效,因此也必须重写这些子提交,依此类推:所有后代提交。

这正是这些过滤器分支/过滤器回购工具的作用do。您(以某种方式)在存储库中挑选出一个错误的提交,然后他们将其复制到新的和改进的提交中。然后,他们也复制原始错误提交的所有后代,以便从更正的提交衍生出一个新的家谱。

由于存储库中的提交集is复制所有这些提交的结果是一个全新的历史记录 - 一个新的存储库,旧存储库的所有用户现在必须切换到使用。因此,纠正存储库的技术部分通常是整个过程中最简单的部分。找出问题所在以及如何使用工具重写历史需要一些工作,但只要这样做一次就可以了。但是,您必须跟踪旧存储库的每个用户,并以某种方式说服他们停止使用该存储库并开始使用新的和改进的存储库。

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

如何修复 git 存储库中的“错误日期”问题? 的相关文章

  • Subversion:暂存文件以显式提交?

    我已经非常习惯 git 的方式 即必须接触要提交的每个文件 并且在执行此操作时仔细检查差异 现在在工作中我必须使用 svn 并且我总是不小心提交一些东西 有没有办法让 subversion 的行为像 git 一样 因为我必须明确告诉每个文件
  • Phonegap - 自动包含正确的科尔多瓦

    我正在 iOS 和 Android 上开发一个 PhoneGap 应用程序 并使用 git 控制我的 www 目录版本 我知道我的 HTML 文件需要包含正确的 Cordova js 文件 取决于我当前正在开发的平台 当有人在 Androi
  • Git - -m 是什么意思 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions In Gi
  • 在发出拉取请求之前我应该​​使用 dev 分支进行变基吗?

    我们当前的工作流程 从 dev 创建一个功能分支 开发功能并推送分支后 执行以下操作 git checkout dev git pull rebase 开发中 git checkout my feature branch git rebas
  • 为什么在将应用程序部署到 Heroku 时会出现此错误?

    使用 git hub 将应用程序部署到 heroku 时遇到某种错误 问题是 我不理解 heroku 日志和随之而来的错误 这是 Heroku 日志 Marcuss MacBook Pro Weather App marcushurney
  • gitosis 要求输入密码

    我已经按照以下说明设置了 gitosis 服务器here http scie nti st 2007 11 14 hosting git repositories the easy and secure way 它对于初始用户来说效果很好
  • 如何在 git 中使用 --work-tree 选项?我不断收到错误消息

    我有一个普通的存储库 其中有一个工作树和一个与工作树位于同一目录中的 git 文件夹 我正在尝试使用以下命令从该位置外部运行 git 命令 git git dir path to repo git work tree path to rep
  • jquery 克隆组合框无法运行

    我有下表 当我按下第一个按钮时 我调用 jquery 来克隆第一行并添加新行 table class table table striped table bordered bootstrap datatable style font siz
  • git:显示所有已修改的文件 - 已暂存和未暂存

    我需要一个命令给我所有修改过的文件 这包括暂存 即新添加的文件 和非暂存更改 在普通列表我可以在脚本中使用它 虽然这个问题可能听起来很熟悉 但我只找到接近我想要做的命令 git ls files m 列出 非分阶段 修改但忽略了上演的和新的
  • Heroku上传-预编译资产失败

    我需要帮助 当尝试将我的应用程序上传到heroku时 我收到此错误 有人知道为什么吗 有几个是错的 谢谢 Using rake 10 1 0 Using tlsmail 0 0 1 Using uglifier 2 1 2 Your bun
  • 是否可以在一台机器上使用 GitHub 和 GitLab?

    我的账户位于GitHub and GitLab 我生成了 RSA 密钥并将其添加到我的帐户中GitLab 但现在我需要与GitHub在第二个项目上 我知道GitLab和GitHub都使用git 请告诉我是否可以在一台机器上使用 GitHub
  • Git 大文件存储与 Google 云存储

    我是该项目的一部分 我们使用 git 存储库托管在谷歌云源代码库 https cloud google com source repositories 现在我们使用谷歌云存储 https cloud google com storage 存
  • 错误“致命:无法快进,正在中止”

    为什么 Git 不再允许我快进合并 如果我尝试使用强制它 ff only 我收到消息 fatal 无法快进 中止 我意识到有巨大的优势merge no ff 但我只是困惑为什么我不能 ff only now 免责声明 这些命令会将远程分支的
  • 如何将/ff分支提升到HEAD

    我有一个受保护的分支 只有在集成构建上的集成构建通过后 才应提升 快进该分支 我目前尝试通过在集成分支的拉取请求上构建集成来解决这个问题 一旦成功 只需将发布分支快速转发到集成分支的尖端 但是 当我在 TFS 构建系统上构建分支时 它将检出
  • 撤消 git merge(尚未推送)

    我只是将一些更改提交到我的功能分支之一 feedback tab 然后签出 master 并将它们合并到那里 我实际上打算将它们合并到我的 开发 分支中 现在 master 领先于 origin master 其远程 17 个提交 我还没有
  • Git Grep 颜色选项解释和/或比较

    我正在尝试自定义我的 Git 颜色 读完后文档 https git scm com docs git config 我找到了我想要设置的选项 除了 Grep 之外 一切都工作正常 我意识到 我过去并没有真正使用过它 我想用相同的调色板为其设
  • 通过 Git/SVN 将前缀 ? 添加到代码中

    怎么加前缀 v VersionNumber使用 Git SVN 高效地访问存储库中的每个文件 我发现 SO 使用这种做法为其存储库中的每个特定文件提供版本号 他们使用SVN 我想知道如何使用 Git 做同样的事情 举几个例子 1 2 在你的
  • git 克隆密码存储或缓存在哪里?

    环境定义 使用Windows 10操作系统 我使用 githttps git scm com https git scm com 和 Github 的 Git Shell 背景 当我发出如下所示的 git clone 命令时 git clo
  • Git Bash Shell 可以使用默认的 Windows 快捷方式进行复制和粘贴吗?

    我希望能够使用 Ctrl C 和 Ctrl V 复制并粘贴到 Git Bash Shell 中 但是 shell 具有 Ctrl Insert 和 Shift Insert 作为这些操作 我没有看到更改这些快捷键的明显方法 我错过了一些明显
  • Git - 忽略对配置文件的特定修改

    我的项目中有一个配置文件 其中包含数据库的连接字符串以及多个应用程序设置 例如

随机推荐