2010-04-30 44 views
2

CVS是否允許將文件提交到與檢出的文件不同的分支?該手冊頁和some sites建議,我們可以做一個cvs ci -r branch-1 file.c,但它提供了以下錯誤:承諾與提交不同的分支-r

cvs commit: Up-to-date check failed for `file.c'
cvs [commit aborted]: correct above errors first!

我做了一個cvs diff -r branch-1 file.c,以確保在我BASEbranch-1 file.c的內容確實是相同的。

我知道我們可以使用cvs co -r branch-1手動檢出,將主分支合併到它(並修復任何合併問題),然後進行檢查。問題是有很多分支,我想使用腳本自動化事物。 This thread似乎暗示-r已被刪除。有人可以證實嗎?

如果ci -r不支持,我想到做這樣的事情的:

  • 確保分支版本和基本版本是帶有cvs diff
  • 檢查同樣在當前分支
  • 將文件的副本保存在臨時文件中
  • 對於每個分支:
    • 從b檢出牧場與-r
    • 與臨時文件替換該文件
    • 入住(它會去分支爲-r粘性)
  • 刪除臨時文件

替換部分聽起來像是在欺騙我 - 你能想到可能發生的任何潛在問題嗎?任何我應該小心的事情?有沒有其他的方法來自動化這個過程?

回答

2

請注意,即使diff顯示零輸出,文件也可能不是最新的。例如,如果您在一次提交中向文件中添加一行文本,並在下一次將其刪除,則沿着兩個修訂版的路徑沒有差異。

至於提交 - 組織。對我來說,似乎是一個實驗性的功能,實際上一個你只要使用更好:

cvs update -r <branch> <file> 
cvs update -j <ver> -j <ver> <file> 
cvs commit <file> 

此外,傳播的單一提交給所有其他分支編程就像你建議的方式略有可疑的業務,因爲你平時需要相當多的人腦來解決衝突。

+0

如果存在編輯撤消操作,即使在強制提交後,修訂歷史記錄仍然會反映該內容。我只是想確保我不承諾版本的內容不同於我正在編輯的基本版本的內容(並因此失去對該分支的任何更改)。而且,人類干預似乎是解決合併衝突的唯一實用方法。 – Amarghosh 2010-05-06 06:26:34