Пустое имя идентификатора ветки фильтра git (для <>) не допускается
Мне нужно использовать 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
Я использую git версии 2.7.4 в Ubuntu 16.04.4.
Некоторое время назад я без проблем выполнил операции перезаписи в этом же хранилище. Только на другой машине, к которой у меня больше нет доступа.
Возможно ли столкнуться с ошибкой в этой версии git? Любая идея о том, как устранить проблему? Конечно, я пытался искать помощь в Интернете, но пока не смог найти никого, кто сталкивался бы с чем-нибудь подобным.
2 ответа
В качестве диагностического шага вы можете попробовать выполнить ту же операцию с помощью BFG Repo-Cleaner:
$ bfg --delete-folders a_folder
Если BFG также дает сбой, возможно, в вашем хранилище есть какой-то поврежденный объект git, который не может прочитать ни реализация Git, ни C-Git, ни JGit (библиотека Java, используемая BFG).
Если BFG работает, вы, возможно, столкнулись с ошибкой в ветке git-filter, о которой стоит сообщить в список рассылки git, как только вы убедились, что это происходит в последней версии Git (в настоящее время v2.17.0).
В конце концов я обнаружил, что было два одинаковых коммита с одинаковыми комментариями и модификациями, но один из них был с пустым идентификатором.
git log -grep='My commit comment'
возвращал только тот, у которого была правильная личность, так что его было трудно обнаружить. Я нашел это с помощью gitk
показывая все ветки и коммиты, отсортированные по дате.