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 状态”) 的相关文章

  • 我可以忽略全局 .gitignore 吗?

    我的全局 gitignore 一般都很棒 但对于这个一次性项目 我不希望应用全局规则 如何删除这个怪异存储库的全局 gitignore 规则 在您的存储库中运行此命令 git config local core excludesfile f
  • 执行 git Push 时出现“diff.renamelimit 变量”警告

    我将本地提交推送到远程 git 服务器并收到以下警告消息 remote warning only found copies from modified paths due to too many files remote warning y
  • 清理远程 Git 分支

    我已经将 SVN 存储库移至 Git 可能由于多次克隆 我现在只剩下一堆看起来像这样的分支 BranchA origin BranchA remotes BranchA remotes origin BranchA remotes orig
  • 为什么 Jenkins SVN 插件在连接到我的 VisualSVN 服务器时会出现错误 E170001?

    我对 VisualSVN 服务器的了解 它支持 Windows Active Directory 身份验证和使用我的 Windows 用户名和密码的 基本 身份验证 我可以成功使用 TortoiseSVN CollabNet 和 Mac O
  • Spring Cloud Config - 不允许使用 git-upload-pack

    我有一个在 docker 环境中运行的 spring boot 应用程序 它连接到 Git 存储库以获取应用程序的配置 我的问题是 当尝试获取 properties 文件时 应用程序有时会出错 这很奇怪 因为如果我更改用户和密码 同一个应用
  • TortoiseGit - 更改默认合并消息

    系统描述 Windows 7的 git版本2 10 1 windows 1 乌龟Git 2 3 0 0 I want 合并提交消息在不同的情况下有所不同fully自动方式 no manual amend Summary 在windows上
  • 如何停用 Xcode git 功能? (删除 git 集成)

    我的 Xcode 项目位于 git 上 但我不喜欢 Xcode git 集成 有时 我有来自 Xcode 的错误 https stackoverflow com questions 7388560 error fatal not a git
  • 如何恢复已删除的远程分支

    我们的远程主分支被删除 我有主存储库的本地副本 但它已经过时了 我可以通过将最后一个已知的提交哈希值插入 URL 来查看 github 中的分支 但未能成功恢复它 我尝试了几个步骤来恢复它 git reset hard 16deddc05c
  • 如何解决这一 Mercurial 冲突?

    我对 Mercurial 和 Python 感到沮丧 因为它们让简单的事情变得困难 我有一个微不足道的冲突 由于 Mercurial 没有给出任何建议 我什至不知道如何解决这个微不足道的文件冲突 冲突是微不足道的 但如果我不能解决这个问题
  • 如何在 SVN 中分支单个文件?

    分支的颠覆概念似乎专注于创建整个存储库的 不稳定 分支 并在其上进行开发 是否有一种机制可以创建单个文件的分支 对于用例 请考虑具有多个特定于平台的源代码 c 实现的通用头文件 h 这种类型的分支是永久性的 所有这些分支都将不断发展 偶尔会
  • GitPython 检查 git pull 是否更改了本地文件

    使用 GitPython 我只想在拉取后本地文件发生更改时才调用函数 例如 如果我在一台单独的计算机上进行推送 然后拉第一台计算机 它按预期工作 但不提供任何输出 理想的输出是已更改的文件列表 或者只是告诉我拉动是否有错误 没有拉动 因为分
  • 如何在颠覆合并期间忽略文件夹

    我有一大堆更改需要合并到我的分支中 但我想在合并过程中忽略特定文件夹 是否可以使用 Subversion 来做到这一点 如果是这样那我该怎么办呢 编辑 我想忽略的文件夹位于存储库中 但在合并期间我不会对此文件夹进行更改 您可以像平常一样进行
  • 创建多个 git 分支的联合分支

    我希望能够在现有分支之上分层其他分支 并独立修改这些分支 这很有用 例如 允许将各个子项目的二进制文件统一到同一个项目中bin目录 一般来说 给定的文件仅存在于一层中 理想情况下 我想我会使用 unionfs 来完成此任务 但它必须以某种方
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我
  • 如何在源代码管理中存储 Visual Studio 的调试配置

    Visual Studio 的调试配置存储在 user文件是用户特定的并且传统上被源代码管理忽略 我对工作目录参数感兴趣 我需要它在程序员的机器上保持一致 并且它具有以下价值 outDir而不是默认的 ProjectDir 我怎样才能解决这
  • 是否可以从 Github 网站或 API 获取分支合并列表?

    在我们的工作流程中 不会 直接 提交到主分支 主分支仅接收来自 Pull 请求的合并 我们可以将每次合并视为添加到主分支的新功能 因此 我想获得一个合并到 master 中的列表 作为一种可视化随着时间的推移添加到产品中的功能块的方式 gi
  • 在 python 中找不到 git 可执行文件

    我试图使用访问密钥克隆 git 存储库 但是当我尝试运行它时 它抛出一个异常 说找不到 git 可执行文件 但我已经安装了 git 并且 in it py 显示了正确的路径 C Program Files Git bin 我还安装了 git
  • 有什么方法可以从提交的消息中获取提交的 SHA 值吗?

    当做一个git tag 我并不总是擅长记住 HEAD 6 例如 是包含的还是排他的 鉴于我的大多数提交都以问题号为前缀 我想知道是否有一些神奇的命令可以从其消息的一部分中搜索提交 SHA 我知道这很容易做到git log并从那里开始工作 但
  • git rebase 吃了我的提交!为我翻译“git reflog”输出?

    我已经完成了五次提交 我想在推送它们之前将它们全部合并为一次提交 出于某种原因 我决定尝试通过与通常使用的不同的方式来做到这一点 FWIW 我试图按照此处的说明进行操作http gitready com advanced 2009 02 1
  • 设置 git 别名,但调用它会给出“找不到命令”

    我想在 git 中设置一个别名来计算存储库中的总行数 因此我进入 Git Bash 并输入以下内容 git config global alias linecount ls files z xargs 0 wc l 我输入命令后 没有出现错

随机推荐