注意:此问题与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
),更改列表反映出:
| 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
答案 0 :(得分:2)
仅使用P4V UI(至少在v2015.2中)是不可能的。
不过,可以通过命令行在其中,“ revert”命令具有一个-k
标志,p4 help revert
解释为:
-k标志将文件标记为在服务器元数据中已还原,而不更改客户端工作空间中的文件。
我知道这里在类似的问题中对此进行了讨论:How do you clear the default changelist without altering your worktree in Perforce-但是问题和选定的答案都没有提及P4V客户,因此,我在下面编写了更详细的解释,以防有人受惠
右键单击工作区视图中的任意位置,然后选择Open Command Window Here
输入以下命令:p4 revert -k -c default //...
-k
标志意味着在还原更改列表时不修改本地文件-c
标志指定所需的更改列表。使用default
或您要取消跟踪文件的确切更改列表号。//...
表示工作空间中的所有文件。请注意,这始终始终限于您用-c
指定的变更列表中的文件!运行该命令后,它将列出从变更列表中删除的每个未决变更。
是否应执行此类操作取决于读者的判断,并应考虑the other answer中的警告。
我的主要用例是,由于某种原因删除,移动或重命名了变更列表中的文件,而没有跟踪这些操作。
是的,理想情况下应该跟踪这些更改 ,我可能不得不研究我的工作流程以避免将来发生这种情况。尽管如此,在这种状态下尝试提交更改列表可能会导致错误,因为从技术上讲,这些“待更改”不再存在。
为避免这种情况,我发现如上所述最简单的方法是使用-k
标记清除更改列表,删除不再代表本地文件系统的旧更改,然后运行Reconcile Offline Work...
在所有相关目录上将 just 当前最新状态保存到变更列表中,然后提交。