如何找出一个原始更改列表的位置来自Perforce

时间:2017-04-20 09:13:07

标签: merge perforce revision

在Perforce中,我们进行了大量的分支和合并。我们如何找出引入一个更改的原始更改列表?

例如,我在我自己的私人分支中提交了一个id为53343的变更列表,两天后,它被合并到公司分支A,然后一周后,它被合并到集成分支B,最后,它被合并到主分支。 现在改变列表id是一个完全不同的,比方说55445,因为它是一个合并,实际上包含了很多变更列表,除了我的可能有300个。

我怎样才能获得原来的“53343”?

以下是更详细的说明。

例如,我想知道库中的一个文件的更改历史记录。

$ p4 changes //prod/main/platform/abc.txt
Change 560938 on 2017/04/13 by user1@user1:main 'bug fix2'
Change 559384 on 2017/03/24 by user1@user1:main 'bug fix1'
Change 559178 on 2017/03/22 by branchowner@branchowner:ws 'Merge Integration@558992 to main '

我们可以在主分支中看到它来自合并。 并使用注释

$ p4 annotate -I //prod/main/platform/abc.txt
.
.
.
554294: Monday morning
554294: I love foot ball
554294: XNES rocks
.
.
.

我们可以告诉他们的变化首先来自554294

$ p4 describe 554294|more
Change 554294 by user2@user2:coorA on 2017/01/17 19:24:51
Integrate  all dev changes to coorA 

Affected files ...

.
.
.
... //prod/coorA/platform/abc.txt#1 add
.

554294是合并,在此合并中,添加了文件abc.txt。但实际上这个abc.txt不是原创的。 我在我的开发分支中创建了这个abc.txt,但是分支管理员从我这里复制了它并在他的分支中做了一个“p4 add”。所以,现在对于主分支,它只能看到文件abc.txt是来自coorA分支的原始文件。 我们失去了这个文件的真正第一个拥有者,我们只能追踪到分支管理员。

我们现在想要的是获得原始所有者,但是当它被添加到coorA分支时我们失去了关系,无论如何都要追溯到更深层,例如,通过文件md5sum?

2 个答案:

答案 0 :(得分:2)

我假设您正在查看特定文件的更改。在P4V中找到该文件,单击鼠标右键,然后选择 Revision Graph 。这将显示更改如何传播的图表。图中的每个节点都是该文件的一个版本。合并显示为箭头(边缘),因此向上错误将使您从55445到53343。

此外,要快速查看文件的各个版本之间的更改,您可以将图形的一个节点拖放到另一个节点,P4V将显示差异。

答案 1 :(得分:2)

正如您所说,更改55445可能包含许多不同分支的许多更改。您可以通过运行来查看所有这些:

p4 changes -i @55445,55445

但是,如果你说你正试图获得更具体的变化来源,那就是"我认为你所询问的是变更55445中的一个特殊差异,即特定文件中有一条特定的行,你正试图找到其来源。为此,运行:

p4 annotate -I //depot/file

p4 annotate命令显示每行在该文件中发起的修订/更改; -I标志跟踪合并关系,以找到跨越不同分支的每条线的真实原点。

来源:几年前我写的关于它的博客文章。 :) https://www.perforce.com/blog/101213/p4-annotate-i-going-deeper