如何在不修改本地文件的情况下取消跟踪 Perforce 更改列表中的更改 (P4V 2015.2)?
How to untrack changes in Perforce changelist without modifying local files (P4V 2015.2)?
注意:此问题与 How do you clear the default changelist without altering your worktree in Perforce
相关,但不重复。我的论点是,虽然类似,但这个问题是专门针对 P4V 客户端的。
概览
假设我正在使用 perforce 来跟踪文件。文件的当前状态(file1
) 在服务器Depot
和本地Filesystem
上是相同的为了便于说明,我还将显示默认的当前'state'更改列表:
| 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
),更改列表反映:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file3 | file2 -> file3 |
然后假设我现在想回到 workspace/changelist 不知道 file2
已更改为 file3
但实际上没有修改文件的状态磁盘:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file3 | <empty> |
请注意文件系统如何仍处于状态 file3
,而不是 file2
要做到这一点需要什么?有没有一种方法可以在不将更改备份出工作区并完全还原或 运行 'clean' 然后离线重新应用更改的情况下执行此操作?
我知道我不想 'revert' 更改,因为这不仅会还原更改列表的状态,还会还原本地文件的状态:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file2 | <empty> |
请注意文件系统如何丢失状态 file3
并且还恢复为 file2
长话短说:
如果我的本地文件系统中的文件没有被还原或以任何方式修改,我如何才能 'revert' 我的 changelist/workspace 不再跟踪更改?
我使用的是 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 更改列表中删除挂起的更改
右键单击工作区视图中的任意位置并选择 Open Command Window Here
- current working directory 实际上并没有被命令使用,所以你在哪个文件夹中并不重要。
- 虽然我们需要它来设置环境变量,因此 运行如果您没有设置这些,在干净的命令行中执行命令 window 可能无法工作。
输入以下命令:p4 revert -k -c default //...
-k
标志表示在恢复更改列表时不修改本地文件
-c
标志指定您想要的更改列表。使用 default
或您要取消跟踪其中文件的确切更改列表编号。
- 最后一个参数指定它应该在何处(相对于您的工作区根目录)查找要从更改列表中清除的文件。
//...
表示工作区中的所有文件。请注意,这始终仅限于您使用 -c
! 指定的更改列表中的文件
一旦你运行该命令,它将列出从更改列表中删除的每个待定更改。
- 除非您按 f5 或点击刷新按钮,否则 Perforce 客户端实际上不会反映此更改,此时您应该会再次看到您的更改列表。
你为什么要这样做?
是否执行此操作由 reader 自行决定,应考虑 the other answer 中的警告。
我的主要用例是更改列表中已有的文件出于某种原因被删除、移动或重命名,但这些操作没有被跟踪。
是的,理想情况下,应该 跟踪这些更改,我可能必须检查我的工作流程以避免将来出现这种情况。尽管如此,尝试在此状态下提交更改列表可能会导致错误,因为那些 'pending changes' 在技术上不再存在。
为了避免这种情况,我发现最简单的方法是如上所述使用 -k
标志清除更改列表,删除不再代表本地文件系统的旧更改,然后 运行ning Reconcile Offline Work...
在所有相关目录上获取 just 当前最新状态到更改列表中,然后提交。
注意:此问题与 How do you clear the default changelist without altering your worktree in Perforce
相关,但不重复。我的论点是,虽然类似,但这个问题是专门针对 P4V 客户端的。
概览
假设我正在使用 perforce 来跟踪文件。文件的当前状态(file1
) 在服务器Depot
和本地Filesystem
上是相同的为了便于说明,我还将显示默认的当前'state'更改列表:
| 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
),更改列表反映:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file3 | file2 -> file3 |
然后假设我现在想回到 workspace/changelist 不知道 file2
已更改为 file3
但实际上没有修改文件的状态磁盘:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file3 | <empty> |
请注意文件系统如何仍处于状态 file3
,而不是 file2
要做到这一点需要什么?有没有一种方法可以在不将更改备份出工作区并完全还原或 运行 'clean' 然后离线重新应用更改的情况下执行此操作?
我知道我不想 'revert' 更改,因为这不仅会还原更改列表的状态,还会还原本地文件的状态:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file2 | <empty> |
请注意文件系统如何丢失状态 file3
并且还恢复为 file2
长话短说:
如果我的本地文件系统中的文件没有被还原或以任何方式修改,我如何才能 'revert' 我的 changelist/workspace 不再跟踪更改?
我使用的是 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 更改列表中删除挂起的更改
右键单击工作区视图中的任意位置并选择
Open Command Window Here
- current working directory 实际上并没有被命令使用,所以你在哪个文件夹中并不重要。
- 虽然我们需要它来设置环境变量,因此 运行如果您没有设置这些,在干净的命令行中执行命令 window 可能无法工作。
输入以下命令:
p4 revert -k -c default //...
-k
标志表示在恢复更改列表时不修改本地文件-c
标志指定您想要的更改列表。使用default
或您要取消跟踪其中文件的确切更改列表编号。- 最后一个参数指定它应该在何处(相对于您的工作区根目录)查找要从更改列表中清除的文件。
//...
表示工作区中的所有文件。请注意,这始终仅限于您使用-c
! 指定的更改列表中的文件
一旦你运行该命令,它将列出从更改列表中删除的每个待定更改。
- 除非您按 f5 或点击刷新按钮,否则 Perforce 客户端实际上不会反映此更改,此时您应该会再次看到您的更改列表。
你为什么要这样做?
是否执行此操作由 reader 自行决定,应考虑 the other answer 中的警告。
我的主要用例是更改列表中已有的文件出于某种原因被删除、移动或重命名,但这些操作没有被跟踪。
是的,理想情况下,应该 跟踪这些更改,我可能必须检查我的工作流程以避免将来出现这种情况。尽管如此,尝试在此状态下提交更改列表可能会导致错误,因为那些 'pending changes' 在技术上不再存在。
为了避免这种情况,我发现最简单的方法是如上所述使用 -k
标志清除更改列表,删除不再代表本地文件系统的旧更改,然后 运行ning Reconcile Offline Work...
在所有相关目录上获取 just 当前最新状态到更改列表中,然后提交。