我可以在 perforce 中安全地编辑重命名的文件吗

Posted

技术标签:

【中文标题】我可以在 perforce 中安全地编辑重命名的文件吗【英文标题】:Can I safely edit a renamed file in perforce 【发布时间】:2010-09-12 00:40:40 【问题描述】:

我有一个需要移动的文件,该文件已被强制执行。一旦移动它需要一些编辑 - 更新包等 - 适合其新位置。我应该提交移动更改规范,然后重新打开它进行编辑,还是我可以一次性完成?如果是,那么适当的事件顺序是什么?

【问题讨论】:

【参考方案1】:

我以前曾一次性完成过此操作,但根据您的构建过程,我建议您不要这样做。我一般是这样的:

    移动文件。 如果移动需要更改才能编译,请打开它进行编辑并进行更改。 提交更改,告诉 perforce 重新打开文件进行编辑。 对路径等进行更改,不会导致编译错误,但应该更新。 提交这些更改并附上适当的说明。

但是,如果您愿意,您可以在上面的步骤 (2) 中进行所有更改。 Perforce 可能会将新文件的标志从集成更改为添加,但它仍会记住文件的源路径。

编辑:更好的方法

我意识到我经常使用不同的方法,但“移动”文件的想法让我分心。所以,我会推荐这些步骤:

    将文件集成到新路径/名称中,将之前的文件保留在那里。我假设这不会破坏您的构建过程。 提交新文件,提交后再次检查以进行编辑。 对新文件和项目进行必要的更改,以便使用新文件。 提交对新文件的修改。 [可选] 您可能需要检查分支规范,看看是否需要将旧文件映射到任何分支中的新文件。 创建用于删除旧文件的更改列表,并在稍后提交。

此方法允许将编辑与重命名/移动完全分开,同时不会使项目处于无法编译的状态。

另外,为什么要等待第 6 步?有时,尤其是在较大的项目中,您可能想要移动另一个人正在编辑的文件。 Perforce 会告诉你这一点。通过等待删除文件,您允许您的同事完成编辑并提交,而无需手动移动他们的工作。修改提交后,可以将其整合到新文件中,然后可以安全删除旧文件。

【讨论】:

我认为你的第一种方法更好。如果 perforce 无法跟踪移动,您将丢失移动前修订图中的所有文件历史记录。 @cmcginty 第二种方法更有效,因为它允许在一个 CL 中进行所有编辑(分支除外)。在这种情况下,Perforce 可以并且将跟踪移动,考虑到 p4 move 基本上是 p4 integratep4 delete 的组合。【参考方案2】:

提交移动更改,然后重新打开以进行编辑(您也可以使用重新打开选项)。 这在更改历史记录中对用户来说更具可读性。

此外,最新版本的 Perforce 会在解析后检查文件的更改。因此,在完成某些解析操作后,可能会出现对编辑文件的投诉。

【讨论】:

【参考方案3】:

我会说总是先提交然后编辑。它更干净,使您的存储库中发生的事情更加明显。然后只需在新位置签出文件并进行任何更改。这也使得更改是在新位置中进行的并且在重命名后可以正常工作的情况更加明显。

【讨论】:

【参考方案4】:

是的,你可以。只需重新打开以编辑分支文件(即新文件)。在 P4Win 中,有一个用于此的上下文菜单(“重新打开以进行编辑”)。

【讨论】:

【参考方案5】:

“安全”可能是这里的一个重点。一旦你重命名或移动文件,它会得到一个修订号“1”,这对于你的 Perforce 客户端来说就像一个新文件。当然,管理员将能够获取其以前的历史记录,但如果文件的编辑/版本历史记录对您很重要,那么获取旧版本会有点困难。

更新:感谢 Commodore Jaeger 和 Greg Whitfield 对 cme​​ts 的启发。

即使在 Perforce 支持下,也很难追查到 One True Answer 是什么,所以我想我会向大家更新我们的发现:

Perforce 将每个文档的所有版本都存储在其数据库中。 如果它将您的文件保存为 <text><ktext> 类型,那么它会将一个文件版本的差异存储到另一个文件而不是整个文件。 如果您签出文件,不对其进行任何更改,然后重新提交,它将另存为具有 0 个差异的新版本。这是可配置的,P4 可以设置为忽略没有任何实际差异的更改列表项。您可以通过在提交更改列表之前选择“还原未更改的文件...”来强制执行此操作。 使用“重命名/移动...”在 P4 中移动文件,以便跟踪它们。不要使用 Windows 资源管理器复制它们,然后在 P4 中重新添加它们。 如果您使用上下文菜单中的“重命名/移动...”功能,“新”文件将显示修订号“1”,就好像它是一个新文件一样。 但是,由于 P4 会保存对文件执行的每个功能,因此您实际上可以使用 CLI 命令p4 filelog -i 访问任何以前的修订版(甚至恢复“已删除”文件) 如果您想查看已移动或重命名文件的修订历史记录并且您不是管理员,则可以右键单击并选择其“修订图”,即使在分支之间移动时也会显示文件的每个版本.

根据 Perforce 的支持,通过分支或文件夹移动更轻松地跟踪修订历史是一项经常被请求的功能,并且在他们当前的路线图中。

Perforce 的回答:目前,没有办法移动/重命名/集成文件并仍然保持准确的文件历史记录。

但是,如果您通过右键单击要共享的文件夹来选择“集成...”,则新分支文件夹和基础文件的文件版本将从修订 #1 开始,但是分支文件夹与底层文件和原始文件夹与底层文件之间的集成历史将保留,您可以通过它跟踪文件的修订历史。

【讨论】:

Perforce 跟踪移动的文件(假设您在 perforce 中移动文件,而不是在 Perforce 不知情的情况下删除它并复制它),并且使用 p4 文件日志在移动之前获取文件的历史记录非常容易 -一、 被低估了,因为这个“Perforce 的主要缺陷”不是真的。正如 Jaeger 所说,Perforce 正确地保留了重命名文件的历史记录。如果您对命令行不满意,在 P4V/P4Win 中有一个复选框可以查看跨分支操作的修订(包括重命名)

以上是关于我可以在 perforce 中安全地编辑重命名的文件吗的主要内容,如果未能解决你的问题,请参考以下文章

Perforce resolve 无法正确处理重命名

可以安全地设置“产品名称”属性还是应该重命名目标

在 Flyway 脚本中安全地重命名 MySQL 表名

在解决方案资源管理器中重命名 .cs 属性的问题

使用分支命名空间有效地备份多个版本的 git repo

javascript 安全地重命名是万圣节