不允许使用git filter-branch空标识名称(对于<>)

时间:2018-05-14 15:10:20

标签: git git-filter-branch git-rewrite-history

我需要使用git filter-branch来重写存储库的历史记录。 似乎无论我尝试使用filter-branch命令,它都会在一个特定的提交中堆叠,并且出现空标识名称错误。 例如:

git filter-branch --tree-filter 'rm -f -R a_folder' -- --all

给出

Rewrite 1acdc25e87c404e974610b9517f62b4127c3ccac (1574/3846) (43 seconds passed, remaining 62 predicted)
fatal: empty ident name (for <>) not allowed
could not write rewritten commit

如果我这样做:

git show 1acdc25e87c404e974610b9517f62b4127c3ccac

我得到以下内容:

commit 1acdc25e87c404e974610b9517f62b4127c3ccac
Author:  <>
Date:   Mon Apr 27 19:31:42 2015 +0100

My Commit comment

diff --git a/file.cpp b/file.cpp
index 4db77cf..21b6fc0 100644
--- a/file.cpp
+++ b/file.cpp
@@ -50,6 +50,20 @@ E-mail: myEmail@mydomain.com

...Things I modified...

所以似乎问题在于提交者名称是空的。但是,如果我查看正在重写的原始提交(因此具有相同的注释和修改),我看到提交者的名称和电子邮件都没问题:

commit a1aa0612f35af3acf376938d355da0ecca6376a6
Author: My Name <myEmail@mydomain.com>
Date:   Mon Apr 27 19:31:42 2015 +0100

    My Commit comment

我在Ubuntu 16.04.4上使用git版本2.7.4。

前段时间我在同一个存储库上执行了重写操作,没有遇到任何问题。只能在不同的机器上,我无法访问它。

我有可能面对这个git版本的错误吗?有关如何解决问题的任何想法?当然我试着在网上寻求帮助,但到目前为止我找不到任何人面对任何类似的东西。

2 个答案:

答案 0 :(得分:2)

作为诊断步骤,您可以尝试使用BFG Repo-Cleaner执行相同的操作:

$ bfg --delete-folders a_folder

如果BFG也失败了,你的存储库中可能会遇到某种损坏的git对象,它既不能实现Git,也不能实现C-Git和JGit(BFG使用的Java库)都不能读取。< / p>

如果BFG正常工作,你可能会遇到一个git-filter分支的错误,一旦你确认它发生在最新版本的Git(目前为v2.17.0)中,就可能值得报告给git邮件列表

答案 1 :(得分:0)

最终我发现有两个相同的提交具有相同的评论和修改,但其中一个具有空的身份。

git log -grep='My commit comment'

只返回具有正确身份的那个,所以很难发现。我发现它使用gitk显示所有分支和按日期排序的提交。