CVS删除粘性标签而不更新

Pet*_*ter 7 cvs

CVS真的让我抓狂!

有没有删除粘性标签而不更新文件内容的技巧?我知道'cvs up -A'但这也改变了我的文件.

或者反过来说:有没有办法在不首先设置粘性标签的情况下将完整目录更新为上一个日期?

背景:我使用的是CVS和HG版本的工作副本,我搞砸了,所以我不想回到它同步的最新点,然后检查CVS会发生什么.

感谢致敬.

bio*_*ker 11

这可能取决于您的CVS版本,并附带不支持它的警告,但我曾经手动从CVS/Entries文件中删除粘性标记.当我想将我的工作版本回滚到过去的版本时,我做了很多,但是避免使用粘性标签,以便在我准备好时可以正常更新.

首先,只需将文件从存储库更新到所需的版本即可.为了清洁,我习惯先删除我的本地副本.

rm myfile
cvs update -r 1.20 myfile
Run Code Online (Sandbox Code Playgroud)

这当然会留下粘性标签.

cvs status myfile
===================================================================
File: myfile      Status: Up-to-date

   Working revision:    1.20
   Repository revision: 1.20    /cvsroot/myproject/myfile,v
   Sticky Tag:          1.20
   Sticky Date:         (none)
   Sticky Options:      (none)
Run Code Online (Sandbox Code Playgroud)

粘性标记存储在最后一个字段的CVS/Entries文件中.如果您使用文本编辑器查看CVS /条目并搜索文件名,您会发现:

/myfile/1.20/Thu Nov  6 18:22:05 2014//T1.20
Run Code Online (Sandbox Code Playgroud)

最后的T1.20代表粘性标签.你可以简单地删除它,留下这条线:

/myfile/1.20/Thu Nov  6 18:22:05 2014//
Run Code Online (Sandbox Code Playgroud)

现在,粘性标签消失了.如果有人签入了新版本并且您还没有更新,那么您处于相同的状态.

cvs status myfile
===================================================================
File: myfile      Status: Needs Patch

   Working revision:    1.20
   Repository revision: 1.21    /cvsroot/myproject/myfile,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)
Run Code Online (Sandbox Code Playgroud)

一旦你确认这个工作在一个文件上,并且勇敢,你可以使用你最喜欢的工具(perl,awk等)一次性完成整个目录,修改CVS/Entries中的每个文件(或者只有那些你想修改的行).你当然应该谨慎使用.我使用perl,并保留.backup以便在遇到任何问题时重新使用:

perl -pi.backup -e 's|//T[\.0-9]+$|//|' CVS/Entries
Run Code Online (Sandbox Code Playgroud)