0

git-p4 を使用して perforce デポのクローンを作成しようとしています。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 を印刷し、さらに詳細を取得しました。明確さと匿名性のために修正します。障害のある 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 た 詳細な出力により、ビューが引き出されているように見えます

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
4

2 に答える 2

3

私たちは自分たちでこれに遭遇しました。P4 は昨年、git-p4 が完全にはサポートしていない新しいコマンドをいくつか追加したようです。特に「移動/削除」と「移動/追加」。

この問題を回避するために、次の行を変更しました。

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

に:

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

これまでのところ、これでうまくいっていますが、これが必ずしも確実な修正であるとは断言できません。

于 2010-05-12T22:17:48.940 に答える
1

これは、基本的にrbergmanによって提供されるパッチを使用してgit-p4の最近のバージョンで修正されたバグです。詳細については、http://git.kernel.org/?p = git / git.git; a = commit ; h=562d53fa69933b3ade2691b99cbe67722313f43cを参照してください。このパッチはおそらく後の1.6.xリリースの1つに登場し、間違いなくgitの1.7.xリリースに含まれています。

于 2010-06-09T13:56:24.897 に答える