Apache Subversion:快速入門

安裝 SVN 軟體用戶端

安裝 svn 軟體用戶端,開始在使用 Subversion 作為版本控制系統的專案上進行協作。

若要安裝軟體用戶端程式,您可以從原始碼版本自行建置,或下載二進制套件。您可以在 官方二進制套件頁面 取得預先建置的 Subversion 軟體用戶端清單。如果您想自行編譯軟體,請在 原始碼 頁面取得原始碼。

安裝軟體用戶端後,您應該可以透過發出 svn 指令來測試它。您應該會看到以下輸出

$ svn
Type 'svn help' for usage.

現在您可以開始使用命令列軟體用戶端與遠端儲存庫進行互動。

如果您不熟悉 Subversion,您可能會比較適合使用圖形化用戶端。我們沒有維護此類用戶端的清單;建議您在網路上搜尋 Subversion GUI 用戶端。

術語

什麼是儲存庫?

儲存庫是一個版本控制資料庫,通常駐留在伺服器上,且通常透過 Apache HTTP Server(透過 mod_dav_svn 模組)或 svnserve 伺服器公開。儲存庫作為單一真實來源,且作為一個中央儲存,它包含已版本化的資料的完整變更歷程,以修訂的形式呈現。

儲存庫 URL 範例

  • Apache HTTP Server:https://svn.example.com/repos/MyRepo/MyProject/trunk
  • svnserve:svn://svn.example.com/repos/MyRepo/MyProject/branches/MyBranch
  • 直接存取(Unix 風格):file:///var/svn/repos/MyRepo/MyProject/tags/1.1.0
  • 直接存取(Windows 風格):file:///C:/Repositories/MyRepo/trunk/MyProject

什麼是工作副本?

工作副本是您用來與中央 Subversion 儲存庫互動的本機且私人的工作空間。您可以使用工作副本修改專案的內容,並擷取其他人提交的變更。

工作副本包含專案資料,在本地端檔案系統上看起來就像一般目錄,但有一個主要差異,工作副本會追蹤檔案和目錄的狀態和變更。你可以將工作副本視為具有版本控制功能的一般目錄。工作副本的根目錄有一個名為 .svn 的管理目錄。管理目錄包含 Subversion 管理版本控制功能所需的元資料。

你可以從同一個儲存庫或專案建立任意數量的具有任何組合的本地修改的工作副本。

基本工作

將資料匯入儲存庫

如果你要將現有的非版本化資料匯入 SVN 儲存庫,你應該執行 svn import 指令。以下是範例

$ svn import https://svn.example.com/repos/MyRepo/MyProject/trunk -m "Initial project import"

檢出工作副本

若要開始修改專案資料,你必須建立版本化專案的本地副本。你可以使用命令列 svn 程式或任何你偏好的 GUI 程式。專案的本地副本稱為工作副本,你可以透過執行 svn checkout 指令來建立。以下是範例

$ svn checkout https://svn.example.com/repos/MyRepo/MyProject/trunk MyWorkingCopy

結果是你會取得位於 MyRepo 儲存庫中名為 MyProject 專案的 trunk 的工作副本。工作副本會位於電腦上的 MyWorkingCopy 目錄中。請注意,你可以檢出 trunk 以外的分支或標籤(假設它們已存在於儲存庫中)。

您也可以取得整個 MyRepo 儲存庫的工作副本。但您應該避免這麼做。一般來說,您不需要為您的工作取得整個儲存庫的工作副本,因為您的工作副本可以立即切換到另一個開發分支。此外,Subversion 儲存庫可能包含許多不相關的專案,最好為每個專案建立一個專用的工作副本,而不是為所有專案建立一個工作副本。

更新工作副本

您不是唯一一個處理專案的人,對吧?這表示您的同事也在修改專案的資料。若要保持最新狀態並取得其他人提交的修改,您應該在您的工作副本中執行 svn update 指令。結果是,您的工作副本將與儲存庫同步並下載您的同事所做的變更。

在將本機修改提交到儲存庫之前,更新您的工作副本是很好的習慣。

在您的本機工作副本中進行變更

大多數時候,您會透過修改工作副本的內容來修改專案的資料。一旦您對修改感到滿意,並且已仔細檢閱,您就可以準備將它們提交到中央儲存庫。

修改現有檔案

使用您慣用的文字處理器、圖形編輯器、音訊編輯軟體、IDE 等工具,照常修改檔案。只要您將變更內容儲存到磁碟,Subversion 便會自動辨識變更。

提交變更至儲存庫

若要發布您在工作副本中所做的變更,您應執行 svn commit 指令。

提交變更前請先檢閱!使用 svn statussvn diff 指令檢閱變更。

以下是提交指令的範例

$ svn commit -m "My Descriptive Log Message"

請注意 -m (--message) 選項。您應始終包含描述性的提交紀錄訊息。這有助於其他人(包括您自己)了解您提交變更的原因。建議您在紀錄訊息中包含變更摘要。

執行檔案和目錄操作

您可以在工作副本中對專案資料執行任何動作,但涉及複製、移動、重新命名和刪除的動作必須使用對應的 svn 指令執行。

Subversion 沒有使用啟發式追蹤來追蹤工作副本中的樹狀結構變更。Subversion 需要明確追蹤樹狀結構變更。如果您使用一般檔案系統指令執行樹狀結構變更,例如移動或複製,Subversion 將不會知道此操作。若要追蹤樹狀結構變更,Subversion 應知道這些變更。

新增檔案和目錄

將新檔案或目錄放入工作副本,Subversion 會將它們視為「未版本化」。除非您執行 svn add 指令,否則 Subversion 不會自動開始追蹤新檔案。

$ svn add foo.cs

移動和重新命名檔案和目錄

使用 svn movesvn rename 指令移動和重新命名檔案和目錄

$ svn move foo.cs bar.cs

指令 svn renamesvn move 的別名。

複製檔案和目錄

使用 svn copy 指令複製檔案和目錄

$ svn copy foo.cs bar.cs

刪除檔案和目錄

使用 svn delete 指令刪除檔案和目錄

$ svn delete foo.cs

回復或捨棄本機變更

使用 svn revert 指令捨棄本機未提交的變更

$ svn revert foo.cs

捨棄的未提交變更將永久遺失。您將無法復原已回復的變更。請謹慎使用 svn revert

分支和標籤

您應使用 svn copy 指令建立分支和標籤。這是用於複製工作副本和儲存庫中項目(當您希望這些項目在歷史上相關時)的指令。

指令 svn copy 用於分支,因為分支在技術上是您複製來源的副本。然而,這並非您在複製本機檔案系統中檔案時所熟悉的普通副本。Subversion 儲存庫中的分支稱為 "便宜副本",類似於符號連結。因此,建立新分支所需的時間極短,且幾乎不佔用 Subversion 儲存庫的空間。您可以建立分支並將其用於任何您想要的變更,無論變更的大小和範圍為何。

使用直接 URL 對 URL 複製建立分支

在 Subversion 中進行分支非常簡單。在最簡單的形式中,建立新分支需要您針對遠端儲存庫的 URL 執行指令。例如,我們從主幹建立一個新分支

$ svn copy https://example.com/MyRepo/trunk https://example.com/MyRepo/branches/MyNewBranch -m "Creating a new branch"

設定本機儲存庫

您可以在電腦上建立一個 Subversion 儲存庫,並使用 file:// 架構在本地端與其互動。此方法可以協助您在本地端使用 Subversion 來追蹤個人檔案和單人專案。

下列程序會為現有專案建立一個最小環境。它會將包含專案的目錄轉換為新建立的本機 Subversion 儲存庫的工作副本。因此,您可以修改工作副本中的檔案,並追蹤本機儲存庫中的變更。

在 Unix 上

  1. 建立父目錄 .svnrepos,您將在此放置您的 SVN 儲存庫
    $ mkdir -p $HOME/.svnrepos/
  2. .svnrepos 下建立一個新儲存庫 MyRepo
    $ svnadmin create ~/.svnrepos/MyRepo
  3. 在新儲存庫中建立建議的專案配置
    $ svn mkdir -m "Create directory structure." \
      file://$HOME/.svnrepos/MyRepo/trunk \
      file://$HOME/.svnrepos/MyRepo/branches \
      file://$HOME/.svnrepos/MyRepo/tags
  4. 變更目錄至 ./MyProject,您的未版本化專案位於此處
    $ cd $HOME/MyProject
  5. 將目前目錄轉換為儲存庫中 trunk/ 的工作副本
    $ svn checkout file://$HOME/.svnrepos/MyRepo/trunk ./
  6. 排程您的專案檔案以新增至儲存庫
    $ svn add --force ./
  7. 提交專案檔案
    $ svn commit -m "Initial import."
  8. 更新您的工作副本
    $ svn update

在 Windows 上

  1. 建立父目錄 C:\Repositories,您將在此放置您的 SVN 儲存庫
    mkdir C:\Repositories
  2. C:\Repositories 下建立一個新儲存庫 MyRepo
    svnadmin create C:\Repositories\MyRepo
  3. 在新儲存庫中建立建議的專案配置
    svn mkdir -m "Create directory structure." ^
      file:///C:/Repositories/MyRepo/trunk ^
      file:///C:/Repositories/MyRepo/branches ^
      file:///C:/Repositories/MyRepo/tags 
  4. 變更目錄至 C:\MyProject,您的未版本化專案位於此處
    cd C:\MyProject
  5. 將目前目錄轉換為儲存庫中 trunk/ 的工作副本
    svn checkout file:///C:/Repositories/MyRepo/trunk .
  6. 排程您的專案檔案以新增至儲存庫
    svn add --force ./
  7. 提交專案檔案
    svn commit -m "Initial import."
  8. 更新您的工作副本
    svn update

另請參閱 Subversion Book 中的快速入門說明

取得更多協助

如果您是 Apache Subversion (SVN) 的新手,請閱讀 Subversion 版本控制手冊 (SVNBook)。SVNBook 是 SVN 的聖經,是 Subversion 使用者和管理員必讀的書籍。您可以在 https://svnbook.dev.org.tw/en/1.8/ 找到 SVNBook 1.8。