Back to Top

使用Git p4管理Perforce

公司某项目使用了Perforce 作为版本控制工具,通过内部分享的ppt了解到它和svn、git有着挺大区别,也很容易误操作,偶然间发现Git可以为Perforce 的客户端,或许这样能保险点。

使用Git管理Perforce有两种方案:

Perforce Git Fusion

这是Perforce公司提供的一种方案,主要是在Perforce服务端配置 Git Fusion,客户端使用标准的Git操作。

我认为这是最好的用Git管理Perforce的方案,不过需要super用户创建,所以我无法实际使用。

部署很方便,Perforce提供了虚拟机镜像,按照提示和文档配置即可。

Collaborating within a Git ecosystem

Git p4

Git p4是Git项目提供的一种方案,它是个Python脚本,封装了P4命令。

相关文档:Git - git-p4 Documentation

安装及部署

  1. 安装P4V或P4,推荐P4V
  2. 安装 Git Client
  3. 安装 Python2
  4. 使用P4V建立工作区并取代码(可选)

    这一步并非必须,但用它可以减少一些Git p4的配置,比如密码不需要保存在Git的配置文件中了。

使用示例

如果无法使用git p4命令可以参考其文档中的方法,修改对应配置文件改为可用,或者直接使用git_p4这个脚本。

$ git p4 clone [<sync options>] [<clone options>] <p4 depot path>…​
$ git p4 sync [<sync options>] [<p4 depot path>…​]
$ git p4 rebase
$ git p4 submit [<submit options>] [<master branch name>]
  1. 取Perforce库到本地:

    $ git p4 clone //depot/path/project

  2. 使用Git命令提交到本地库:

    $ cd project

    $ vi foo.h

    $ git commit -a -m "edited foo.h"

  3. 更新本地库到Perforce库最新版本:

    $ git p4 rebase

  4. 提交本地库到Perforce库:

    $ git p4 submit

常见问题

  1. 编码问题

    首先确定服务器有没有开启Unicode mode,如果没开启,需要根据团队的喜好猜测编码,比如,我们团队内文件名和注释有中文和英文,成员大都使用Windows,由此可推测编码应当是GB2312(或GBK)

  2. 环境配置问题

    建议先使用P4V取库,它会创建一些环境变量,减少Git p4的配置。

    1. 服务器未配置(一般使用P4V后不用配置)

      $ git config --global git-p4. port "192.168.1.1:1666"

    2. 用户未配置

      $ git config --global git-p4.user "username"

    3. 密码未配置(一般使用P4V后不用配置)

      $ git config --global git-p4.password "password"

    4. 路径乱码

      $ git config --global git-p4.pathEncoding "gb2312"

    5. 日志乱码

      使用我修改过的git-p4 (已提交pr,尚未通过)

      $ git config --global git-p4.descEncoding "gb2312"

  3. 各种错误处理

    Git p4是对P4命令的封装,建议根据报错阅读脚本,在控制台执行对应的P4命令进行解决。

    1. 提交时提示: could not get client spec.

      执行 p4 -u username client 编辑配置文件中的以下两条:

      Client: XXX-PC

      Root: E:\PerforceCache

      这会建立一个名为XXX-PCWorkspace,并且将路径设在E:\PerforceCache,如果之前用P4V取过,可以直接设置为对应的配置。如果工作区没有取过,第一次提交时将会取工作区,这会消耗一段时间,并输出大量的提示,切莫慌张。

    2. 提交时提示: You have files opened with perforce! Close them before starting the sync.

      这是因为执行 p4 -u username opened 提示有文件被打开了,可以根据其输出revert对应的文件,如果确认没啥重要的东西,可以直接用 p4 -u username revert -a

      也可以通过P4V的Pending界面来回滚响应的文件。

    3. 提交时提示: Submission cancelled, undoing p4 changes. 的提示,是因为edit_template函数执行失败导致的。

      $ git config --global git-p4.skipSubmitEdit true