perforce - Perforce 变更列表和搁置命令
问题描述
我对 Perforce 很陌生,刚开始使用它。使用 $p4 sync 命令同步我的代码后,我开始编辑一些文件。
- $p4 编辑文件1
- $p4 编辑文件2
- $p4 编辑文件3
这些文件被添加到我的默认更改列表中。为了与我的团队合作,我想创建一个变更列表。为了创建一个变更列表,我运行了 $p4 change 并从变更列表描述中删除了“file1”。现在当我运行 $p4 时打开。它给出了与此类似的输出。
- //depot/... /file1 编辑默认更改(文本)
- //depot/... /file2 编辑默认 111 (text+k)
- //depot/... /file3 编辑默认 111 (text+k)
现在我有以下问题:
- 我目前正在处理哪个更改列表是默认的还是 111 ?
- (test + k) 是什么意思?
- 当我对 file2 和 file3 进行更改时,它会同步到更改列表 111,当我对 file1 进行更改时,它会同步到默认更改列表。我很困惑这是怎么回事?
- 还有一件事我感到困惑的是,如果 $p4 shelve 我的更改会消失,并且只有当我为创建的更改列表运行 unshelve 命令时才会重新应用?这类似于 git stash 和 git stash apply 吗?
如果有人能详细回答这些问题,那就太好了。任何有关 Perforce 的教程建议也会有很大帮助。
提前致谢。
解决方案
我对 Perforce 教程的推荐是 Perforce 用户指南。这是关于更改列表的部分:
我目前正在处理哪个更改列表是默认的还是 111 ?
两个都!这两个都是您工作区中的待定更改列表。
(text+k) 是什么意思?
括号中的内容是“文件类型”。 +k
是一个“文件类型修饰符”,表示关键字(此文件中的特殊词如$Id$
and$Revision$
和$Author$
将在您提交时自动扩展为适当的值。
当我对 file2 和 file3 进行更改时,它会同步到更改列表 111,当我对 file1 进行更改时,它会同步到默认更改列表。我很困惑这是怎么回事?
任何地方都没有“同步”——待处理的更改列表只是引用不同文件的容器。当您shelve
或时submit
,与这些更改列表关联的文件将被发送到服务器,并且其他客户端可以访问。由于和shelve
submit
是变更列表级别的操作,只有这些变更列表中的文件受到影响——这就是拥有不同待处理变更列表的关键。您的工作区中有所有待处理的文件,但您可以拆分哪些文件在何时发送到服务器(这有点像在 git 中推送不同的分支,但不是——您可以在 Perforce 中的每个操作上执行此操作即使您没有分支,因为每个文件都是单独版本化的,而不是将整个树版本化为一个原子 blob)。
还有一件事我感到困惑的是,如果 $p4 shelve 我的更改会消失,并且只有当我为创建的更改列表运行 unshelve 命令时才会重新应用?这类似于 git stash 和 git stash apply 吗?
不,p4 shelve
只会将服务器上搁置的更改与您工作区中的本地文件同步——它本身不会更改您的工作区。“存储”的等价物是 top4 shelve
然后p4 revert
to 清除工作区更改。 shelve
就其本身而言,它更像是git push
对分支进行操作——您保留本地副本,但现在它也在服务器上(但不是“主”历史记录的一部分)。(不过这并不完全相同——老实说,如果你是 Perforce 的新手,我会坚持在常规的旧分支中进行常规的旧“提交”,因为这是基本的工作流程。通过书架共享工作需要更多的手动操作工作,因为每个架子就像它自己的小迷你分支,没有版本控制。)
推荐阅读
- ios - UITableView 上的 iOS didSelectRowAt 行不起作用
- python - KeyError "" 字典中的键未找到
- angular - 将两个非常相似的函数合二为一
- xero-api - 如何为 Xero 的支付 API 设置分页?
- javascript - importAnnotCommand 返回未定义
- r - 每当 col X 中的数字增加 24 时,将 col Y 中的数字增加 1
- python - 如何在 Avogadro 软件中提取分子特性
- hyperledger-fabric - 课程注册平台的 Hyperledger Fabric/Hyperledger Composer 网络定义
- odoo - 如何使用 odoo 在树视图上添加条件并根据条件更改颜色?
- android - 按钮仅按特定顺序工作的功能问题