Import Perforce stream history into a git repository.
Make sure P4PORT variable is set and perform the following command inside a fresh git repo:
git-p4s.py sync //depot/mystream1 //depot/mystream2
To fetch latest changes:
git-p4s.py sync
git-p4s is a fork of the original git-p4 utility bundled with git. It is meant for P4 stream depot. Major features are:
- Supports multiple P4 streams in a single git repository
- Incremental update
- Merge detection
- History filtering on file level
- Optimized import of multiple streams
- Import of automatic and static labels
git-p4s works only with streamed depot (requires 2012 Perforce client or newer). Only one-way import is supported.
Following git philosophy only complete merges are imported. Partial merges are imported as regular single parented commits however integrations are recorded in a commit message. Merges with multiple parents are supported. Note that merge can be only imported if the merge origin is already imported. To ensure this is the case all streams must be imported together.
History can be filtered during import with --check-ignore
option (leveraging .gitignore
or .git/info/exclude
). This is used to exclude large binaries or build outputs. Use with care. --prune-empty
will skip commits which become empty after filtering.
git-p4s caches blobs digests during run therefore it is recommended to import all desired streams at once to increase blob re-use. As its predecessor git-p4s uses p4 print
command to retrieve file contents.
Since git-p4s internally uses git fast-import a resulting pack file may not be optimally compressed, use git gc --aggressive
to repack the repository after initial import. For some project history filtering may be helpful.
git-p4s retrieves raw data from Perforce server and uses git fast-import to load blobs into a git repository. None of these operations performs line ending conversion. Since P4 server seems to use Unix newlines internally therefore on Windows core.autocrlf = true
is a recommended setting for projects using Windows line ending (CRLF).
No.
Original git-p4 utility does not support P4 streams well. Streamed depot constraints let implementation take important assumptions while maintaining backward compatibility with git-p4 and support for non-streamed depots would makes it much harder to reliably implement merge detection.