等价于 git/hg/bzr/svn 状态的 p4 命令是什么? (提示:不是 `p4 status`)

What is the p4 command equivalent to something like git/hg/bzr/svn status? (Hint: not `p4 status`)

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

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

提示:它不是 p4 status

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

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

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

详情:

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

具体提供什么状态信息取决于 VCS。例如。 Perforce 是基于检出的,但大多数现代版本控制工具不是。

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

除了,显然,强制。

...我可能会继续提供 git/hg/bzr/svn status 在单个命令中执行的操作的示例,但 perforce 似乎至少需要两个命令才能提供。

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

的等价物

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

在 perforce 中,似乎至少需要两个单独的命令来近似其他 VCS 工具使用单个命令执行的操作,以提供关于仓库的工作区状态的快速摘要:

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

p4 status - 未签入 Perforce 的文件列表。

**---+ 旧: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 表示“不做任何更改。)

-n 告诉 reconcile 不做任何改变。不再需要 - 现在 p4 status 默认为只读。

老: p4 $P4OPTS 打开 p4 $P4OPTS 协调-n | sed -e 's/ - / - RECONCILE TO MAKE: /'

---+ 适合别名或快速打字

我将这些组合如下:

p4 $P4OPTS opened
p4 $P4OPTS status | sed -e 's/ - / - RECONCILE TO MAKE: /'

sed 部分可以更好地区分 perforce 已经打开的文件的状态和 perforce 下未打开的文件的状态。但我注意到这是不安全的,因为文件的名称中可能包含字符串“-”。

---+ 幻想

因为我经常需要本地路径,所以我目前使用以下 shell 脚本 my-p4-status 来给我一些更像我从其他 VCS 的状态命令中习惯的东西=.

下面的脚本使用旧的 reconcile -n,尚未更新为使用 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 [ "" == "-ztag" ] || [ "" == "-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

---+ 更好?请分享!

如果你有更好的,请分享。