代码之家  ›  专栏  ›  技术社区  ›  masonk

Git-P4同步不工作-神秘的堆栈跟踪

  •  0
  • masonk  · 技术社区  · 14 年前

    我想用git-p4克隆性能仓库。我一直在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 冗长的输出使它看起来像是将视图从

    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
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   rbergman    14 年前

    我们自己就碰到了这个。P4去年似乎添加了一些Git-P4不完全支持的新命令,特别是“移动/删除”和“移动/添加”。

    为了解决这个问题,我们更改了行:

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

    到:

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

    到目前为止,这对我们有效,但我不会断言这必然是一个强大的修复。

        2
  •  1
  •   Emil Sit    14 年前

    这是一个bug,在最新版本的git-p4中使用了由rbergman提供的补丁进行了修复。见 http://git.kernel.org/?p=git/git.git;a=commit;h=562d53fa69933b3ade2691b99cbe67722313f43c 更详细地说,这个补丁可能出现在后来的1.6.x版本中,并且肯定出现在Git的1.7.x版本中。