什么是p4命令相当于像git / hg / bzr / svn status这样的东西? (提示:不是'p4 status`)

时间:2016-10-08 22:21:08

标签: git svn version-control mercurial perforce

问:其他版本控制工具的status命令的perforce等价物是什么?

E.g。 git statushg statusbzr statussvn status? (令人困惑的是,cvs update -nq是最接近该版本控制系统的东西。)

提示:它不是p4 status

首先,p4 status不会告诉您有关挂起的更改列表中的文件。您需要为此调用p4 opened,但输出格式完全不同。

其次,p4 status并不总是只读状态命令。我认为我在默认情况下最初发布此版本时使用的perforce版本实际上更改了工作区的状态 - 它实际上将本地更改添加到待处理的更改列表中。但我可能会记错。该公司使用了非常旧版本的perforce。截至我更新此版本时,使用2014年4月4日的perforce客户端版本,默认p4 status行为是只读的,但如果您不这样做,请注意不要使用-A选项#39;我想对工作区进行更改。

看起来需要p4 statusp4 opened的某种组合来获得其他VCS在单个命令中所做的最低限度。

DETAIL:

大多数版本控制系统都有一个可以快速告诉您工作区状态的命令。信息如:

  • 检出哪些文件进行编辑(如果VCS使用结帐)
    • 哪些已检出文件已在本地更改或删除
  • 即使未签出,哪些文件也已更改
    • e.g。哪些文件可能包含您要合并的更改
  • 可能哪些文件最近在存储库中更新,而不是在工作区中更新
    • e.g。您可能想要合并到工作区的更改
  • 工作区中有哪些文件但尚未受版本控制
    • e.g。您可能想要添加到版本控制系统的文件
    • 或者可能添加到.hgignore / .gitignore / ...忽略文件模式
  • 哪些文件受版本控制但不在工作区中
    • e.g。您可能要从版本控制系统中删除哪些文件
    • 或您可能意外删除的文件

提供的状态信息究竟取决于VCS。例如。 Perforce是基于结帐的,但大多数现代版本控制工具都没有。

但是......几乎所有版本控制工具都有一个简单的命令,可以告诉你这种状态。

显然,除了perforce。

...我可以继续提供git / hg / bzr / svn状态在单个命令中执行的示例,但是perforce似乎至少需要提供两个命令。

1 个答案:

答案 0 :(得分:1)

我一直说我不喜欢回答我自己的问题,但我会在这里做。我欢迎任何想要分享更好的解决方案和脚本的人。我特别欢迎有人向我展示这是不必要的,Perforce确实具有相当于svn/git/hg/bzr status

--- + A:git/hg/bzr/svn status = p4 opened + p4 status

在perforce中,似乎需要至少两个单独的命令来估计其他VCS工具使用单个命令执行的操作,以便快速汇总工作站的工作空间状态:

p4 opened - 有关您在工作区中打开的文件列表

p4 status - 有关未在Perforce中签入的文件列表。

** --- + OLD:p4 reconcile -n代替p4 status **

旧版本的perforce p4 status默认情况下p4 reconcile就像git/hg/bzr/svn status一样对工作区进行更改,例如添加到工作区。或者在我写这个页面的时候我坏了。

新功能:p4 opened = p4 status + git/hg/bzr/svn status **

新功能:p4 opened = p4 reconcile -n + p4 reconcile -n **

p4 reconcile -n - 表示未经过强制打开的文件列表,但您已对其进行了本地更改。

p4 status说"不做任何更改。)

-n告诉调和不做任何更改。不再需要 - 现在p4 $P4OPTS opened p4 $P4OPTS status | sed -e 's/ - / - RECONCILE TO MAKE: /' 默认为只读。

OLD:     p4 $ P4OPTS开盘了     p4 $ P4OPTS调和-n | sed -e' s / - / - 重新制作:/'

--- +适合别名或快速输入

我将这些结合起来如下:

my-p4-status

sed部分可以更好地区分perforce已经打开的文件的状态与未在perforce下打开的文件的状态。但我注意到这是不安全的,当一个文件可能有字符串" - "以它的名字。

--- + Fancified

因为我经常需要本地路径,所以我目前使用以下shell脚本reconcile -n来给我一些更像我从其他VCS中习惯的东西' status command =。

以下脚本使用旧的status,尚未更新为使用#!/bin/bash # Perforce lacks a single command to tell you the status of a workspace, # the equivalent of hg/bzr/git status. # Warning: "p4 status" is not actually a read-only query!!! # "p4 status" is more like "p4 reconcile" - it actually opens files to edit, add, or delete (-e -a -d) # p4 opened only reports on the status of files currently opened by Perforce # It is necessary to combine "p4 opened" and "p4 reconcile -n" to get a net overview. # TBD: convert to local file path, rather than depot path. # (Not a simple sed-xargs-p4_fstat pipeline) P4OPTS='' if [ "$1" == "-ztag" ] || [ "$1" == "-verbose" ] then shift P4OPTS="-ztag" fi case $P4OPTS in -ztag) p4 $P4OPTS opened p4 $P4OPTS reconcile -n ;; *) echo '#### p4 opened - Perforce files already opened ###' p4 $P4OPTS opened echo '#### p4 reconcile -n --- local edits, not opened in Perforce. Run p4 reconcile to actually open. ###' p4 $P4OPTS reconcile -n | sed -e 's/ - / - RECONCILE TO MAKE: /' esac

<input 
    type="button" 
    class="stripeBtn"
    value="Proceed to Checkout"
    data-key="***"
    data-description="***"
    data-amount= ***
    data-currency="usd"
    data-name="***"
    data-billing-address="true"
    data-shipping-address="true"
    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"/>

--- +更好?请分享!

如果您有更好的信息,请分享。