【问题标题】:nulInCommit: NUL byte in the commit object bodynulInCommit:提交对象主体中的 NUL 字节
【发布时间】:2020-03-24 08:19:49
【问题描述】:

我正在尝试使用这些步骤使用命令行将我的一个项目从 GitLab 导出到 GitHub。 [通过命令行迁移项目] (https://help.github.com/en/github/importing-your-projects-to-github/importing-a-git-repository-using-the-command-line)

但是,在推送到远程存储库期间迁移失败,错误为“nulInCommit: NUL byte in the commit object body”。这是因为提交历史对象之一中的 NUL 字节。

我确实知道我们在提交消息中确实面临 NUL 字节错误,我们可以通过 rebase 改写,但这个错误表明错误在对象主体,而且我发现的特定提交是 合并提交所以我无法在提交历史中重新设置/改写或更改它。

有人可以帮我解决如何在 Git 项目的提交历史中解决这个问题吗?

Checking object directories: 100% (256/256), done.
warning in commit 8affc08283444c3fe5c8a748e113bfd3545512dd: nulInCommit: NUL byte in the commit object body
Checking objects: 100% (117117/117117), done.```

【问题讨论】:

  • 推送成功了吗?这表示这是一个警告,而不是错误。
  • 不,它因错误远程被拒绝而失败,并且我提到的错误为 nullInCommit。我之前放置的控制台日志是从“git fsck”命令中获取的,用于识别导致错误的提交。 ```

标签: github git-rewrite-history gitlab-ce


【解决方案1】:

GitHub 通常在所有新对象上运行fsck,以防止推送损坏或恶意对象。大多数其他托管站点也是如此。但是,如果您要导入存在问题的项目,如果您联系他们,他们有时可以取消对初始导入的限制。

如果你这样做了,但他们说不能,你可以使用以下方法重写数据:

$ git init ../new-repo
$ git fast-export --all | (cd ../new-repo && git fast-import && git checkout)

这将重写历史记录以仅包含有效输入,并在此之后使标签上的任何签名无效,并更改对象 ID。您可能需要从 git fast-export --all 编辑流以手动删除 NUL 字节;如果是这样,您可以将其重定向到一个文件并编辑该文件,然后将其发送到新仓库中的git fast-import

【讨论】:

  • 嗨@bk2204。我收到无法写入 blob 错误。 ```git-fast-import 统计:pack_report:getpagesize()= 65536 pack_report:core.packedGitWindowSize = 1073741824 pack_report:core.packedGitLimit = 35184372088832 pack_report:pack_used_ctr = 0 pack_report:pack_mmap_calls = 0 pack_report:pack_open_windows = 0 / pack_mapped = 0 / 0 致命:无法写入 blob '555ff3548206e906f38e5f457f8a291f3ccfe46b':参数无效
  • 您需要指定运行的操作系统、Git 版本和环境。这不是您通常应该收到的错误,因此它可能表示某种系统问题。
  • 操作系统 - Windows 10 Git 版本 - git 版本 2.25.1.windows.1 环境 - Git Bash (Java - JDK-1.8.0_161)
  • 我在 Linux 机器上试了试,现在效果很好。非常感谢@bk2204。还有一件事。导入后,我确实看到了所有分支,但是,我无法将它们全部直接推送到新存储库。我尝试了以下方法,但没有一个会推动所有分支,但只有 master。 ``` git push --all origin -u git push origin ':' ``` 我确实有大约 800 个分支,repo 大小以 GB 为单位。那么,您对如何将所有快速导入的分支推送到远程新存储库有什么建议吗?
  • 如果您遇到推送问题,那应该是一个单独的问题。有太多可能的事情可能会出错,以至于无法在评论中得到适当的回答。
猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多