10

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

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

4

6 回答 6

24

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

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

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

于 2008-09-25T14:57:29.403 回答
10

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

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

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

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

于 2008-09-25T14:42:48.003 回答
3

在线 CVS 手册有一些关于如何执行此操作的详细信息:

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

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

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

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

于 2008-09-25T14:36:07.787 回答
3

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

于 2008-09-25T14:37:10.890 回答
2

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

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

于 2008-09-25T14:36:15.243 回答
2

它似乎保留了您在移动时必须使用 -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 并提交。

于 2008-09-25T15:08:08.223 回答