git-p4 submit терпит неудачу с "Недопустимым именем объекта HEAD ~ 261" - PullRequest
3 голосов
/ 22 апреля 2010

У меня есть git-репозиторий, который я хотел бы отразить в репозитории Perforce. Я скачал скрипт git-p4 (более свежую версию, которая не выдает предупреждения об устаревании) и работал с этим. Я понял, как вытащить изменения из Perforce, но я получаю сообщение об ошибке при попытке синхронизировать изменения из репозитория git. Вот что я сделал до сих пор:

git clone git@github.com:asdf/qwerty.git
git-p4 sync //depot/path/to/querty
git merge remotes/p4/master     (there was a single README file...)

Итак, я скопировал оригинал в новый чистый каталог, получил прекрасно выглядящее объединенное дерево файлов, и git status показывает, что я в курсе. Но:

> git-p4 submit
fatal: Not a valid object name HEAD~261
Command failed: git cat-file commit HEAD~261

Эта тема в списке рассылки git , кажется, актуальна, но я не могу понять, что они делают со всеми A, B и C. Может кто-нибудь уточнить, что означает «Недопустимое имя объекта», и что я могу сделать, чтобы решить проблему? Все, что я хочу сделать, это периодически делать снимок источника / мастера в Perforce; полная история не требуется. Благодаря.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

9 лет спустя эта проблема может исчезнуть с Git 2.23 (3 квартал 2019 г.)

См. коммит c3f2358 (28 мая 2019 г.) Майк Мюллер (mdymike) .
(Объединено Junio ​​C Hamano - gitster - в commit add59c4 , 17 июня 2019 г.)

p4 unshelve: исправить «Not a valid object name HEAD0» в Windows

git p4 unshelve не удалось с этими ошибками:

fatal: Not a valid object name HEAD0
Command failed: git cat-file commit HEAD^0

(git version 2.21.0.windows.1, python 2.7.16)

Вызов pOpen, используемый git-p4 для вызова команды git, может занять строка или массив в качестве первого аргумента.
Форма массива предпочтительна, потому что специфичное для платформы экранирование специальных символов будет обрабатываться автоматически. (https://docs.python.org/2/library/subprocess.html)
Однако метод extractLogMessageFromGitCommit использовал строку форма и поэтому символ вставки (^) в аргументе HEAD^ 0 не был сбежал в Windows.
Символ каретки является escape-символом, поэтому команда git получала HEAD0.

Поведение можно подтвердить, набрав ECHO HEAD^0 в команде подсказка, которая выдает HEAD0.

Решение состоит в том, чтобы просто использовать формат массива для передачи команды в fOpen, который в любом случае рекомендуется и используется в других частях этого кода.

0 голосов
/ 22 апреля 2010
fatal: Not a valid object name

должно означать, что каким-то образом заголовок пульта дистанционного управления указывает на неправильную ссылку.
Другими словами, когда вы выполняете импорт P4 в git-репо, нет способа отправить из этого git-репо в P4,из-за неправильного SHA1.Зачем?Я не знаю.

Вот почему в упомянутой вами теме пользователь:

  • клонирует репозиторий P4 в B с --import-local ("Импорт в * 1009"*, а не refs/remotes "),
  • сделать B (клон Git репо p4) голое репо (так что вы никогда не будете работать воно, поскольку его рабочее дерево пусто)
  • исправляет HEAD B, чтобы ссылаться на главную ветку p4, импортированную в B

  • клон B в Cрепозиторий non-bare (его рабочее дерево не пустое, вы можете работать в нем)

B было только для первоначального импорта.

Остальныеработа выполняется в C (у которого нет проблем с некорректным SHA1) с:

  • git-p4 sync (для объявления в C remotes/p4/master в дополнение к remotes/origin/*)
  • git-p4 submit
...