Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 203353
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T17:22:16+00:00 2026-05-11T17:22:16+00:00

As I’ve mentioned in a previous question , I’m looking into migrating our source

  • 0

As I’ve mentioned in a previous question, I’m looking into migrating our source control from Perforce to git.
Looking around, I’ve found git-p4 (you have to dig a bit more, since it’s not even at the repository pointed by the link. The actual git-p4 script harder to find).

I’m now running this script, and it imports the current version of the files in a new git repository, but I can’t manage to get the history, no matter what I do.

Here’s the current command line I use is:

P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...

So, the real question is: if anyone has managed to import a P4 depot, including the history, I’d like to know how you did it.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-11T17:22:16+00:00Added an answer on May 11, 2026 at 5:22 pm

    Try appending “@all” to the file path. For example, this produces a single-revision repo for me:

    python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
        //depot/services/master-pom/trunk/...
    

    This command imported the full history:

    python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
        //depot/services/master-pom/trunk/...@all
    

    I tried using the example git-p4 but gave up for several reasons and wrote my own fast-import pump. It was a while back, so some of the problems may have been fixed now: but git-p4 had trouble with large changelists (such as the initial creation of a branch) (although using the client spec may have helped, I don’t think I tried it) and files with the “+S” filetype modifier (which is Bad And Evil, but we used to use it). And my Python-fu wasn’t up to letting me fix the issues I had.

    EDIT: since someone asked for it, here it is.

    https://github.com/araqnid/p4utils has several p4 things, of which p4-git-xfer is the p4->git (one-way) replicator. It has quite a few issues though, due to being mainly a personal handy-tool rather than a real piece of infrastructure.

    Getting started:

    p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \
      trunk 'release/*' 'branch/*' \
      trunk=master release/*=r* branch/*=dev/*
    

    will clone that perforce path to a bare “dictionary.git”. The first arguments after the base path are “branch specs” that tell the replicator where to find branches under the base. The later ones (with ‘=’ symbols) are “mirror specs” that tell the replicator how to create local branches from the imported ones. The branch specs cause “refs/remotes/p4/trunk”, “refs/remotes/p4/release/1.0” etc. to be created. The mirror specs force “refs/heads/master” to mirror “refs/remotes/p4/trunk”, “refs/heads/r1.0” to mirror “refs/remotes/p4/release/1.0” etc. It was intended as a way to allow me to select just particular branches from those that were replicated to get propagated to clones.

    It will attempt to detect how a branch is created, but that’s a bit of a guess anyway with Perforce. Apart from that, it doesn’t try to do any branch tracking at all: even whole-branch merges won’t be written out as such, sorry.

    After the initial clone, running p4-git-xfer fetch from inside the git replica will do an incremental update. The high-water-mark changelist is taken from marks/p4 within the git repo. This is a marks file that fast-import loads, so if you do any fancy footwork like using filter-branch to rewrite things, beware you may have to update this too.

    It’s not pretty, and has some medium-to-serious issues; I use it mainly for my own convenience, to isolate myself from Perforce problems, not as a day-to-day criticial infrastructure component. It’s one-way: I generally use the p4-am script to apply patches created by git format-patch. That itself only works mostly, with general parsing nastiness, problems with end-of-file newlines, binary changes etc.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

link Im having trouble converting the html entites into html characters, (&# 8217;) i
Does anyone know how can I replace this 2 symbol below from the string
this is what i have right now Drawing an RSS feed into the php,
I'm trying to decode HTML entries from here NYTimes.com and I cannot figure out
I ran into a problem. Wrote the following code snippet: teksti = teksti.Trim() teksti
I have a French site that I want to parse, but am running into
I'm parsing an RSS feed that has an ’ in it. SimpleXML turns this
I have a bunch of posts stored in text files formatted in yaml/textile (from
We're building an app, our first using Rails 3, and we're having to build
Seemingly simple, but I cannot find anything relevant on the web. What is the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.