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

圖一
  Harry和Sally為同一個(gè)項(xiàng)目各自建立了一個(gè)工作拷貝,工作是并行的,修改了同一個(gè)文件A,Sally首先保存修改到版本庫,當(dāng)Harry想去提交修改的時(shí)候,版本庫提示文件A已經(jīng)過期,換句話說,A在他上次更新之后已經(jīng)更改了,所以當(dāng)他通過客戶端請求合并版本庫和他的工作拷貝之后,碰巧Sally的修改和他的修改不沖突,所以一旦他把所有的修改集成到一起,也可以將工作拷貝保存到版本庫。

  圖二表明了拷貝-修改-合并模型下沖突發(fā)生:

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