首页 > 解决方案 > Perforce 变更列表和搁置命令

问题描述

我对 Perforce 很陌生,刚开始使用它。使用 $p4 sync 命令同步我的代码后,我开始编辑一些文件。

这些文件被添加到我的默认更改列表中。为了与我的团队合作,我想创建一个变更列表。为了创建一个变更列表,我运行了 $p4 change 并从变更列表描述中删除了“file1”。现在当我运行 $p4 时打开。它给出了与此类似的输出。

现在我有以下问题:

如果有人能详细回答这些问题,那就太好了。任何有关 Perforce 的教程建议也会有很大帮助。

提前致谢。

标签: perforce

解决方案


我对 Perforce 教程的推荐是 Perforce 用户指南。这是关于更改列表的部分:

https://www.perforce.com/perforce/r15.1/manuals/intro/chapter.working_in_perforce.html#working_in_perforce.working_with_files.changelists

我目前正在处理哪个更改列表是默认的还是 111 ?

两个都!这两个都是您工作区中的待定更改列表。

(text+k) 是什么意思?

括号中的内容是“文件类型”。 +k是一个“文件类型修饰符”,表示关键字(此文件中的特殊词如$Id$and$Revision$$Author$将在您提交时自动扩展为适当的值。

当我对 file2 和 file3 进行更改时,它会同步到更改列表 111,当我对 file1 进行更改时,它会同步到默认更改列表。我很困惑这是怎么回事?

任何地方都没有“同步”——待处理的更改列表只是引用不同文件的容器。当您shelvesubmit,与这些更改列表关联的文件将被发送到服务器,并且其他客户端可以访问。由于和shelvesubmit是变更列表级别的操作,只有这些变更列表中的文件受到影响——这就是拥有不同待处理变更列表的关键。您的工作区中有所有待处理的文件,但您可以拆分哪些文件在何时发送到服务器(这有点像在 git 中推送不同的分支,但不是——您可以在 Perforce 中的每个操作上执行此操作即使您没有分支,因为每个文件都是单独版本化的,而不是将整个树版本化为一个原子 blob)。

还有一件事我感到困惑的是,如果 $p4 shelve 我的更改会消失,并且只有当我为创建的更改列表运行 unshelve 命令时才会重新应用?这类似于 git stash 和 git stash apply 吗?

不,p4 shelve只会将服务器上搁置的更改与您工作区中的本地文件同步——它本身不会更改您的工作区。“存储”的等价物是 top4 shelve然后p4 revertto 清除工作区更改。 shelve就其本身而言,它更像是git push对分支进行操作——您保留本地副本,但现在它也在服务器上(但不是“主”历史记录的一部分)。(不过这并不完全相同——老实说,如果你是 Perforce 的新手,我会坚持在常规的旧分支中进行常规的旧“提交”,因为这是基本的工作流程。通过书架共享工作需要更多的手动操作工作,因为每个架子就像它自己的小迷你分支,没有版本控制。)


推荐阅读