CVS删除粘性标签而不更新

时间:2013-07-09 09:29:34

标签: cvs

CVS让我疯狂!

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

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

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

感谢和问候。

3 个答案:

答案 0 :(得分:11)

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

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

rm myfile
cvs update -r 1.20 myfile

这当然会留下粘性标签。

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)

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

/myfile/1.20/Thu Nov  6 18:22:05 2014//T1.20

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

/myfile/1.20/Thu Nov  6 18:22:05 2014//

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

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)

一旦你确认这个工作在一个文件上,并且勇敢,你可以根据需要立即执行整个目录,使用你最喜欢的工具(perl,awk等)来修改CVS中的每个文件/条目(或仅您想要修改的那些行)。你当然应该谨慎使用。我使用perl,并在出现任何问题时保留.backup:

perl -pi.backup -e 's|//T[\.0-9]+$|//|' CVS/Entries

答案 1 :(得分:1)

您可以使用-p选项“cvs up”来写入标准输出,您可以使用“>”将其重定向到原始文件。这可以避免粘性。

答案 2 :(得分:0)

  

或者反过来说:有没有办法更新完整版   目录到上一个日期而没有在第一个日期设置粘性标签   放置?

粘性标签是为了记住您不在HEAD中。如果您提交更改,那么他们就不会去那里。在正常情况下,删除粘性标签可能会很危险。

我认为最好的方法是从存储库同步到更新副本的日期创建补丁。然后应用补丁反转。使用修改后的更改创建补丁并应用于其他存储库。

在干净(但未同步的回购)上:

$ cvs diff -R -D date_when_synced >patchfile

$ patch -R -pNUM <patchfile

然后在回购邮件中,您使用cvs up -A进行了不想丢失的修改:

$ cvs diff -R >patchfile2

然后在“干净”存储库中应用补丁:

$ patch -pNUM <patchfile2

如果我理解正确的话,我认为这可以做你想要的。