p4 命令相当于 git/hg/bzr/svn status 之类的命令是什么? (提示:不是“p4 状态”)

2023-12-01

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

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

提示:不是p4 status.

First, p4 status不会告诉您有关待更改列表上的文件的信息。你需要打电话p4 opened为此,但输出格式完全不同。

Second, p4 status并不总是只读状态命令。我think我最初默认发布此内容时使用的 perforce 版本实际上更改了工作区的状态 - 它实际上将本地更改添加到待处理的更改列表中。但我可能记错了。该公司使用了非常旧的 perforce 版本。截至我更新此内容时,使用日期为 2014/04/08 的 perforce 客户端版本,默认值p4 status行为是只读的,但请注意不要使用-A如果您不想更改工作区,请选择此选项。

它看起来像是一些组合p4 status and p4 opened需要在单个命令中获得其他 VCS 所做的最低限度的操作。

DETAIL:

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

  • what files are checked out for editing (if the VCS uses checkouts)
    • 哪些签出的文件已在本地更改或删除
  • which files have been changed even though NOT checked out
    • 例如哪些文件可能包含您想要合并的更改
  • possibly which files are more recently updated in the repository than in your workspace
    • 例如您可能想要合并到工作区中的更改
  • what files are in the workspace but are not (yet) under version control
    • 例如您可能想要将哪些文件添加到版本控制系统
    • 或者可能添加到您的 .hgignore/.gitignore/... 忽略文件模式
  • what files are under version control but are not in the workspace
    • 例如您可能想要从版本控制系统中删除哪些文件
    • 或者您可能不小心删除了哪些文件

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

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

显然,除非是这样。

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


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

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

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

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

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

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

旧版本的 perforce 要么有p4 status表现得像p4 reconcile默认情况下对工作区进行更改,例如添加到工作区。或者说,当我写下这一页时,我已经崩溃了。

New: git/hg/bzr/svn status = p4 opened + p4 status**

New: 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/ - / - 协调使:/'

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

我将它们组合如下:

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 [ "$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

---+ 更好?请分享!

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

p4 命令相当于 git/hg/bzr/svn status 之类的命令是什么? (提示:不是“p4 状态”) 的相关文章

  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • Netbeans 和 Git,.obj 文件被忽略

    我正在开发一个涉及 obj 文件的小型 git 项目 当我查看 项目选项卡 时 我发现它们被忽略了 但如果我查看我的 gitignore 我无法理解为什么 DepthPeeling nbproject private DepthPeelin
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • 如何在不删除 Subversion 中文件的情况下将文件从版本控制中删除?

    我不小心用 add 命令向 SVN 添加了一个二进制文件 现在我想将其从版本控制中删除 但不删除该文件 我该怎么做呢 svn rm 保持本地
  • GIT:以下未跟踪的工作树文件将被签出覆盖

    我有两个分支 一个称为 master 另一个称为 dev 我目前位于 master 分支 我想转到 dev 分支将文件移动到开发服务器 但是当我执行 git checkout dev 我收到消息 以下未跟踪的工作树文件将被覆盖 查看 pag
  • TFS 2017 - 如何构建/交付仅更改的文件?

    我正在使用 TFS 2017 关于标题 我找到了一个术语 增量构建 但是 我找不到在哪里设置它 我尝试在 构建参数 p IncrementalBuild true 中添加增量参数 但总是收到错误 表明这是错误的参数 是否可以仅交付 或构建并
  • Mercurial 和 TortoiseHG - 推送更改后更新远程存储库

    将更改推送到远程存储库时 是否无法自动运行更新以使更改 文件可用 Use changegroup挂在远程端 如Mercurial 常见问题解答中进行了描述 http mercurial selenic com wiki FAQ FAQ 2F
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • 撤销 Mercurial 中的最后一个 addremove 操作?

    I typed hg addremove 但后来意识到有些文件不应该成为提交的一部分 我应该做的是将这些文件添加到 hgignore 中 然后运行 addremove 并提交 有办法解决这个问题吗 如果您还没有提交 只需使用hg forge
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • 除非我在项目目录中,否则 Git 不会显示日志

    我正在尝试打电话git log当我在不同的目录中时 我经过的位置 git is git log Users Leica proj1 但它说 不是 git repo 如果我cd进入这个目录 就可以正常工作了 cd Users Leica Pr
  • Mercurial:如何管理公共/共享代码

    我将 Mercurial 用于个人用途 并出于各种原因考虑将它作为 SVN 的替代品用于某些分布式项目 我已经习惯将它用于自包含项目 并且可以看到各种共享选项 但是我还没有找到任何关于管理公共库的指南 以与 subversion 中的外部提
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • 从 C# 中的子上下文菜单项访问时,源代码控制为空

    当他们从上下文菜单条中单击子菜单项 颜色 gt 红色 时 我试图更改按钮的颜色 该代码附加到用户定义的按钮数量 为了弄清楚他们试图更改哪个按钮 我尝试从子项目转到源代码管理 如下所示 发送者 gt 所有者工具条 gt 所有者菜单 gt 源代
  • 使用 Windows 网络共享目录时 Hg 存储库损坏

    我希望我能在这里得到一些帮助 因为 SO UX 比 Mercurial 邮件列表更好 多年来我一直在家里愉快地使用 Mercurial 我还将它与 Bitbucket Cloud 一起用于一些更严肃 但仍然是爱好 的项目 去年 我将我的团队
  • 如何创建名称中带有正斜杠的标签

    当我已经有了类似的标签时 有什么方法可以创建名称中带有正斜杠的 git 标签吗 假设我有 1 16 0 标签 并且我想创建 1 16 0 1 0 0 标签 git tag 1 16 0 1 0 0 error refs tags 1 16
  • Perforce 将目录快速同步到干净状态

    我想要一个不需要强制同步的快速解决方案 它将指定的目录置于其原始存储库状态 相同的文件可能会从磁盘中删除 可以从磁盘添加相同的文件 磁盘上的某些文件可能被修改 某些文件可能会被标记为删除 添加或修改 我想要的只是确保在运行命令后我不会有这些

随机推荐