Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can someone explain the perforce integration options?

Tags:

Specifically:

  • Why do I need to explicitly enable "Enable baseless merges" all the time? I am integrating from my branch to the trunk.

  • What does "Enable integrate over deleted targets" mean? Shouldn't it do this by default? If the file doesn't exist, and you integrate to that branch with the file, it should create the file, right??

  • What does "Do not get latest revision of selected files" have to do with integrating? I should be choosing a source revision, and a target (to create a new target revision).

  • What does "Disregard indirect integration history" mean? I've never used it, since it sounds scary.

I would be grateful to know, as I am a little unsure of what options to enable when I am trying to do various integration tasks from our trunk to various branches or vice versa. (I am not the buildmaster, but hey, I want to know what he knows).

like image 515
Jeff Meatball Yang Avatar asked May 29 '09 18:05

Jeff Meatball Yang


People also ask

What is Perforce integration?

In Perforce, we say we integrate changes from one branch into another. This is not a capricious choice of words. It's based on the notion that, even when two branches are closely related, not all changes in one branch can be merged into the other.

How do you integrate with P4V?

To integrate files, you open them for integration, specifying source and target, then submit the changelist containing the open files. P4V performs three types of integration: Branching, which creates a new codeline or branch. For more information, see Creating Branches.

What is branch mapping in Perforce?

The branch mapping is used by the integration process to create and update branches., which specifies the relationship between two codelines. When you branch, you can use the branch mapping instead of a file mapping. Branch mappings are displayed in the right pane on the Branch Mapping tab.


2 Answers

Why do I need to explicitly enable "Enable baseless merges" all the time? I am integrating from my branch to the trunk.

Can't help you here. Something is not right.

What does "Enable integrate over deleted targets" mean?

If the target file has been deleted and the source file has changed, will re-branch the source file on top of the target file. Without this option, a file on the branch, that has been changed on the branch and deleted on the trunk, would not be allowed to be integrated back into the trunk.

Shouldn't it do this by default?

Not if you are integrating a file back into the trunk, which you branched from the trunk, then deleted on the trunk. Normally 'p4 integrate' avoids mixing outstanding edits with a deleted file. You have to use the advanced options to tell it how to deal with a deleted file.

If the file doesn't exist, and you integrate to that branch with the file, it should create the file, right?

When integrating a file, that previously never existed (i.e., it was added to the branch), from one location to another, yes, Perforce will simply create it in the location into which you are integrating. However, if the file originally came from the trunk, was deleted on the trunk, and now you're trying to integrate it back into the trunk from the branch, you have to tell it what to do via these integration options. Here's the command line switches to which these options correspond:

  • Enable integrations around deleted revisions = -d
  • Integrate over deleted targets = -Dt
  • Delete target file when source is deleted = -Ds
  • Try to integrate changes when source is deleted and re-added = -Di

You can learn more about them in the integrate command help (type "p4 help integrate" at the command line).

What does "Do not get latest revision of selected files" have to do with integrating?

This tells Perforce to use the workspace revision of the target file. By default, the head revision of the target file is automatically retrieved into the workspace before integrating. Say you have made one revision to a branch file and integrated it back into the trunk. The trunk and branch now have two revisions of this file. You submit a change to the branch file so it now has 3 revisions. You sync the branch file back to revision 2. If you were to do a normal integration right now, Perforce would assume you want to integrate everything up to the head revision and would integrate revision 3 of the branch file into the trunk. If you were to select this option, it would say, "all revision(s) already integrated" because you have revision 2 in your workspace. It would be the same as attempting to integrate with the "Limit the range of the integration:" option set to "Integrate all revisions up to:" Revision 2.

What does "Disregard indirect integration history" mean? I've never used it, since it sounds scary.

I can't figure out, nor find any info about, what this does.

like image 96
raven Avatar answered Sep 19 '22 14:09

raven


  1. In general, to merge two files, perforce looks for a "base", the closest revision to the two files, and uses that to provide a much better diff than just directly running a diffing the two files. See Knowledge Base Article. Without knowing your perforce setup, I couldn't say what was going wrong, however, p4win has some nice graphical tools to visualize branches, you might be able to determine why perforce can't find a base for you. This is also what "Disregard indirect integration history" does: stops it from looking for the base.

  2. For the "don't sync to head": when integrating, your "target" is the files in your local client, which you aren't specifying a revision for; instead, perforce will either sync your revision head (if you don't use "-h"), or will use the one you currently have. You can't specify an arbitrary revision because your local client only has a particular one.

like image 45
Todd Gardner Avatar answered Sep 21 '22 14:09

Todd Gardner