TortoiseSVN學習--標籤、分支及分支的新建、合併

一、正確的SVN項目倉庫結構

很多項目人員往往在創建項目倉庫以後,直接將整個項目的源代碼提交到倉庫的根目錄,這往往是由於對SVN沒有系統的瞭解。

引用《版本控制之道》書裏的圖片,正確的項目倉庫目錄結構如下圖:
在這裏插入圖片描述在根目錄下首先建立三個目錄:

  • trunk:又稱爲主幹,這個子目錄纔是應該將項目源代碼提交到的位置。
    trunk目錄代表着開發的主線,大部分的開發工作涉及到的更新、提交都在這個目錄裏,就跟“原始”的SVN使用一樣。

  • branches:這個目錄就是分支目錄,所有新建的分支都應放在這個目錄。
    每一個branches下的分支代表了一條並行的開發過程,如果不明白可以繼續往後看。

  • tags:這個目錄是標籤目錄,所有建立的標籤都應放在tags目錄下。
    每一個tags下的標籤代表了一個項目的時間節點,或者說是事件、里程碑。

在SVN服務器新建倉庫(Repository)時,選擇Single-project repository,
在這裏插入圖片描述
可自動創建以上三個文件夾。
在這裏插入圖片描述

二、分支和標籤

什麼是分支
分支的基本概念:一條基於另外一條開發線存在的分支,並共享在分離之前的日誌,一個分支就象一個拷貝的存在,並從那裏離開,並具有自己的歷史。我的解釋是分支相當於對於開發中的主幹進行了複製,從此在分支上後續的所有操作與主幹上的所有操作互不影響。
什麼是標籤
標籤和分支的本質是一樣的。
標籤用來記錄項目中的事件或里程碑,可以讓你給項目中的事件起一個名字,比如發佈2.0.0版本,以後你可以使用這個名字來簽出它。
標籤和分支對比
你可以在分支上進行並行開發,而不應該修改標籤裏的內容,標籤僅應當作爲一份代碼的快照

三 新建分支

在之前,我們在服務器上建立一個StandardRepository,其根目錄下包含了三個空目錄:trunks、tags、branches,我們將其檢出到本地:
在這裏插入圖片描述
爲了方便說明,我們在trunk文件夾下新建兩個文本文件:A.txt,B.txt
在這裏插入圖片描述
A.txt中輸入:A File: Version 1.0
B.txt中輸入:B File: Version 1.0
保存後提交到SVN服務器。

創建分支

  1. 在trunk上點擊右鍵,玄真TortoiseSVN->分支/標籤(Branch/Tag);
  2. 在“至路徑(To path)”輸入框中輸入新建分支的路徑,一般是:/branches/分支名,也就是相當於分支保存的路徑名,這裏我們輸入/branches/b01;
  3. 在下面選擇“版本庫中的最新版本(HEAD revision in the repository)”,爲當前SVN中trunks目錄下最新的代碼建立分支,如果需要爲指定版本建立分支,可以進行選擇;
  4. 點擊確定,分支創建完成,並給出相關提示。
    在這裏插入圖片描述注:勾選“切換工作副本至新分支/標記”後,當前的工作分支會切換到新建的分支上
    在這裏插入圖片描述
    這時,我們打開本地的branches目錄,發現目錄依然爲空,沒有方纔建立的分支,這是因爲分支建立的操作是在服務器端完成的,當需要編輯分支時,在branches目錄點擊SVN更新,我們可以發現剛纔建立的分支b01已經下載下來了。
    在這裏插入圖片描述

四、 合併分支

我們模擬一下主幹、分支並行開發的情況。
基礎版本:對應版本分支圖2,5
在這裏插入圖片描述
分支:打開branches/b01下的A.txt,對其進行編輯保存,提交,對應版本號6;
在這裏插入圖片描述
主幹:打開trunk下的A.txt,對其進行編輯並保存,提交,對應版本號7;
在這裏插入圖片描述

注:提交的時候要注意“提交至”的路徑,看清是提交到branches下,還是trunk下;不同的分支之間,我們可以通過右鍵TortoiseSVN->切換,來選擇對應的提交分支;

我們在trunk文件夾右鍵,選擇TortoiseSVN->版本分支圖,可以看到:
在這裏插入圖片描述
在Branch和Trunk並行開發過程中,進行合併操作有兩種類型:

  1. 將主幹trunk中的修改合併到branch中;
  2. 將branch最後合併會trunk;

4.1 主幹Trunk的修改合併到Branch中

第1步,在branches/B01文件夾上右鍵,選擇TortoiseSVN->合併(Merge);

第2步,在彈出的對話框中選擇第一項:合併一個版本範圍;
在這裏插入圖片描述第3步,點擊下一步,這裏的“合併的源(URL to merge from)”填Trunk的路徑,理解爲從主幹合併到分支,“將要合併的修改範圍”就是要將trunk的哪些版本所對應的變化合併到branch中,確認工作副本的路徑爲B01分支的路徑。
在這裏插入圖片描述
第4步,點擊下一步
在這裏插入圖片描述
第5步,點擊合併,提示代碼衝突
在這裏插入圖片描述第6步,選擇“編輯”,出現合併工具界面,解決好衝突後,灰色的“Mark as resolved”變成藍色,點擊“Mark as resolved”。這時,我們進入本地Branches/B01中的A.txt處於已修改的狀態了。 至此,branch 已經完全和 trunk 同步,合併發生在本地 working copy,只要你不提交就不會影響到 repository。

4.2 分支合併到主幹

和4.1步驟相同,需要注意的是:
第1步中,需要在trunk上右鍵;
第3步中,合併源應爲待合併分支的路徑;

4.3 分支合併類型

在合併的第2步中,工具給出了兩種合併類型的選擇:

  • 合併一個版本範圍;
  • 合併兩個不同的樹;

合併一個版本範圍

此類型應用最爲廣泛,主要是把分支中的修改合併到主幹上來。在主幹上點擊右鍵選擇合併,然後選擇合併類型:合併一個範圍的版本。合併的源URL填寫的是要合併的分支的URL,待合併的版本範圍如果爲空,則指的是合併分支上所有的版本,即自從分支創建以來到分支當前最新版本的所有演變。如果只是選擇其中一個版本,或者幾個版本,那麼就表示只是將制定的n個版本的變化合併到主幹上。如果只是選擇其中一個版本,那麼表示只是選擇那個版本的修改,之前或之後的修改將不被採納。
合併兩個不同的樹
此類型與前一種類型不同,第一種類型可以選擇分支合併的版本,主幹不能選擇版本;而這種類型則是無論是主幹還是分支都可以選擇合併的版本,即可以選擇過去的一個主幹版本與分支的某個版本進行合併。合併的時候以選擇的分支版本爲主,如果選擇的主幹版本與分支版本有不同的地方,合併時主幹部分將被放棄。

起始URL:選擇主幹目錄的URL(應當和當前工作副本的URL一致,這個是所謂的合併點)

結束URL:選擇要合併的分支的URL。

起始和結束的版本:一般起始版本應當找到最後一次同步時的版本,如果從沒有同步過(第一次合併),則選擇創建分支時的版本,結束版本一般是最新版本,如果你不想將某些內容合併進主幹的話,也可以選擇一個合併點。

舉例說明:
在這裏插入圖片描述
如上圖中主幹在2.0版本是創建一個分支,然後兩者進行並行開發,主幹當前最新版本爲5.0,分支當前最新版本爲2.3;現在需要將分支合併的主幹上,那麼

  • 如果採用“合併一個版本範圍選項”的話,合併源選擇分支,可選擇分支版本2.1、2.2、2.3或某幾個版本的修改進行合併,主幹版本將從2.0開始,合併所有的修改;如分支選擇2.2,那麼將合併主幹2.0,3.0,4.0,5.0和分支2.1,2.2的所有修改;
  • 如果採用“合併兩個不同的樹”,起始源選擇主幹,版本可選擇2.0,3.0,4.0,5.0或某幾個版本的修改進行合併,結束源選擇要合併的分支,版本可選擇2.1、2.2、2.3或某幾個版本的修改進行合併;如分支選擇2.2,主幹選擇4.0,那麼將合併主幹4.0,5.0和分支2.1,2.2上進行的所有修改;
發佈了47 篇原創文章 · 獲贊 63 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章