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

标签 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>        |

如果我离线进行更改( file1 现在是 file2 ),perforce 还不知道它(我知道理想情况下这不应该发生,并且应该始终跟踪所有更改,并且文件应该已被写保护,但如果 perforce 没有运行,月亮在错误的四分之一等,它可以写保护,所以为了争论,假设这确实发生了):
| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file1 | file2      | <empty>        |

如果我 Reconcile Offline Work...或者将文件手动添加到更改列表中,更改列表现在知道此更改:
| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file1 | file2      | file1 -> file2 |

如果我然后提交更改列表,它当前跟踪的更改将应用​​于服务器,并且更改列表再次为空:
| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file2      | <empty>        |



假设我进行了更改并对其进行了跟踪。本地文件系统已更改( file2 现在是 file3 ),并且更改列表反射(reflect)了:
| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file3      | file2 -> file3 |

假设我现在想回到工作区/变更列表不知道 file2 的状态。已更改为 file3 ,但没有实际修改磁盘上的文件:
| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file3      | <empty>        |

注意文件系统如何仍然处于状态 file3 ,不是 file2
这样做需要什么?有没有办法在不备份工作区外的更改并完全恢复或运行“干净”然后离线重新应用更改的情况下执行此操作?

我知道我不想只是“还原”更改,因为这不仅会还原更改列表的状态,还会还原本地文件的状态:
| Depot | Filesystem | Changelist     |
|-------+------------+----------------|
| file2 | file2      | <empty>        |

请注意文件系统如何丢失状态 file3并且也恢复为 file2
特尔;博士:

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

我正在使用 P4V v2015.2

最佳答案

概述

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

但是可以通过命令行,其中“revert”命令具有 -k标志,其中 p4 help revert解释为:

The -k flag marks the file as reverted in server metadata without altering files in the client workspace.



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

如何在不修改本地文件的情况下从 Perforce 更改列表中删除挂起的更改
  • 右键单击工作区 View 中的任意位置并选择 Open Command Window Here
  • current working directory命令实际上并未使用,因此您在哪个文件夹中并不重要。
  • 不过,我们需要它来设置环境变量,因此如果您尚未设置这些变量,则在干净的命令行窗口中运行该命令可能无法正常工作。
  • 输入以下命令:p4 revert -k -c default //...
  • -k flag 表示在恢复更改列表时不修改本地文件
  • -c标志指定您想要的更改列表。使用 default或您要取消跟踪文件的确切更改列表编号。
  • 最后一个参数指定它应该在何处(相对于您的工作区根)查找要从更改列表中清除的文件。 //...表示工作区中的所有文件。请注意,这始终仅限于您使用 -c 指定的更改列表中的文件。 !
  • 运行该命令后,它将列出从更改列表中删除的每个待处理更改。
  • Perforce 客户端实际上不会反射(reflect)此更改,除非您按 f5 或点击刷新按钮,此时您应该再次看到您的更改列表。

  • 你为什么要这样做?

    是否应执行此类操作由读者自行决定,the other answer 中的警告应予以考虑。

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

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

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

    关于perforce - 如何在不修改本地文件的情况下取消跟踪 Perforce 更改列表中的更改(P4V 2015.2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412101/

    相关文章:

    perforce - 将 P4 移动操作放在非默认更改列表中

    Java内存泄漏,只有Jenkins运行,Jenkins .war分析显示没有什么奇怪的

    drop-down-menu - P4V 清除工作区 TreeView 中的下拉菜单

    perforce - 如何在不丢失修改的情况下在 perforce 中从更改列表中删除文件?

    Perforce p4v 共享相同的更改列表

    perforce - 在 Perforce/P4V 中,如何用比其所在分支旧的版本替换文件?

    perforce - 如何在p4v中显示更新文件列表

    Perforce回滚: Depot or Folder?

    Perforce Windows 插件不起作用?

    perforce - 如何从 perforce depot 中删除文件?