2010-08-09 41 views
1

首先,在我工作的地方,我們被迫使用CVS並且沒有任何其他的 選擇 。我個人使用git。如果需要,CVS提交的有效方法是使用CVS更新嗎?

有時候我並不總是做一個模塊上的cvs update但我會下載實際的文件關閉該保證是最新的(佔99%),生產服務器。

我最終會做一個cvs commit找我無法更新所以情況是這樣的:

cvs commit file.xml 
cvs commit: Up-to-date check failed for 'file.xml' 
mv file.xml 2 
cvs update file.xml 
rm file.xml 
cvs mv 2 file.xml 

我在想編寫一個shell腳本,自動更新CVS我提交的文件和提交在他們身上...但想知道是否有一些本地的方式來做到這一點。

任何意見,而不是不使用CVS讚賞!

PS - 而我使用!!:n其中n是數字。我只是沒有在我的代碼示例中使用它,因爲它更清晰。

+0

我是否正確地假設您示例的倒數第二行實際上是爲了讀取'rm file.xml'而不是'cvs rm file.xml'? – 2010-08-10 14:43:31

+0

雅,這是正確的:) – 2010-08-10 14:48:39

回答

0

使用CVS,因爲它是打算使用。換句話說,cvs update之前cvs commitcvs update修改CVS沙箱中的其他一些信息,只是簡單地複製文件不會。

你真的不應該直接訪問版本庫。這會造成很多潛在的問題。

+0

在給出的例子中沒有直接的存儲庫訪問。他正在完全在工作副本內移動/重命名。 – 2010-08-10 12:11:22

+0

@Oliver:哎呀,錯過了。當然,這仍然是一種不好的做法,在這種情況下,很有可能吹掉QA中的變化。 – 2010-08-10 14:04:31

1

我懷疑該文件的下載是一個優化步驟?更新是提交之前的必需步驟的原因是將文件的上下文與服務器上的文件保持同步。我可以想到手動方法的幾個問題:

  1. 手動下載可能會更快,但它也可能會忽略相關的文件更改。
  2. 您描述的問題:您必須更新才能讓CVS接受您的簽入。
  3. 假設你設法解決它,我懷疑你會被微妙的CVS錯誤咬傷。

如果你的工作需要孤立一些,那就建立一個分支並在那裏工作。手動搖動CVS是一條流淚之路。

1

在這個示例會話中你所做的事實際上是相當粗魯的行爲,對於顯然在此期間提交的更新版本的作者是非常不禮貌的行爲,因爲您將有效地恢復所有這些更改。這就是爲什麼CVS要求文件基於提示修訂(又名「最新」)才允許他們承諾的原因。

但是,如果還原或替換那些中間更改正是您想要執行的操作,那麼您引用的步驟確實很可能是最快的方法。但是,這種方法的缺點是不能跟蹤回覆過程:至少在CVSNT上執行proper reversion會導致記錄合併點,因此修訂圖表會顯示您恢復到哪個修訂版本。

update至少將遠程更改與本地更改合併之前,不移動文件。但是,如果沒有進行驗證,這種情況就不會發生,因此對這種情況採取完全腳本化的方法將毫無意義。