пустое имя идентификатора ветки фильтра git (для <>) запрещено - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно использовать 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 ]

0 голосов
/ 14 мая 2018

В конце концов я обнаружил, что было два идентичных коммита с одинаковыми комментариями и модификациями, но один из них был с пустым идентификатором.

git log -grep='My commit comment'

возвращал только тот, у кого была правильная личность, так что его было трудно обнаружить. Я нашел его, используя gitk, показывая все ветви и коммиты, отсортированные по дате.

0 голосов
/ 14 мая 2018

В качестве диагностического шага вы можете попробовать выполнить ту же операцию с помощью BFG Repo-Cleaner :

$ bfg --delete-folders a_folder

Если BFG также дает сбой, возможно, у вас есть некоторыевид поврежденного объекта git в вашем репозитории, который не может прочитать ни реализация Git, ни C-Git, ни JGit (библиотека Java, используемая BFG).

Если BFG работает, вы, вероятно, столкнулись сошибка в ветке git-filter, о которой стоит сообщить в список рассылки git после того, как вы убедились, что это происходит в последней версии Git (в настоящее время v2.17.0).

...