Version control 如何使用Perforce Shelving让一个人创建更改,另一个人提交更改?

Version control 如何使用Perforce Shelving让一个人创建更改,另一个人提交更改?,version-control,perforce,shelve,shelving,unshelve,Version Control,Perforce,Shelve,Shelving,Unshelve,我希望UserA能够在Perforce中创建变更列表,然后将其搁置。然后我希望UserB能够取消搁置该变更列表并提交它 这听起来很简单,但performe unshelving似乎并不像我预期的那样工作。当UserB运行'p4 unshelve-s 1234'时,它将从change 1234中取消搁置所有已更改的文件,但它不会将更改的元数据(描述、作业修复)带到其中!这意味着UserB可以将一个搁置的CL复制到一个全新的CL中并提交它(通过手动重新创建描述和修复),但这会使旧的搁置的CL悬而未决

我希望UserA能够在Perforce中创建变更列表,然后将其搁置。然后我希望UserB能够取消搁置该变更列表并提交它

这听起来很简单,但performe unshelving似乎并不像我预期的那样工作。当UserB运行'p4 unshelve-s 1234'时,它将从change 1234中取消搁置所有已更改的文件,但它不会将更改的元数据(描述、作业修复)带到其中!这意味着UserB可以将一个搁置的CL复制到一个全新的CL中并提交它(通过手动重新创建描述和修复),但这会使旧的搁置的CL悬而未决

这里的逻辑是UserB取消搁置CL
  • 查看搁置CL的元数据
  • 将该元数据复制到新CL中提交新CL删除旧搁置的CL
  • 这是英国《经济学人》的建议。有一个小问题:不允许UserB删除其他用户搁置的CLs!只有UserA和p4管理员可以删除他搁置的CL。我不明白为什么文档会掩盖这一点

    以前有人有过这个问题吗?你是怎么解决的


    编辑:我应该澄清一下,我的问题非常笼统。我正在开发一个工具,UserA是开发人员,UserB是构建系统本身。开发人员将搁置CL,然后让构建系统取消搁置,并通过一系列构建和测试对其进行验证(如果CL通过了所有这些测试,则自动提交CL)。如果构建系统提交了搁置的CLs,希望每个开发人员都记得删除它们,这似乎注定要失败

    让构建系统发回成功或失败的通知,让开发人员自己提交变更列表怎么样


    如果需要解析任何文件,尝试自动提交变更列表可能会变得棘手。您可能能够自动化其中的一些功能,但如果存在任何冲突,则无法实现自动化。

    您可能会发现在Performce 2013.1中引入的此功能非常有用:

        #539809 (Bug #53058) **
            Shelved changes containing files that do not require resolve
            may be submitted directly without unshelving first via
            'p4 submit -e <shelvedChange#>'. See 'p4 help submit' for
            details and restrictions.
    
    #539809(Bug#53058)**
    包含不需要解析的文件的搁置更改
    可直接提交,无需先通过取消搁置
    “p4提交-e”。有关详细信息,请参阅“p4帮助提交”
    细节和限制。
    
    我认为关键在于UserA必须在搁置后还原搁置的文件,然后将变更列表的所有者和客户机字段分别设置为UserB和UserB的客户机名称。(或者构建系统可以这样做,假设它有足够的特权。)是的,更改变更列表的所有者是关键。一旦UserB拥有变更列表,他们可以在不再需要时删除它。这将是一个很好的小助手脚本的候选者,它可以作为一个自定义命令放在P4V中,甚至可以放在代理中。你认为这最好是一个p4触发器,或者p4v中的一个脚本,或者甚至是一个完整的自定义包装器吗?也许你可以让UserB成为管理员用户。我认为它可以删除任何用户的搁置文件。这就是我们现在所做的。我们正在探索确保所有签入在签入之前都经过认证的选项。