nulInCommit:提交对象主体中的 NUL 字节

nulInCommit: NUL byte in the commit object body

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

但是,在推送到远程存储库期间迁移失败,错误为“nulInCommit:提交对象正文中的 NUL 字节”。这是因为其中一个提交历史对象中的 NUL 字节。

我知道我们在提交消息中确实遇到了 NUL 字节错误,我们可以通过 rebase 改写,但这个错误显示错误在对象主体,而且我发现的特定提交是 merge 提交 所以我无法 rebase/reword 或在提交历史记录中更改它。

有人可以帮我解决 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.```

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