1. 程式人生 > >版本控制工具簡篇:SVN

版本控制工具簡篇:SVN

1 開發中的實際問題

1.1 開發中的實際問題:備份

  • 小明負責的模組將要完成了,就在即將Release之前的一瞬間,電腦突然藍屏了,硬碟光榮犧牲了,幾個月來的努力付之東流。需求之一:備份

1.2 開發中的實際問題:程式碼還原

  • 這個專案需要一個很複雜的功能,老王摸索了一個星期終於有眉目了,可是程式碼已經改的面目全非,完全回不到從前。需求之二:程式碼還原

1.3 開發中的實際問題:協同修改

  • 小剛和小強先後從伺服器上下載了同一個檔案:Analysis.java。小剛在Analysis.java檔案的第30行生命了一個方法,叫count(),先儲存到了檔案伺服器上;小強在Analysis.java檔案中的第50行聲明瞭一個方法,叫sum(),也隨後儲存到了檔案伺服器上,於是,count()方法只能儲存在小剛的記憶之中了。需求之三:協同修改

1.4 開發中的實際問題:多版本專案檔案管理

  • 老徐是以為專案經理,我會告訴你他把每一個版本都儲存一份嗎?我們會告訴你這些工程裡面有很多檔案是重複的嗎?我會告訴你他為此刪了很多電影嗎?需求之四:多版本專案檔案管理

1.5 開發中的實際問題: 追溯問題程式碼的編寫人和編寫時間

  • 老王是另一個專案經理,每次因為專案進度被罵之後,他都不知道該找那個程式設計師。就拿這次來說吧,有個bug除錯了很長時間才知道是因為相關屬性沒有在應用初始化的時候賦值。可是二胖、王東等都不承認是自己乾的。需求之五:追溯問題程式碼的編寫人和編寫時間

1.6 開發中的實際問題:許可權控制

  • 小溫這2天幸福的如同掉進了蜜罐裡,因為他成功的得到了前臺MM小麗的芳心,可他鬱悶的是這幾天他總是受到QA小組發來的郵件,要求他修改程式中的bug,可是他本地電腦上是沒有這些bug的,“難道我的程式碼被誰修改了”,是的,小溫沒來之前,小麗是QA小組小徐的女朋友。需求之六:許可權控制

 

2 版本控制簡介

2.1 版本控制的概述

  • 版本控制,最初來源於工程設計領域,是維護工程藍圖的標準做法,能追蹤工程藍圖從誕生一直到定案的過程。是一種記錄若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。

2.2 Subversion

  • Subversion就是一款實現版本控制的工具軟體,通常也稱為版本控制器,簡稱SVN。
  • Subversion是Apache軟體基金會組織下的一個專案。

2.3 Subversion的優秀特性

  • ①目錄版本控制:CVS只能追送的那個檔案的歷史,但是Subversion實現了一個“虛擬”的檔案系統,可以追蹤整個目錄樹的修改,檔案和目錄都是版本控制的,結果就是可以在客戶端對檔案和目錄進行移動和負責命令。
  • ②原子提交:提交要麼是完全進入版本庫,要麼一點沒有,這允許開發者以一個邏輯塊提交修改。
  • ③版本控制的元資料:每個檔案和目錄都有一組附加的“屬性”,你可以發明和儲存任意的鍵值對,屬性也會像檔案內容一樣被納入到版本控制之中。
  • ④可選的網路層:Subversion在版本庫訪問方面有一個抽象概念,利於人們去實現新的網路機制,Subversion的“高階”伺服器是Apache網路伺服器的一個模組。使用HTTP的變種協議,這給了Subversion在穩定性和互動性方面很大的好處,可以直接使用伺服器的特性,例如認證、授權、傳輸壓縮和版本庫瀏覽等等。也有一個輕型的,單獨執行的Subversion伺服器,這個伺服器使用自己的協議,可以輕鬆的用SSH封裝。
  • ⑤一致的資料處理:Subversion使用二進位制檔案差異演算法展現檔案的區別,對於檔案和二進位制檔案具備一致的操作方式,2中型別的檔案都壓縮存放在版本庫中,差異在網路上的雙向傳遞。
  • ⑥高效的分支和標籤:分支和標籤的程式碼不與工程的大小成比例,Subversion建立分支和標籤時只是複製專案,使用了一種類似於硬連結的機制,因而這類操作通常會花費很少並且相對固定的時間,以及很小的版本庫空間。

2.4 SVN的工作原理

  • 採用的是客戶端/伺服器模式。
  • 在伺服器的版本庫中儲存專案檔案的各個版本,所有參與協同開發的程式設計師在自己本地電腦上儲存一個工作副本。SVN支援程式設計師將本地副本更新到伺服器端的最新版本,也支援將本地副本的最新改變更新到伺服器端,而且後面的更新不會覆蓋簽名的更新,而是作為一個新的版本被儲存下來--SVN甚至支援將本地工作副本恢復為伺服器端儲存的某一個歷史版本。

2.5 SVN的基本操作

  • ①檢出(checkout):將一個伺服器端建立好的專案整個下載到本地,這是到專案組後參與開發的第一步,只需要執行一次。
  • ②更新(update):將本地檔案更新為伺服器端的最新版本,通常為每天上班時或者修改公共檔案之前執行一次。
  • ③提交(commit):將本地修改提交到伺服器端,通常每天下班前或每實現一個功能、完成一個模組時執行一次。

2.6 SVN的安裝