2013-07-09 55 views
7

CVS真的讓我瘋狂!CVS刪除粘貼標籤沒有更新

是否有任何技巧在不更新文件內容的情況下移除粘性標籤? 我知道'cvs up -A',但這也改變了我的文件。

或其他方式: 有什麼辦法可以在不設置粘性標籤的情況下將完整的目錄更新爲上一個日期?

背景: 我用CVS和HG版本的工作副本,我搞砸了,所以我不想回到它同步的最新點,然後檢查會發生什麼來自CVS。

感謝和問候。

+0

我也是,現在,我既HG和CVS(HG版本爲自己的方便,CVS因爲它是傳統項目)。我已經做了類似於HG/GIT/CVS/RCS/BZR/...我們需要找到,。或者自己寫一篇關於這種多個VCS跟蹤的指導。 –

回答

10

這可能取決於您的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 
+0

順便說一句,我不覺得刪除粘貼標籤是危險的概念。當然通過支持的方法會更好。但正如我所說的那樣,結果狀態與您最初簽出之後簽入到存儲庫的狀態完全相同,而您尚未更新。如果你有本地修改,你會被告知合併,然後才能更新。如果你沒有本地修改,那麼你可以乾淨地更新。 – biomiker

+0

幸運的是,我不必再爲遺留的CVS項目工作,所以我沒有測試過這個答案,但我會接受這個答案作爲接受的答案,因爲它與我所尋找的最接近。 – Peter

+0

正在工作的修訂版本號在版本庫的最後面。因此,我無法再次提交「檢索」版本。錯誤消息:「最新檢查失敗」。解決方案是否存在? –

0

或者反過來想:有什麼辦法來更新完整的 目錄到以前的日期,而不在第一 地方設置粘性標籤?

粘性標籤在那裏要記住你不在頭部。如果你提交更改,他們將不會去那裏。在正常情況下,刪除粘性標籤可能會很危險。

我認爲最好的方法是從存儲庫同步到更新副本的日期創建一個修補程序。然後應用補丁反轉。用修改後的更改創建補丁並應用於其他存儲庫。

在一個乾淨的(但不是同步回購):

$ cvs diff -R -D date_when_synced >patchfile

$ patch -R -pNUM <patchfile

然後在你做你不想與cvs up -A失去修改回購:

$ cvs diff -R >patchfile2

然後在「clean」存儲庫中應用該補丁:

​​

我認爲這可能做你想做的,如果我理解正確的話。

1

您可以使用-p選項將「cvs up」寫入標準輸出,您可以使用「>」將其重定向到原始文件。這避免了粘性。

+1

這確實有效,但會讓您處於「本地修改」狀態。如果你想稍後更新,你需要再次處理這個文件。 – biomiker