我需要使用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版本的错误吗?有关如何解决问题的任何想法?当然我试着在网上寻求帮助,但到目前为止我找不到任何人面对任何类似的东西。
答案 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
显示所有分支和按日期排序的提交。