CVS真的让我疯狂!CVS删除粘贴标签没有更新
是否有任何技巧在不更新文件内容的情况下移除粘性标签? 我知道'cvs up -A',但这也改变了我的文件。
或其他方式: 有什么办法可以在不设置粘性标签的情况下将完整的目录更新为上一个日期?
背景: 我用CVS和HG版本的工作副本,我搞砸了,所以我不想回到它同步的最新点,然后检查会发生什么来自CVS。
感谢和问候。
CVS真的让我疯狂!CVS删除粘贴标签没有更新
是否有任何技巧在不更新文件内容的情况下移除粘性标签? 我知道'cvs up -A',但这也改变了我的文件。
或其他方式: 有什么办法可以在不设置粘性标签的情况下将完整的目录更新为上一个日期?
背景: 我用CVS和HG版本的工作副本,我搞砸了,所以我不想回到它同步的最新点,然后检查会发生什么来自CVS。
感谢和问候。
这可能取决于您的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
或者反过来想:有什么办法来更新完整的 目录到以前的日期,而不在第一 地方设置粘性标签?
粘性标签在那里要记住你不在头部。如果你提交更改,他们将不会去那里。在正常情况下,删除粘性标签可能会很危险。
我认为最好的方法是从存储库同步到更新副本的日期创建一个修补程序。然后应用补丁反转。用修改后的更改创建补丁并应用于其他存储库。
在一个干净的(但不是同步回购):
$ cvs diff -R -D date_when_synced >patchfile
$ patch -R -pNUM <patchfile
然后在你做你不想与cvs up -A
失去修改回购:
$ cvs diff -R >patchfile2
然后在“clean”存储库中应用该补丁:
我认为这可能做你想做的,如果我理解正确的话。
您可以使用-p选项将“cvs up”写入标准输出,您可以使用“>”将其重定向到原始文件。这避免了粘性。
这确实有效,但会让您处于“本地修改”状态。如果你想稍后更新,你需要再次处理这个文件。 – biomiker
我也是,现在,我既HG和CVS(HG版本为自己的方便,CVS因为它是传统项目)。我已经做了类似于HG/GIT/CVS/RCS/BZR/...我们需要找到,。或者自己写一篇关于这种多个VCS跟踪的指导。 –