如何在 Perforce 中保存和恢复签出文件列表?
How can you save and restore a list of checked out files in Perforce?
我确实有一种 'basic working set' 的文件,我在工作时一直检查(因此可写)这些文件。然而,每次我提交更改时,这个列表都会被打乱——一些事情被提交,另一些被恢复——然后我不得不浪费时间追踪并再次检查所有这些文件。
那么,有没有什么方法可以保存当前签出的文件列表,然后再次签出这些相同的文件?
- 我主要使用 P4V,但我有 P4Win 和命令行 Perforce 可用。不过,我更喜欢 GUI 解决方案。
- 我只想保存和恢复签出文件的状态,而不是那些文件的内容,所以搁置不是答案
- 我知道 'Do not submit unchanged' 和 'Check out after submit' 选项。它们是不够的。例如,我经常会有以编程方式生成的文件,当唯一不同的是 'File generated on' 时间戳时,这些文件注册为 'changed';我需要防止提交此类虚假修订,而且我还没有找到任何不涉及 'revert if unchanged' 命令的搜索和管理此类文件的实用方法。
最简单的解决方案是通过您的工作区规范排除那些生成的文件,例如“-//depot/files/ignorablefile.sh”
它们仍然可以驻留在您的本地工作区中,但应用不会尝试更新它们或将它们添加到源代码管理中。
你说搁置不是答案,但对于你提出的具体问题,我认为这是最简单的解决方案(即涉及最少脚本 and/or 最少手动步骤的解决方案) :
- 搁置您的待定更改(我们称此更改为 1000)。
- 将您打开的文件移至新的待定更改(我们称此更改为 1001)。
- 提交更改 1001。
- 取消搁置更改 1000。
- 同步并解析。
现在你打开了完全相同的文件(unshelve 打开了它们)但是在 head 修订版(同步和 resolve 做到了)。
现在,从您要求的内容来看可能会让您的生活更轻松的内容:而不是还原您不想提交的文件(并制定某种计划稍后将它们取回,可能通过搁置为如上所述),我要做的是将它们移动到另一个更改列表。所以代替:
- 识别 "unchanged" 个文件。
- 还原未更改的文件。
- 使用 "reopen" 选项提交其余文件。
- 重新打开以前还原的文件(以某种方式)。
我愿意:
- 识别 "unchanged" 个文件。
- 将未更改的文件移动到另一个更改列表 N.
- 使用 "reopen" 选项提交其余文件。
- 将所有文件从更改列表 N 移回默认更改列表。
除第 1 步外,所有这些都是简单的一次性命令,您可以从任何客户端执行这些命令。就个人而言,我会使用脚本自动执行步骤 1+2(我假设可以通过编程方式确定这些文件之一中的唯一差异是否是时间戳)并将其作为 [=57] 放入 P4Win/P4V =].
你可以这样做:
p4 -ztag opened | grep depotFile | cut -d ' ' -f 3 > files.txt
保存已在您的客户端中打开的文件列表。 (如果您没有 Unix utilities for Windows,您可以通过任何您想要的方式构建此列表,例如 运行 p4 opened > files.txt
并在编辑器中手动编辑 files.txt
。)
获得文件列表后,您可以通过以下方式打开所有文件:
p4 -x files.txt edit
这不符合您对基于 GUI 的解决方案的偏好,但您可以创建 .cmd
脚本来执行这些操作,然后双击它们(或它们的快捷方式)。
我确实有一种 'basic working set' 的文件,我在工作时一直检查(因此可写)这些文件。然而,每次我提交更改时,这个列表都会被打乱——一些事情被提交,另一些被恢复——然后我不得不浪费时间追踪并再次检查所有这些文件。
那么,有没有什么方法可以保存当前签出的文件列表,然后再次签出这些相同的文件?
- 我主要使用 P4V,但我有 P4Win 和命令行 Perforce 可用。不过,我更喜欢 GUI 解决方案。
- 我只想保存和恢复签出文件的状态,而不是那些文件的内容,所以搁置不是答案
- 我知道 'Do not submit unchanged' 和 'Check out after submit' 选项。它们是不够的。例如,我经常会有以编程方式生成的文件,当唯一不同的是 'File generated on' 时间戳时,这些文件注册为 'changed';我需要防止提交此类虚假修订,而且我还没有找到任何不涉及 'revert if unchanged' 命令的搜索和管理此类文件的实用方法。
最简单的解决方案是通过您的工作区规范排除那些生成的文件,例如“-//depot/files/ignorablefile.sh”
它们仍然可以驻留在您的本地工作区中,但应用不会尝试更新它们或将它们添加到源代码管理中。
你说搁置不是答案,但对于你提出的具体问题,我认为这是最简单的解决方案(即涉及最少脚本 and/or 最少手动步骤的解决方案) :
- 搁置您的待定更改(我们称此更改为 1000)。
- 将您打开的文件移至新的待定更改(我们称此更改为 1001)。
- 提交更改 1001。
- 取消搁置更改 1000。
- 同步并解析。
现在你打开了完全相同的文件(unshelve 打开了它们)但是在 head 修订版(同步和 resolve 做到了)。
现在,从您要求的内容来看可能会让您的生活更轻松的内容:而不是还原您不想提交的文件(并制定某种计划稍后将它们取回,可能通过搁置为如上所述),我要做的是将它们移动到另一个更改列表。所以代替:
- 识别 "unchanged" 个文件。
- 还原未更改的文件。
- 使用 "reopen" 选项提交其余文件。
- 重新打开以前还原的文件(以某种方式)。
我愿意:
- 识别 "unchanged" 个文件。
- 将未更改的文件移动到另一个更改列表 N.
- 使用 "reopen" 选项提交其余文件。
- 将所有文件从更改列表 N 移回默认更改列表。
除第 1 步外,所有这些都是简单的一次性命令,您可以从任何客户端执行这些命令。就个人而言,我会使用脚本自动执行步骤 1+2(我假设可以通过编程方式确定这些文件之一中的唯一差异是否是时间戳)并将其作为 [=57] 放入 P4Win/P4V =].
你可以这样做:
p4 -ztag opened | grep depotFile | cut -d ' ' -f 3 > files.txt
保存已在您的客户端中打开的文件列表。 (如果您没有 Unix utilities for Windows,您可以通过任何您想要的方式构建此列表,例如 运行 p4 opened > files.txt
并在编辑器中手动编辑 files.txt
。)
获得文件列表后,您可以通过以下方式打开所有文件:
p4 -x files.txt edit
这不符合您对基于 GUI 的解决方案的偏好,但您可以创建 .cmd
脚本来执行这些操作,然后双击它们(或它们的快捷方式)。