Как устранить несоответствие индекса git-svn? - PullRequest
26 голосов
/ 02 ноября 2010

Когда я сделал git svn rebase, он остановился в один момент, сказав:

Index mismatch: SHA key of a tree != SHA key of another tree. (я узнал, что эти ключи SHA соответствуют дереву, а не коммиту из git show двух вышеупомянутыхКлючи ша.)

re-reading <sha index of a commit in svn/trunk>
... list of files ...
fatal: bad object <SHA1 index of the bad object>
rev-list -1 <SHA1 index of the bad object> --not <SHA1 index of the revision it was trying to re-read>: command returned error: 128

Я не очень разбираюсь во внутренней работе git, поэтому есть последовательность шагов, которые нужно выполнить, чтобы разобрать подобные проблемы и, возможно, решить их?

Ответы [ 9 ]

32 голосов
/ 10 января 2013

Пожалуйста, не удаляйте папку .git / svn, чтобы исправить это. Это требует, чтобы вы восстановили все, это раздражает, это займет некоторое время (для размера моего репо несколько часов), и это НЕ НАДО.

Я нашел правильный ответ здесь и включил его ниже.

Из ссылки:

Внутри каталога .git выполните следующее:

$ find . -exec grep -Hin 5b32d4ac2e03a566830f30a702523c68dbdf715b {} \;
Binary file ./svn/.caches/lookup_svn_merge.db matches
Binary file ./svn/.caches/check_cherry_pick.db matches

Теперь удалите соответствующие .svn / .caches из выходных данных первой команды

$ rm ./svn/.caches/lookup_svn_merge.db
$ rm ./svn/.caches/check_cherry_pick.db

Теперь git svn rebase или git svn fetch, насколько вам нравится.

32 голосов
/ 10 января 2011

Я дважды сталкивался с этой ошибкой, и оба раза исправлял ее, удаляя папку svn внутри папки .git.

rm -r .git/svn

затем перестройте метаданные svn с помощью:

git svn fetch

Вы, вероятно, увидите сообщение в виде:

Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
    .git/svn
    (required for this version (1.7.0.4) of git-svn) does not exist.
Done migrating from a git-svn v1 layout

и через некоторое время (перестройка может занять некоторое время, особенно в больших хранилищах), вы должны снова получить рабочее зеркало хранилища svn.

13 голосов
/ 09 декабря 2013

Обновление git-клиента и повторное получение последних SVN-коммитов, используя:

git svn reset -r 12345
git svn rebase

, где 12345 - это существующая версия SVN.

4 голосов
/ 17 декабря 2014

В моем случае проблема была вызвана новым / неизвестным автором svn, которого не было в моем authors файле, который был настроен для использования git-svn.В выходных данных он сообщил, что я проигнорировал первые несколько прочтений:

Index mismatch: <leftsha1> != <rightsha1>
rereading <anothersha1>
        ... list of files ...
Author: <name> not defined in /path/to/authors file

Так что мне дали имя, которое я пропустил, и какой файл добавить, а также (я получил письмо от своих организацийРеестр пользователей) и прошел гладко.

1 голос
/ 13 января 2011

Проблема в том, что вы должны делать это систематически в этом случае:

  • используйте git + svn
  • создать ветку на svn с помощью git-svn
  • объединить ветку с транком с помощью svn tools
  • удалить ветку svn
  • сделать git-svn rebase

Что-то отсутствует, все падает. Единственный известный мне способ восстановления - это удалить все svn в .git и пересобрать все. Это просто раздражает и займет некоторое время!

0 голосов
/ 13 июля 2018

Я столкнулся с этим во время первоначального клонирования, и выяснилось, что кто-то создал ветку с именем trunk, которая конфликтует с реальной магистралью.После игнорирования / ветки / багажник все заработало

0 голосов
/ 17 мая 2017

Я получил эту ошибку:

Index mismatch: <sha> != <sha> re-reading <sha index of a commit in svn/trunk> ... list of files ... <path> was not found in commit <sha> (r<svn rev>)

Глядя в репозитории SVN на историю указанного пути, я обнаружил ревизию SVN, в которую был добавлен файл. Но, глядя в Git на коммит, созданный для этой ревизии, я обнаружил, что он не содержит никаких файлов!

Я думаю, что это было вызвано ранее полным диском. После git svn reset -r возврата к исправлению прерванного коммита Git git svn fetch снова заработал нормально.

0 голосов
/ 17 февраля 2017

Может быть, что-то делать с функцией Copy-On-Write вашей файловой системы (ext4 / btrfs / etc ...)?

См .: https://stackoverflow.com/a/42299634/7491491

0 голосов
/ 05 ноября 2010

Я только что сам допустил эту ошибку. Просто удалите ссылку, вот так:

rm .git/refs/remotes/git-svn

Это должно устранить ошибку.

...