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

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

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

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