Migrate from Perforce to Git
Toshi Dávila avatar
Written by Toshi Dávila
Updated over a week ago

A Perforce repository can hold tens or hundreds of distinct software projects, each with its own branching model. A developer defines a “view” that tells the Perforce server which files to put into a working copy whereas a Git repository normally holds a single software project and its branches and tags (although large monolithic Git repos do exist). You typically clone the repo and, perhaps, check out submodules or subtrees.

Please follow these steps to migrate P4 to Git.

Install Git

Install msysgit 1.7.10. Version 1.8.0 didn't work for me because it gave an error about being compiled without python support. Once installed, you should be able to execute "git" commands.

Install Python

Install python 2.7.3. Once installed, you should be able to execute "python" commands using command prompt.

Install Perforce CLI Tools

Install the perforce command line tools if you do not already have them. Once they are installed you should be able to execute "p4" at a command prompt. 

Install Perl

Perl is already installed in Linux and UNIX systems, on windows you will have to install it. We will use ActivePerl but not its latest version because we will need P4Perl and it only supports perl 5.12, 5.14 or 5.16.

Perforce Perl API

Download/Install Perforce Perl API here

Perforce C/C++ API

We will need this to build the Perforce Perl API. You can download it from:

Download it and extract its content. I did it under C:\.

Get the p42svn source code

Checkout the code using svn command:

svn checkout http://p42svn.tigris.org/svn/p42svn/trunk p42svn --username guest

It will ask you for a password, just hit enter.

Now let's confirm if p42svn is working!

$ cd p42svn
$ perl p42svn.pl
$ Must specify at least one branch or label..

Export P4 into a dump file

We will connect to Assembla and export our p4 repo into a dump file.

Connect to p4

If you have more than 1 p4 repository in assembla just make sure you are pointing to the right repository. To check on what repo you currently are type:

$ p4 info

If you want to change to a different repo, run this command:

$ p4 set P4CONFIG="C:\workspace_directory\p4config.txt"

Check again:

$ p4 info
$ p4 login
$ Enter password:

The output should looks like:

$ You are logged in.

Let's export our repo!

Make sure you are on the p42svn folder. Run the following command:

$ perl p42svn.pl --branch //depot/main=trunk --debug > Myp4.dump

Note: If you see an error about some files that can't be created because they already exist, open the p42svn.pl file with any text editor like notepad++ or sublime and go to line 1303 and edit UNLINK =>1 to UNLINK =>0, save it and run again the command.

If you check your p42svn folder, your Myp4.dump file is in there.

Install git-p4.py

Save the git-p4.py script from GitHub into your "C:\Program Files (x86)\Git\bin" folder. To enable the "git p4" commands, you need to set up an alias. Edit the file "%USERPROFILE%.gitconfig", and add an alias section:

p4 = !'C:\\Program Files (x86)\\Git\\bin\\git-p4.py'

At this point the "git p4" commands should work.

Using git-p4

You should now be able to clone a Perforce depot path into Git:

C:\>git p4 clone "//some/depot/path/" mygitworkspace  
Importing from //some/depot/path/ into mygitworkspace
Initialized empty Git repository in C:/mygitworkspace/.git/
Doing initial import of //some/depot/path/ from revision #head into refs/remotes/p4/master

There's plenty of good documentation out there about how to use git-p4:

Git-p4 workflow follows this pattern:

  • Edit files

  • Submit edits to Git ...repeat...

  • git p4 rebase

  • git p4 submit

Import your Git repository in Assembla.

Should you have any questions, don't hesitate to reach out to us at support@assembla.com

Did this answer your question?