Git-P4 Sync не работает - таинственный след стека

StackOverflow https://stackoverflow.com/questions/2724118

  •  01-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать GIT-P4 для клона Perforce Depot. Я продолжаю бегать к проблеме в скрипте Git-P4, где GIT-P4 пытается получить доступ к ключу Dict, которая не определяется и бросает трассировку.

[~/p4/prod@ernie02] (master) $ 
git p4 sync --verbose --use-client-spec //depot/prod/
Reading pipe: git config git-p4.user
Reading pipe: git config git-p4.password
Reading pipe: git config git-p4.port
Reading pipe: git config git-p4.host
Reading pipe: git config git-p4.client
p4 -u mkramer -c mkramer -G client -o
Opening pipe: p4 -u mkramer -c mkramer -G client -o
None
Doing initial import of //depot/prod/ from revision #head into refs/remotes/p4/master
p4 -u mkramer -c mkramer -G files //depot/prod/...#head
Opening pipe: p4 -u mkramer -c mkramer -G files //depot/prod/...#head
commit into refs/remotes/p4/master
p4 -u mkramer -c mkramer -G -x - print
Opening pipe: p4 -u mkramer -c mkramer -G -x - print
p4 -u mkramer -c mkramer -G users
Opening pipe: p4 -u mkramer -c mkramer -G users
Traceback (most recent call last):
  File "/home/mkramer/git/bin/git-p4", line 1922, in <module>
    main()
  File "/home/mkramer/git/bin/git-p4", line 1917, in main
    if not cmd.run(args):
  File "/home/mkramer/git/bin/git-p4", line 1651, in run
    self.importHeadRevision(revision)
  File "/home/mkramer/git/bin/git-p4", line 1461, in importHeadRevision
    self.commit(details, self.extractFilesFromCommit(details), self.branch, self.depotPaths)
  File "/home/mkramer/git/bin/git-p4", line 1063, in commit
    data = file['data']
KeyError: 'data'

Я вошел в сценарий и напечатал файл Dict прямо в этот момент и получил еще подробную информацию, что я пересмотрю на ясность и анонимность. Неисправный дикт выглядел так:

{'action': 'move/delete', 'path': '//depot/prod/foo/bar', 'rev': '3', 'type': 'xtext'}

Мой клиент P4 выглядит так:

Client: mkramer
Update: 2010/04/27 14:46:10
Access: 2010/04/27 14:51:29

Owner:  mkramer
Description:
        Created by mkramer.
Root:   z:\p4
AltRoots:
        z:\p4
        /home/mkramer/p4
Options:        noallwrite noclobber nocompress unlocked nomodtime normdir
SubmitOptions:  submitunchanged
LineEnd:        share
View:

        //depot/prod/... //mkramer/prod/...
        -//depot/.../foo/... //mkramer/.../foo/...

Как видите, неисправный Dict - это файл, который не существует в моем представлении клиента. Я верю, что это источник проблемы. Тем не менее, я четко запускаю команду с помощью --use-Client-Spec. Я также попробовал git config git-p4.useclientspec true Verbose Exputa это выглядит так, будто он вытягивает мой вид из

Opening pipe: p4 -u mkramer -c mkramer -G client -o.  

Если я бегу p4 -u mkramer -c mkramer client -o Я вижу правильный вид.

Если я бегу p4 -u mkramer -c mkramer files //depot/prod/...#head Я вижу файлы, которые не на мой взгляд.

Версии моего программного обеспечения:

[~/p4/prod@ernie02] (master) $ p4 -V
Perforce - The Fast Software Configuration Management System.
Copyright 1995-2009 Perforce Software.  All rights reserved.
Rev. P4/LINUX26X86_64/2009.1/205670 (2009/06/29).
[~/p4/prod@ernie02] (master) $ git --version
git version 1.7.0.5
[~/p4/prod@ernie02] (master) $ python -V
Python 2.6.5
Это было полезно?

Решение

Мы только что побежали в это сами. P4, по-видимому, добавил несколько новых команд в прошлом году, что Git-P4 не поддерживает полностью; Особенно «переместить / удалить» и «переместить / добавить».

Для того, чтобы поработать по вопросу, мы изменили линию:

if file["action"] in ("delete", "purge"):

к:

if file["action"] in ("delete", "purge", "move/delete"):

Пока что это работает для нас, но я не буду утверждать, что это обязательно надежное исправление.

Другие советы

Это ошибка, которая была закреплена в последних версиях GIT-P4, используя по существу патч, предоставляемый Rbergman. Видеть http://git.kernel.org/?p=git/git.git;a=commit;h=562D53FA69933B3CADE2691B99CBE67722313F43C. Больше подробностей; Этот патч, вероятно, появился в одном из более поздних выпусков 1.6.x и определенно в релизам Git 1.7.x.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top