Подтвердить что ты не робот

Git -svn migration fatal: недействительный SHA1 update-ref refs/heads/master refs/remotes/trunk: команда возвратила ошибку: 128

Попытка перенести большой, но линейный репозиторий svn на git. В репозитории svn нет стандартного макета (соединительная линия, ветки, теги)... только один каталог с соединительной линии.

Ubuntu 12.4 LTS, git 1.7.9.5.

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel/COAWST --authors-file=../users.txt COAWST

...

    D   WPS/metgrid/storage_module.F
    D   WPS/metgrid/process_domain_module.F
W: -empty_dir: WPS/metgrid/gridinfo_module.F
W: -empty_dir: WPS/metgrid/input_module.F
W: -empty_dir: WPS/metgrid/interp_option_module.F
W: -empty_dir: WPS/metgrid/module_date_pack.F
W: -empty_dir: WPS/metgrid/process_domain_module.F
W: -empty_dir: WPS/metgrid/storage_module.F
r635 = c19181c9718e701788b540ed0cc559e4fbddf413 (refs/remotes/git-svn)
    M   Tools/Docs/COAWST_User_Manual.doc
r636 = 1b7849c3e5a20856c9ddb909a5f53ddf8501ad33 (refs/remotes/git-svn)
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 14143, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14039/14039), done.
Writing objects: 100% (14143/14143), done.
Total 14143 (delta 8350), reused 0 (delta 0)
fatal: refs/remotes/trunk: not a valid SHA1
update-ref refs/heads/master refs/remotes/trunk: command returned error: 128

Я пробовал варианты с комбинациями -s, -t Trunk, -t COAWST, --preserve-empty-dirs (что я хотел бы сделать), --no-meta-data (per Pro Git)... всегда одна и та же конечная ошибка.

Спасибо за любые предложения!

4b9b3361

Ответ 1

Я думаю, что вы запустили правильную команду. В качестве альтернативы вы можете запустить

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel --trunk=COAWST --authors-file=../users.txt COAWST

git -svn почти завершает работу в каждом случае. Единственное, что он пытается сделать, это установить "мастер", чтобы указать на ваш багажник. Из-за некоторой ошибки он пытается установить его на неправильное значение, но вы можете выполнить его вручную с помощью

$ git update-ref refs/heads/master refs/remotes/git-svn

Если у вас все еще есть проблемы, вы можете попытаться преобразовать репозиторий с SubGit в 3 этапа:

$ subgit configure path/to/svn/repository
#edit path/to/svn/repository/conf/subgit.conf to set trunk = COAWST:refs/heads/master and authorsFile = path/to/users.txt
$ subgit install path/to/svn/repository

Преобразованный репозиторий будет находиться в пути/в/svn/repository/conf/.git

Ответ 2

Каждый раз, когда это происходило со мной, Git просто не мог получить фиксацию из trunk в Subversion:

fatal: refs/remotes/trunk: not a valid SHA1

Причины:

  • Вы не указали макет Subversion, если он не был стандартным (ветки-теги-ветки). В частности, для ошибки - у вас нет /trunk.
  • Вы не извлекли из доработанной версии достаточно, чтобы охватить хотя бы одну фиксацию в trunk (например, используя опцию -r).
  • Сочетание вышеизложенного.

Ответ 3

У меня была такая же проблема сегодня.

Вероятно, проблема заключается в том, что в репозитории SVN нет каталога соединительных линий. Стандартные каталоги соединительных линий, тегов и веток, по-видимому, являются необязательными в SVN. Но git -svn должен знать об этом при переносе.

Также возможно, что некоторые из каталогов существуют, но называются по-разному. (например, trunk может быть назван "project" вместо "trunk", ветки могут быть названы "ветвями", как обычно, и теги могут отсутствовать. Или "trunk" можно назвать "Trunk".)

  • Если в SVN-репо нет ни одного из этих стандартных каталогов, и все просто помещается в корень репо, решение просто не пытаться клонировать стандартные svn-каталоги. Просто клонируйте корень.

  • Если они существуют (или некоторые из них), но под разными именами, git -svn должен быть указан об этих именах.

Я использовал Tortoise Git для переноса из SVN в GIT. В TortoiseGit это делается путем клонирования из репозитория svn (yep!) И проверки флажка "Из хранилища SVN".

  • Если в репозитории SVN нет соединительных линий, тегов или ветвей, просто снимите флажки "trunk", "tags" и "branch" в "Из репозитория SVN" диалогового окна клона.

  • Если стандартные каталоги есть, но называются иначе, чем нормальный, сохраните их, но напишите используемые имена в текстовом поле рядом с ними.

    (Из командной строки это можно сделать с помощью -T, -t и -b. Видеть http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-to-git-preserving-branches-and-tags-3/ в разделе "нестандартная компоновка SVN" ).

(Это были два случая, с которыми я столкнулся - могут существовать более сложные случаи. У меня было несколько репозиториев SVN, в которых не было ни сундуков, ни тегов, ни ветвей, и снятие этих трех флажков заставило его работать. У меня также был случай, называемый "проект" вместо "trunk", но каталог dir был назван обычным явлением и не было метки тегов. Снимите флажок с отметки флажка и введите имя каталога соединительной линии, чтобы этот случай работал.)