Не удается импортировать репозиторий git в azure devops из-за поврежденного коммита. (Может клонировать его локально): Любой совет, как обойти это? - PullRequest
0 голосов
/ 19 марта 2020

Я пытался импортировать ядро ​​libre (https://github.com/LibreOffice/core) в azure репо devops. URL-адрес, который я закрываю: https://github.com/LibreOffice/core.git

Импорт продолжает сбой с ошибкой:

Oops! Your import of https://github.com/LibreOffice/core.git repository failed due to The commit object 657924e4d73d6d501c9a3ceaf62e29b8f243cead was rejected: Commit parse failed due to author identity failed to parse: Andre Fischer<andre.f.fischer <Andre Fischer<andre.f.fischer@oracle.com>>

Возможно, это связано с дополнительным <в авторе? Итак, я попытался импортировать это в другое репозиторий github, но это все равно не помогло, что говорит о том, что это не просто проблема azure devops. </p>

Я могу клонировать репо локально, но когда я пытаюсь набрать sh, что до azure devops, я получаю ту же ошибку. Я также пытался найти потенциальный поиск коммита и сменить автора, но из-за того, что существует более 400 000 коммитов, и этот довольно рано, когда мой компьютер зависает при попытке различными способами Я прочитал здесь

Любые советы о том, как обойти это, были бы действительно хороши !!

Добавлены следующие выходные данные команды быстрого экспорта и импорта:

Alloc'd objects:    4615000
Total objects:      4614971 (    426688 duplicates                  )
      blobs  :      1635681 (         0 duplicates    1511600 deltas of    1616683 attempts)
      trees  :      2531286 (    426688 duplicates    2306584 deltas of    2490676 attempts)
      commits:       448004 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:           1 (         1 loads     )
      marks:     1073741824 (   2083685 unique    )
      atoms:          87634
Memory total:        246981 KiB
       pools:         30653 KiB
     objects:        216328 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize = 1073741824
pack_report: core.packedGitLimit      = 35184372088832
pack_report: pack_used_ctr            =     429158
pack_report: pack_mmap_calls          =      32709
pack_report: pack_open_windows        =          1 /          9
pack_report: pack_mapped              =  214272731 / 9353540391
---------------------------------------------------------------------

И команда, которую я запускаю, :

git fast-export master| sed -e 's/<Joerg Skottke \[jsk\] jsk@openoffice.org>>/<jsk@openoffice.org>/' -e 's/Andre Fischer<andre.f.fischer <Andre Fischer<andre.f.fischer@oracle.com>>/Andre Fischer <andre.f.fischer@oracle.com>/' -e 's/Andre Fischer<Andre.W.Fischer <Andre Fischer<Andre.W.Fischer@Sun.COM>>/Andre Fischer <andre.f.fischer@oracle.com>/'  -e 's/Gregor Hartmann<gh <Gregor Hartmann<gh@openoffice.org>>/Joerg Skottke <jsk@openoffice.org>/' | (cd ../new-repo && git fast-import)

1 Ответ

1 голос
/ 20 марта 2020

Большинство Git провайдеров хостинга используют transfer.fsckObjects во всех своих репозиториях, поэтому любые недействительные, поврежденные или злонамеренные коммиты будут немедленно отклонены. Это препятствует тому, чтобы люди толкали объекты с помощью сломанных инструментов или использовали уязвимости безопасности в старых клиентах.

Однако это приводит к проблемам в известных репозиториях с поврежденными фиксациями, такими как LibreOffice. Дополнительные угловые скобки здесь явно не разрешены, и Git отклоняет принятие из-за них.

Некоторые провайдеры хостинга могут ослабить одну или несколько проверок для импорта существующего, хорошо известного репозитория, поэтому стоило бы попросить Azure поддержки DevOps, если это то, что они могут сделать. Если нет, то лучше всего использовать git fast-export для экспорта репозитория, изменить поток для исправления идентификаторов автора (и, при необходимости, коммиттера), а затем импортировать его в репозиторий fre sh, используя git fast-import. Обратите внимание, что при этом будут изменены идентификаторы объектов любых коммитов, начиная с недопустимого и аннулируя любые последующие подписи тегов.

Вы можете сделать это с помощью чего-то вроде следующего:

$ git init ../new-repo
$ git fast-export | \
  perl -pe 's/(author|committer) Andre Fischer<andre.f.fischer <Andre Fischer<andre.f.fischer@oracle.com>>/$1 Andre Fischer <andre.f.fischer@oracle.com>/' | \
  (cd ../new-repo && git fast-import)
...