Perforce server releases 97.3 - 2004.1
Parent to child, bidirectional integration. For files with indirect integration history, p4 integrate -i
required; revision #1 of the source is selected as the base for the p4 resolve
Perforce server releases 2004.2 - 2010.2
Indirect integration enabled by default (no need for -i flag if there is direct common ancestor). All files related by previous integrations can be integrated. The base selected is the closest common ancestor.
If a file is deleted in Perforce, a new head revision marks the file as a delete. The delete can be propagated when integrating if the target has been fully integrated with the source. If not, Perforce does not integrate the file unless a special flag is used (-d, -Dt, -Ds). A file can be opened for delete or branch depending on if the delete is on the source or target file, respectively.
Perforce server releases 2011.1 +
The generation 3 integration engine is available starting in 2011.1. Although available in 2011.1 it was only the default for the initial release. The generation 2 engine was restored as the default integrate engine in the first patch release (2011.1/428846+) and has been the default until 2013.2. In the 2013.2 Perforce Server release, the generation 3 algorithm became the default.
The p4 copy and p4 merge commands always use the generation 3 engine, even if dm.integ.engine=2.
The generation 3 integration algorithm can follow moves and schedule delete and filetype resolves. Files opened for branch or delete can also be resolved by using p4 integrate -Rb and p4 integrate -Rd, respectively. Resolves can also be scheduled around cherry-picked integrations by using p4 integrate -Rs.
A base is selected which includes the greatest number of deltas in common with the source and the target files.