在多人協同開發項目時,版本控制是非常重要的。
作為一個學習計劃來學習SVN,主要的參考資料是《使用Subversion進行版本控制——針對Subversion1.4》,這個資料其實是網上比較流行翻譯版本,原作者是Ben Collins-Sussman...。
本文是這個學習計劃的開篇:-)。介紹SVN背后的一些知識。
SVN是一個版本控制系統,版本控制系統的核心任務是實現寫作編輯和數據共享。
版本控制系統有兩個模型:鎖定-修改-解鎖模型和拷貝-修改=合并模型。
SVN采用的是后者,拷貝-修改-合并模型使得用戶可以并行的工作,不必等待別人。但是,這個模型可能會遇到“沖突”的情況,即多個用戶對同一個文件進行了修改。在沖突發生時,需要用戶交流(:-)交流的重要性?。┖笤偈止じ?。但幸運的是,沖突的發生并不頻繁。所以,這種模型是很實用的。
圖一表明了拷貝-修改-合并模型:

圖一
Harry和Sally為同一個項目各自建立了一個工作拷貝,工作是并行的,修改了同一個文件A,Sally首先保存修改到版本庫,當Harry想去提交修改的時候,版本庫提示文件A已經過期,換句話說,A在他上次更新之后已經更改了,所以當他通過客戶端請求合并版本庫和他的工作拷貝之后,碰巧Sally的修改和他的修改不沖突,所以一旦他把所有的修改集成到一起,也可以將工作拷貝保存到版本庫。
圖二表明了拷貝-修改-合并模型下沖突發生:

圖二
如果Sally和Harry的修改交迭(:-)對同一塊代碼進行了修改)怎么辦?這種情況叫做沖突。當Harry告訴他的客戶端去合并版本庫的最新修改到自己的工作拷貝時,他的文件就會處于沖突狀態;它可以看到一對沖突的修改集,并手工的選擇保留一組修改。需要注意的是軟件不能自動解決沖突,只有人可以理解并作出智能的選擇,一旦Harry手工的解決了沖突(也許需要和Sally討論),就可以安全的吧合并的文件保存到版本庫。