如何在不修改本地文件的情况下取消跟踪 Perforce 更改列表中的更改(P4V 2015.2)?

Joh*_*nes 5 perforce p4v

注意:这个问题与How do you clear the default changelist without altering your worktree in Perforce. 我的论点是,虽然类似,但这个问题专门针对 P4V 客户端。

概述

假设我正在使用 perforce 来跟踪文件。文件 ( file1)的当前状态在服务器上Depot与本地相同Filesystem出于说明目的,我还将显示默认更改列表的当前“状态”:

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file1 | file1      | <empty>        |
Run Code Online (Sandbox Code Playgroud)

如果我离线进行更改(file1现在是file2),perforce 还不会知​​道它(我知道理想情况下这不应该发生,并且应该始终跟踪所有更改,并且文件应该被写保护,但是如果 perforce 没有运行,月亮在错误的季度等,它可以,所以为了争论,假设这确实发生了):

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file1 | file2      | <empty>        |
Run Code Online (Sandbox Code Playgroud)

如果我Reconcile Offline Work...或将文件手动添加到更改列表中,更改列表现在会知道此更改:

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file1 | file2      | file1 -> file2 |
Run Code Online (Sandbox Code Playgroud)

如果我然后提交更改列表,它当前跟踪的更改将应用​​于服务器,并且更改列表再次为空:

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file2      | <empty>        |
Run Code Online (Sandbox Code Playgroud)

假设我进行了更改并对其进行了跟踪。本地文件系统已更改(file2现在是file3),并且更改列表反映了:

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file3      | file2 -> file3 |
Run Code Online (Sandbox Code Playgroud)

假设我现在想回到工作区/file2更改列表不知道已更改为 的状态file3,但实际上不修改磁盘上的文件:

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file3      | <empty>        |
Run Code Online (Sandbox Code Playgroud)

注意文件系统如何仍然处于状态file3,而不是file2

这样做需要什么?有没有办法在不备份工作区外的更改并完全恢复或运行“干净”然后离线重新应用更改的情况下执行此操作?

我知道我不想只是“还原”更改,因为这不仅会还原更改列表的状态,还会还原本地文件的状态:

| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file2      | <empty>        |
Run Code Online (Sandbox Code Playgroud)

请注意文件系统如何丢失状态file3并恢复到file2

特尔;博士:

如何在不恢复或以任何方式修改本地文件系统中的文件的情况下“恢复”我的更改列表/工作区以不再跟踪更改?

我正在使用 P4V v2015.2

Joh*_*nes 4

概述

仅使用 P4V UI 是不可能的(至少在 v2015.2 中)。

然而,可以通过命令行,其中“恢复”命令有一个-k标志,其p4 help revert解释如下:

-k 标志将文件标记为在服务器元数据中恢复,而不更改客户端工作区中的文件。

我知道这在一个类似的问题中进行了讨论:How do youclear the default changelist without altering your worktree in Perforce - 但问题和所选答案都没有提到 P4V 客户端,所以我在下面写了更详细的解释万一它对某人有利。

如何在不修改本地文件的情况下从 Perforce 更改列表中删除待处理的更改

  1. 右键单击工作区视图中的任意位置并选择Open Command Window Here

  2. 输入以下命令:p4 revert -k -c default //...

    • -k标志表示恢复更改列表时不修改本地文件
    • -c标志指定您想要的更改列表。使用default或您想要取消跟踪其中的文件的确切更改列表编号。
    • 最后一个参数指定它应该在何处(相对于工作区根目录)查找要从更改列表中清除的文件。//...表示工作区中的所有文件。请注意,这始终仅限于您使用-c!指定的更改列表中的文件。
  3. 运行该命令后,它将列出从更改列表中删除的每个待处理更改。

    • 除非您按 f5 或点击刷新按钮,否则 Perforce 客户端实际上不会反映此更改,此时您应该会再次看到更改列表变得清晰。

你为什么要这样做?

是否应执行此类操作由读者自行决定,并且应考虑其他答案中的警告。

我的主要用例是更改列表中已有的文件由于某种原因被删除、移动或重命名,而没有跟踪这些操作。

是的,理想情况下应该跟踪这些更改,我可能必须检查我的工作流程以避免将来发生这种情况。尽管如此,尝试在此状态下提交更改列表可能会导致错误,因为这些“待处理的更改”在技术上不再存在。

为了避免这种情况,我发现最简单的方法是使用-k如上所述的标志清除更改列表,删除不再代表本地文件系统的旧更改,然后在所有相关目录上运行Reconcile Offline Work...将当前最新状态放入更改列表,然后提交。