在 CVS 中移动文件而不重置修订号

Posted

技术标签:

【中文标题】在 CVS 中移动文件而不重置修订号【英文标题】:Move a file in CVS without resetting the revision number 【发布时间】:2010-09-13 02:53:05 【问题描述】:

最近我一直在我们的源代码树中移动源文件。例如,将一堆文件放入一个通用程序集中。我一直在这样做,我从 CVS 中删除文件,然后在新位置再次添加它。问题是文件的修订号重置回 1.1。有没有一些简单的方法可以在不重置数字的情况下移动东西。

我可能应该提到我无权访问存储库,所以任何需要的东西都对我没有帮助,但它可能会帮助其他人。

【问题讨论】:

【参考方案1】:

它似乎保留了您在移动时必须使用 -v 选项的版本历史记录,见下文

CVS 重命名文件很麻烦。 从存储库的角度来看,您 只是可以删除文件或添加新文件。 所以,通常的流程是

mv oldfile.c newfile.c cvs 删除 oldfile.c cvs 添加新文件.c

这确实有效,但你失去了所有 更改您关心的信息 在多年的提交操作中 艰难的发展,这可能是 不是你想要的。但是有办法; 您必须可以直接访问 存储库。首先,去那里,找到 您的项目所在的目录并执行 以下:

cp oldfile.c,v newfile.c,v

现在转到您的工作目录并 做一个 cvs 更新; newfile.c 将 显示为一个新文件。现在你可以 cvs 删除 oldfile.c 并提交。

【讨论】:

【参考方案2】:

实现此效果的普遍接受的方法是执行以下步骤。技术术语是 repocopy。

    登录托管 CVS 存储库的服务器并将存储库文件从所需位置复制(不要移动)到新位置。 在客户端 cvs 从旧位置删除文件。 在客户端 cvs 更新新位置中的目录内容(这样文件就会出现在那里)。 在客户端执行复制文件的强制 cvs 提交(使用 -f 标志)以记录它被重新复制的事实(为此添加日志注释)。

此过程将文件历史记录保留在其新位置,并且也不会破坏存储库的向后连续性。如果您及时返回,该文件将正确显示在其旧位置。您也可以使用相同的过程重命名文件。

【讨论】:

【参考方案3】:

无法使用仅限客户端的命令移动文件。您需要访问服务器文件系统,并且可以将存储库中的“,v”文件移动到新位置。这将保留所有历史记录,因为 CVS 将每个修订版本及其 cmets 记录在一个文件中。

请记住,文件在被删除时会被移至“阁楼”子文件夹(无法从客户端看到)。这就是文件被删除后可以恢复的方式。

这种方法通常不会立即出现问题,但是如果您决定查看可能依赖于先前目录结构的产品的早期版本,则必须考虑后果!

这是其他版本控制系统(如 Subversion)具有明确优势的地方。

【讨论】:

【参考方案4】:

嗯,最简单的方法是访问你的 repo 所在的 cvs 服务器,然后用 mv 移动你的文件夹/文件(假设是 *nix 机器)。这样文件的历史记录将被保留。

【讨论】:

【参考方案5】:

这不是 CVS 的已知缺陷之一 - 没有用于移动文件的内置机制吗?不过,我已经很久没有使用它了,所以也许现在有一个解决方案。

Subversion 将允许您移动文件,但也会对其进行跟踪,以便新文件获得最新的修订号。

【讨论】:

【参考方案6】:

online CVS manual 提供了有关如何执行此操作的一些详细信息:

移动文件的正常方法是发出 cvs rename 命令。

$ cvs 重命名旧的新的 $ cvs commit -m "旧改名新"

这是移动文件的最简单方法。它不容易出错,并且保留了所做操作的历史记录。 CVSNT 客户端可以通过检出旧版本的存储库来检索原始名称。

此功能仅在 CVSNT 服务器 2.0.55 及更高版本上受支持。

【讨论】:

普通 cvs 怎么样?据我所知,CVSNT 只是 Windows。

以上是关于在 CVS 中移动文件而不重置修订号的主要内容,如果未能解决你的问题,请参考以下文章

从 CVS 检出文件中获取有关 CVS 服务器的信息

svn - 基于文件的修订号而不是 repo

如何使用 java 代码重命名和移动文件而不删除内容

Tortoise SVN 提交查询

在 SVN 中添加带有修订号的文件

你如何移动文件?