如何在 Perforce 中控制版本号?

Posted

技术标签:

【中文标题】如何在 Perforce 中控制版本号?【英文标题】:How to control version number in Perforce? 【发布时间】:2011-01-09 10:01:25 【问题描述】:

我想在 Perforce 中以“x.x.x”或类似于“git tag”的格式自动生成版本号。有什么想法吗?

【问题讨论】:

【参考方案1】:

我不知道 git 标签可以自动生成版本号。 你可以暗示git describe

RCS 可以是store, and then display the version 的一种方式,而不是生成一个。

版本号方案are many (p4 uses its own),加上标签需要cleaned up once in a while。 您将需要某种脚本来生成一个(followinf 来自 p4 邮件列表):

对于坚持“每次更改都需要新版本标记”的 dweeb,我建议如下:[警告:这是以 Perforce 为中心的。]

    您的 makefile 可以通过运行以下脚本生成 version.h 做这样的事情:
CHANGENUM=`p4  changes  -m1 -s  submitted //depot/main/...#have  |  cut  -f2  -d' '`
echo "#define VERSION    \"main codeline to change #$CHANGENUM\"  " > $SRC/include/version.h

2 。然后你做一个构建和版本字符串(对于任何 引用 VERSION) 自动正确。 当然,我会为“官方构建”做这个version.h 技巧和 “通宵构建”并使开发人员使用的默认 version.h 具有硬编码字符串,其效果是“从主代码行构建但不是官方的 - 不要 部署”。


在 Git 2.27(2020 年第二季度)中,“git p4”在 RCS 方面做得更好。

请参阅commit 1ec4a0a、commit 38ecf75、commit cd1e0dc(2020 年 2 月 14 日)和commit 4935c45、commit aa8b766、commit 9f59ca4、commit 6b602a2(2020 年 2 月 11 日)Ben Keene (seraphire)。(由 Junio C Hamano -- gitster -- 合并于 commit 5f2ec21,2020 年 4 月 22 日)

git-p4:添加RCS关键字状态消息

签字人:Ben Keene

在 p4 提交过程中,git-p4 将尝试为 p4 工作区中找到的文件应用补丁。 但是,如果 P4 使用 RCS 关键字扩展,这个补丁可能会失败。

当补丁失败时,用户会收到失败警告,git-p4 将尝试从文件中清除扩展文本并重新应用补丁。git-p4 的当前版本移除 RCS 扩展后,不会告诉用户重新应用尝试的结果,这可能会造成混淆

在清除RCS关键字后,在git补丁成功应用后添加新的打印语句。

【讨论】:

谢谢,VonC。我正在处理的不是 C/C++ 项目,它只是一堆文档(我会定期用版本号对它们进行 tar)。但我想基本的想法是一样的。我将创建一个 VERSION 文件并使用您的脚本来更新它。我又收到两个问题: 1. 我应该把这个 VERSION 文件放在哪里?如果我更新 VERSION 文件,我猜 CHANGENUM 会再次更改; 2. 这样,我不能保证触发这个脚本自动更新VERSION文件,对吧? (有几个人可以访问并更改此文件夹的内容) @aXqd:对于任何语言,这个想法确实是一样的。此类文件的通常位置是根目录,但您的项目中按约定定义 的任何其他位置都可以。触发器不能保证总是以这种方式运行,因此在这里使用某种更改内容触发器可能会更好。 对不起,英语不是我的母语。我的第一个问题想问的是'在我提交之后,我将触发一个脚本来更新 VERSION 文件,但是我必须再次提交那个新的 VERSION 文件,所以 CHANGENUM 也会再次改变'。这里好像是个循环。 @aXqd:通常,这种触发器只能检测到一个文件的提交(VERSION 一个)......并且不会在那个中做任何事情> 案例。

以上是关于如何在 Perforce 中控制版本号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iCloud 中强制版本冲突

如何在 perforce 和 VMS 上为 C++ 进行代码审查/调试/编码/测试/版本控制

如何在 Perforce 树中查找未跟踪的文件? (模拟svn状态)

在 Perforce 中查看具有特定版本的文件

Perforce:如何将稍后的提交应用于同步到早期版本的工作区?

如何在pygame中控制单个子弹