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

时间:2008-09-25 14:32:50

标签: version-control cvs

最近我在源代码树中移动了源文件。例如,将一堆文件放入公共程序集中。我一直在这样做,我从CVS删除文件,然后在新的位置再次添加它。问题是文件的修订号重置为1.1。是否有一些简单的方法来移动东西而不重置数字。

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

6 个答案:

答案 0 :(得分:22)

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

  1. 登录托管CVS存储库的服务器并复制(不要移动)存储库文件,从您想要的位置到新位置。
  2. 在客户端cvs从旧位置删除文件。
  3. 在客户端cvs更新新位置的目录内容(以便文件出现在那里)。
  4. 在客户端执行复制文件的强制cvs提交(使用-f标志)以记录它被重新复制的事实(为该效果添加日志注释)。
  5. 此过程将文件历史记录保留在新位置,并且不会破坏存储库的向后连续性。如果您及时移回,该文件将正确显示在其旧位置。您也可以使用相同的步骤重命名文件。

答案 1 :(得分:9)

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

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

一般来说,这种方法没有直接问题,但是如果您决定查看可能依赖于以前目录结构的产品的早期版本,则必须考虑后果!

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

答案 2 :(得分:3)

online CVS manual详细介绍了如何执行此操作:

  

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

     

$ cvs重新命名旧的新   $ cvs commit -m“将old重命名为new”

     

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

     

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

Subversion将允许您移动文件,但也会对其进行跟踪,以便新文件获取最新版本号。

答案 5 :(得分: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并提交。