最近我一直在我们的源代码树中移动源文件。例如,将一堆文件放入一个通用程序集中。我一直在这样做,我从 CVS 中删除文件,然后在新位置再次添加它。问题是文件的修订号重置回 1.1。有没有一些简单的方法可以在不重置数字的情况下移动东西。
我可能应该提到我无权访问存储库,所以任何需要的东西都对我没有帮助,但它可能会帮助其他人。
最近我一直在我们的源代码树中移动源文件。例如,将一堆文件放入一个通用程序集中。我一直在这样做,我从 CVS 中删除文件,然后在新位置再次添加它。问题是文件的修订号重置回 1.1。有没有一些简单的方法可以在不重置数字的情况下移动东西。
我可能应该提到我无权访问存储库,所以任何需要的东西都对我没有帮助,但它可能会帮助其他人。
实现此效果的普遍接受的方法是执行以下步骤。技术术语是复制。
此过程将文件历史记录保留在其新位置,并且也不会破坏存储库的向后连续性。如果您及时返回,该文件将正确显示在其旧位置。您也可以使用相同的过程重命名文件。
无法使用仅限客户端的命令来移动文件。您需要访问服务器文件系统,并且可以将存储库中的“,v”文件移动到新位置。这将保留所有历史记录,因为 CVS 将每个修订及其注释记录在该文件中。
请记住,文件在被删除时会被移动到“阁楼”子文件夹(无法从客户端看到)。这就是文件被删除后如何恢复的方式。
通常,这种方法不会立即出现问题,但是如果您决定检查可能依赖于先前目录结构的产品的早期版本,则必须考虑后果!
这是其他版本控制系统(如 Subversion)具有明确优势的地方。
在线 CVS 手册有一些关于如何执行此操作的详细信息:
移动文件的正常方法是发出 cvs rename 命令。
$ cvs 重命名旧的新的
$ cvs commit -m "将旧的重命名为新的"这是移动文件的最简单方法。它不容易出错,并且保留了所做操作的历史记录。CVSNT 客户端可以通过检出旧版本的存储库来检索原始名称。
此功能仅在 CVSNT 服务器 2.0.55 及更高版本上受支持。
最简单的方法是访问你的 repo 所在的 cvs 服务器,然后用 mv 移动你的文件夹/文件(假设是一个 *nix 机器)。这样文件的历史将被保留。
这不是 CVS 的已知缺陷之一——没有用于移动文件的内置机制吗?然而,我已经很久没有使用它了,所以也许现在有一个解决方案。
Subversion 将允许您移动文件,但也会对其进行跟踪,以便新文件获得最新的修订号。
它似乎保留了您在移动时必须使用 -v 选项的版本历史记录,请参见下文
CVS 重命名文件很麻烦。从存储库的角度来看,您可以删除文件或添加新文件。所以,通常的流程是
mv oldfile.c newfile.c cvs delete oldfile.c cvs add newfile.c
这确实有效,但是在多年的艰苦开发过程中,您丢失了您在提交操作中编写的所有更改信息,这可能不是您想要的。但是有办法;您必须可以直接访问存储库。首先,去那里,找到你的项目所在的目录并执行以下操作:
cp oldfile.c,v newfile.c,v
现在转到您的工作目录并进行 cvs 更新;newfile.c 将显示为一个新文件。现在您可以 cvs 删除 oldfile.c 并提交。