在使用Perforce一段时间后,我留下了许多仍然未关闭的更改列表。
为了清理,我想要摆脱其中的一个子集。
所以这就使得情况变得复杂:
- 对于某些更改,客户端的主机已更改。
- 某些更改包含存储的文件。
- 来自更改列表的文件可能已被删除或移动。
当上述任一点适用于更改列表时,可视化客户端p4v
将不允许您删除更改列表。
那么,有什么有效的方法可以删除这些更改列表吗?
在使用Perforce一段时间后,我留下了许多仍然未关闭的更改列表。
为了清理,我想要摆脱其中的一个子集。
所以这就使得情况变得复杂:
当上述任一点适用于更改列表时,可视化客户端p4v
将不允许您删除更改列表。
那么,有什么有效的方法可以删除这些更改列表吗?
首先,Perforce会拒绝在工作区的主机不同的情况下处理任何更改列表。因此,第一步是将工作区的主机更改为当前主机。这可以使用可视化客户端p4v轻松完成。打开工作区属性,选择编辑并更改主机。
然后,您可以使用命令行来摆脱麻烦的修改列表:
# to delete a changelist
CLIENT="name_of_your_client"
CHANGE="number_of_the_changelist_to_delete"
p4 -c $CLIENT shelve -c $CHANGE -d //... # Delete all shelved files from it.
p4 -c $CLIENT revert -k -c $CHANGE //... # Revert all files from changelist (only metadata).
p4 -c $CLIENT change -d $CHANGE # Finally delete the changelist.
可以通过命令行来修复主机名,如下所示:
client_hostname="$(p4 client -o ${CLIENT} | grep "^Host" | awk '{print $2}')"
p4 client -o ${CLIENT} | sed "/^Host:/ s=${client_hostname}=${HOSTNAME}=" | p4 client -i
我曾经遇到过相同的问题,写了一个脚本(p4-delete-changelist)来解决这些问题(还有一个是删除p4修复程序)。
请注意,该脚本依赖于仓库中的另一个文件。