等价于 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 status
或 hg status
或 bzr status
或 svn status
? (令人困惑的是,cvs update -nq
是该版本控制系统最接近的东西。)
提示:它不是 p4 status
。
首先,p4 status
不会告诉您关于待定更改列表中的文件。您需要为此调用 p4 opened
,但输出格式完全不同。
其次,p4 status
并不总是只读状态命令。我 认为 我最初默认发布此消息时使用的 perforce 版本实际上更改了工作区的状态 - 它实际上将本地更改添加到待处理的更改列表中。但我可能记错了。那家公司使用的是非常旧的 perforce 版本。在我更新它时,使用日期为 2014 年 4 月 8 日的 perforce 客户端版本,默认的 p4 status
行为是只读的,但如果你不这样做,请注意不要使用 -A
选项'想对工作区进行更改。
看起来需要 p4 status
和 p4 opened
的某种组合才能在单个命令中获得其他 VCS 的最低限度。
详情:
大多数版本控制系统都有一个命令可以快速告诉您工作区的状态。信息如:
- 检出哪些文件进行编辑(如果 VCS 使用检出)
- 哪些检出文件已在本地更改或删除
- 哪些文件即使未签出也已更改
- 例如哪些文件可能有您想要合并的更改
- 可能哪些文件在存储库中比在您的工作区中最近更新
- 例如您可能希望合并到工作区的更改
- 哪些文件在工作区中但(尚未)受版本控制
- 例如您可能希望将哪些文件添加到版本控制系统
- 或者可能添加到您的 .hgignore/.gitignore/... 忽略文件模式
- 哪些文件在版本控制下但不在工作区中
- 例如您可能希望从版本控制系统中删除哪些文件
- 或者您可能不小心删除了哪些文件
具体提供什么状态信息取决于 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
---+ 更好?请分享!
如果你有更好的,请分享。
问:其他版本控制工具的 status 命令的 perforce 等价物是什么?
例如git status
或 hg status
或 bzr status
或 svn status
? (令人困惑的是,cvs update -nq
是该版本控制系统最接近的东西。)
提示:它不是 p4 status
。
首先,p4 status
不会告诉您关于待定更改列表中的文件。您需要为此调用 p4 opened
,但输出格式完全不同。
其次,p4 status
并不总是只读状态命令。我 认为 我最初默认发布此消息时使用的 perforce 版本实际上更改了工作区的状态 - 它实际上将本地更改添加到待处理的更改列表中。但我可能记错了。那家公司使用的是非常旧的 perforce 版本。在我更新它时,使用日期为 2014 年 4 月 8 日的 perforce 客户端版本,默认的 p4 status
行为是只读的,但如果你不这样做,请注意不要使用 -A
选项'想对工作区进行更改。
看起来需要 p4 status
和 p4 opened
的某种组合才能在单个命令中获得其他 VCS 的最低限度。
详情:
大多数版本控制系统都有一个命令可以快速告诉您工作区的状态。信息如:
- 检出哪些文件进行编辑(如果 VCS 使用检出)
- 哪些检出文件已在本地更改或删除
- 哪些文件即使未签出也已更改
- 例如哪些文件可能有您想要合并的更改
- 可能哪些文件在存储库中比在您的工作区中最近更新
- 例如您可能希望合并到工作区的更改
- 哪些文件在工作区中但(尚未)受版本控制
- 例如您可能希望将哪些文件添加到版本控制系统
- 或者可能添加到您的 .hgignore/.gitignore/... 忽略文件模式
- 哪些文件在版本控制下但不在工作区中
- 例如您可能希望从版本控制系统中删除哪些文件
- 或者您可能不小心删除了哪些文件
具体提供什么状态信息取决于 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
---+ 更好?请分享!
如果你有更好的,请分享。