1. 程式人生 > >TotoiseSVN-小烏龜的使用方法

TotoiseSVN-小烏龜的使用方法

專案管理實踐教程一、工欲善其事,必先利其器【Basic Tools】中,我已經講解了怎樣安裝TortoiseSVN。在上面的講解中已經講了怎麼使用VisualSVN Server了,今天我要講的是,TortoiseSVN的簡單使用方法。

一、簽入原始碼到SVN伺服器

假如我們使用Visual Studio在資料夾StartKit中建立了一個專案,我們要把這個專案的原始碼簽入到SVN Server上的程式碼庫中裡,首先右鍵點選StartKit資料夾,這時候的右鍵選單如下圖所示:

圖2-2-1

clip_image002

點選Import,彈出下面的窗體,其中http://zt.net.henu.edu.cn 是伺服器名,svn是程式碼倉庫的根目錄,StartKit是我們在上個教程中新增的一個程式碼庫:

說明:左下角的CheckBox,在第一次簽入原始碼時沒有用,但是,在以後你提交程式碼的時候是非常有用的。

圖2-2-2

clip_image004

點選OK按鈕,會彈出下面的窗體,要求輸入憑據:

圖2-2-3

clip_image006

在上面的窗體中輸入使用者名稱和密碼,點選OK按鈕:

圖2-2-4

clip_image008

如上圖所示,好了,原始碼已經成功簽入SVN伺服器了。這時候團隊成員就可以遷出SVN伺服器上的原始碼到自己的機器了。

二、簽出原始碼到本機

在本機建立資料夾StartKit,右鍵點選Checkout,彈出如下圖的窗體:

圖2-2-5

clip_image010

在上圖中URL of Repository:下的文字框中輸入svn server中的程式碼庫的地址,其他預設,點選OK按鈕,就開始簽出原始碼了。

說明:上圖中的Checkout Depth,有4個選項,分別是遷出全部、只簽出下一級子目錄和檔案、只簽出檔案、只簽出空專案,預設的是第一項。上面的例子中,我們也可以使用web的方式訪問程式碼庫,在瀏覽器中輸入http://zt.net.henu.edu.cn/svn/StartKit/

這時候也會彈出對話方塊,要求輸入使用者名稱和密碼,通過驗證後即可瀏覽程式碼庫中的內容。

搞定!原始碼已經成功簽出到剛才新建的StartKit目錄中。

開啟StartKit目錄,可以看到如下圖的資料夾結構:

圖2-2-5

clip_image012

一旦你對檔案或資料夾做了任何修改,那麼檔案或資料夾的顯示圖片機會發生變化。下圖中我修改了其中的二個檔案:

圖2-2-7

clip_image014

大家看一下不同狀態所對應的圖片:

圖2-2-8

clip_image016

我們已經知道怎麼將原始碼簽入到SVN伺服器,怎麼從伺服器簽出程式碼到本機,也簡單瞭解了不同狀態所對應的圖案啦。

三、提交修改過的檔案到SVN伺服器

上面的圖2-2-7中,我修改了位於Model檔案中的二個檔案ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN伺服器。

注意:提交原始碼到伺服器時,一定確保本機的程式碼是最新版本,否則可能提交失敗,或者造成版本衝突。

在Model資料夾上點選右鍵或在Model檔案下的空白處點選右鍵,點選SVN Commit…彈出下面的窗體:

圖2-2-9

clip_image018

點選OK按鈕後,彈出如下圖的窗體:

圖2-2-10

clip_image020

四、新增新檔案到SVN伺服器

我們在Model檔案下新增一個新的類檔案UserInfo.cs,在Model檔案下的空白處點選右鍵,點選SVN Commit…,和上面講的提交修改過的檔案到SVN伺服器一樣,就可以了。

另外也可以在檔案UserInfo.cs上點選右鍵,點選TortoiseSVN=>>Add,彈出如下圖的窗體:

圖2-2-11

clip_image022

選中UserInfo.cs檔案,點選OK按鈕,這樣並沒有將這個檔案提交到SVN伺服器,只是將這個檔案標記為原始碼庫庫中的檔案,並將其狀態置為修改狀態。之後,我們要再SVN Commit這個檔案一次,才可以將其真正提交到SVN伺服器上的程式碼庫中。

上面講是新增檔案,實際上,新增資料夾的步驟也是一樣的,這裡就不說了。

五、更新本機程式碼與SVN伺服器上最新的版本一致

這個也很簡單,只要在需要更新的資料夾上點選右鍵或在該檔案下的空白處點選右鍵,點選SVN Update,就可以了。

注意:更新操作可能會因為版本衝突而失敗,這是可以使用合併【Merge】或其他方法解決;也可能因為鎖定【Get Lock】而失敗,這是需要先解鎖【Release Lock】。

六、重新命名檔案或資料夾,並將修改提交到SVN伺服器

只要在需要重新命名的檔案或資料夾上點選右鍵,點選TortiseSVN=>>Rename…,在彈出的窗體中輸入新名稱,點選OK按鈕,就可以了。此方法也不是直接重新命名,而是將該檔案或資料夾的名稱標記為重新命名後名稱,也需要我們使用SVN Commit提交到SVN伺服器後才真正重新命名。

七、刪除檔案或資料夾,並將修改提交到SVN伺服器

最簡單就是,你直接刪除檔案或資料夾,然後使用SVN Commit提交更新到SVN伺服器。另外一種方法是在你要刪除的檔案或資料夾上點選右鍵=>>TortoiseSVN=>>Delete刪除,此方法也不是直接刪除,而是將該檔案或資料夾的狀態置為刪除,也需要我們使用SVN Commit提交到SVN伺服器後才真正刪除。

說明:實際上,從你把原始碼遷簽入SVN伺服器開始,每一個版本的資料和檔案,就算是你已經刪除了的,也都可以隨時遷出。

以上只是TortoiseSVN最簡單的幾個功能,其實他的功能遠不止這些,其他的功能大家可以在使用的過程中慢慢體會,有些功能我會在下面的教程中使用到,到時候會和大家講清楚用法。

注意:向SVN伺服器提交原始碼的時候,一定不要提交bin、obj等資料夾,否則會很麻煩。但是web專案的bin目錄除外,但是web專案的bin目錄中的引用其他專案而生成的dll不需要提交。

一個好習慣:如果專案中引用了其他的第三方的程式集,比如EnterpriseLibrary、FCKEditor等,這時候不要簡單從他們的安裝位置引用,而是在你的解決方案下,新增一個Library的目錄,把需要的程式集複製到這裡,然後從Library目錄引用,這樣有什麼好處,自己想一想吧!

1. export 和check out

export 下載原始碼

用法:

1、新建一個空的資料夾,右鍵點選它,可以看到TortoiseSVN選單以及上面的SVN Checkout。

2、不用管這個Checkout,我們選擇TortoiseSVN選單下的Export...,接著它會讓你輸入url。

3、比如輸入【迷宮探寶】的SVN地址是:http://game-rts-framework.googlecode.com/svn/trunk/

4、其他選項不需要更改,Omit externals不要勾選,HEAD Revision選中表示最新的程式碼版本,接著點選OK即可將程式碼匯出到這個目錄中:)

check out 意思簽出,雖然和Export的效果一樣是把程式碼從伺服器下載到本地,但是Checkout有驗證的功能,Checkout到某處的程式碼,將會被TortoiseSVN監視,裡面的檔案可以享受各種SVN的服務。

2 .每次提交程式碼需要注意哪些問題

如果你更新了目錄中的檔案,提交程式碼需要用到commit功能,commit的功能不僅僅是上傳,他會和伺服器上面的檔案進行對比,假如你更新了某個檔案而伺服器上面也有人更新了這個檔案,並且是在你checkout之後做的更新,那麼它會嘗試將你的更新和他人的更新進行融合(merge),假如自動merge不成功,那麼報告conflict,你必須自己來手動merge,也就是把你的更新和別人的更新無衝突的寫在一起。

commit的時候,最好填寫Log資訊,這樣保證別人可以看到你的更新究竟做了寫什麼。這就相當於上傳檔案並且說明自己做了那些修改,多人合作的時候log非常重要。

TortoiseSVN的commit只會上傳原先checkout然後又被修改了的檔案,假如你新加入了某些檔案,需要右鍵點選檔案選擇Add,然後檔案上面會出現一個加號,在下次commit的時候它就會被upload並且被標記為綠色對勾。沒有綠色對勾的檔案不會被commit。

假如你需要給帶有綠色對勾檔案改名或者移動它的位置,請不要使用windows的功能,右鍵點選它們,TortoiseSVN都有相應的操作。想象這些檔案已經不在是你本地的東西,你的一舉一動都必須讓Tortoise知道。

假如修改了某個檔案但是你後悔了,可以右鍵點選它選擇Revert,它將變回上次checkout時候的情況。或者Revert整個工程到任意一個從前的版本.

下面描述在使用Commit時的幾個注意點:

-------------如有多個檔案需要同時提交,同時檔案在不同的目錄下,必須找到這些檔案的最短目錄上點選Commit,TortoiseSVN會搜尋被點選目錄以及該目錄下所有的檔案,並將修改變動的檔案羅列在列表中。

-------------仔細檢視列表中的檔案,確定哪些檔案時需要更新的,如果不需要更新某個已經變化了的檔案,只需要在該檔案上點選右鍵,選擇還原操作;選擇需要新增的檔案,不要將臨時檔案新增到版本庫中。

-------------如遇到檔案衝突(衝突:要提交的檔案已被其他人改動並提交到版本庫中)要啟用解決衝突功能。

3. 如何保持本地版本和伺服器版本同步

使用update來同步本地和伺服器上的程式碼。同樣是右鍵選擇SVN update,所有的更改就會從伺服器端傳到你的硬碟。注意,假如別人刪除了某個檔案,那麼更新之後你在本地的也會被刪除。

如果本地的程式碼已經被修改,和commit一樣會先進行merge,不成功的話就會報告conflict

4 如何在同一個在一個工程的各個分支或者主幹之間切換

使用tortoise SVN-->switch

在URL中輸入branch或trunk的url地址

5.如何比較兩個版本之間的差別

本地更改

如果你想看到你的本地副本有哪些更加,只用在資源管理器中右鍵選單下選TortoiseSVN→ 比較差異。

與另外一個分支/標籤之間的差異

如果你想檢視主幹程式(假如你在分支上開發)有哪些修改或者是某一分支(假如你在主幹上開發)有哪些修改,你可以使用右鍵選單。在你點選檔案的同時按住Shift鍵,然後選擇TortoiseSVN→ URL比較。在彈出的對話方塊中,將特別顯示將與你本地版本做比較的版本的URL地址。

你還可以使用版本庫瀏覽器,選擇兩個目錄樹比較,也許是兩個標記,或者是分支/標記和最新版本。郵件選單允許你使用比較版本來比較它們。閱讀第 5.9.2 節 “比較資料夾”以便獲得更多資訊。

與歷史版本的比較差異

如果你想檢視某一特定版本與本地拷貝之間的差異,使用顯示日誌對話方塊,選擇要比較的版本,然後選擇在右鍵選單中選與本地拷貝比較差異

兩個歷史版本的比較

如果你要檢視任意已提交的兩個歷史版本之間的差異,在版本日誌對話方塊中選擇你要比較的兩個版本(一般使用 Ctrl-更改),然後在右鍵選單中選比較版本差異

如果你在資料夾的版本日誌中這樣做,就會出現一個比較版本對話方塊,顯示此資料夾的檔案修改列表。閱讀第 5.9.2 節 “比較資料夾”以便獲得更多資訊。

提交所有修改

如果你要在一個視窗中檢視某一版本的所有更改,你可以使用統一顯示所有比較 (GNU 片段整理)。它將顯示所有修改中的部分內容。它很難顯示一個全面清晰的比較,但是會將所有更改都集中顯示出來。在版本日誌對話方塊中選擇某一版本,然後在右鍵選單中選擇統一顯示所有比較。

檔案差異

如果你要檢視兩個不同檔案之間的差異,你可以直接在資源管理器中選擇這兩個檔案(一般使用 Ctrl-modifier),然後右鍵選單中選TortoiseSVN→ 比較差異。

WC檔案/資料夾與URL之間的比較差異

如果你要檢視你本地拷貝中的任一檔案與版本庫中任一檔案之間差異,

譴責資訊之間的比較差異

如果你要檢視的不僅是比較差異而且包括修改該版本的作者,版本號和日期,你可以在版本日誌對話方塊中綜合比較差異和譴責資訊。這裡有更多詳細介紹第 5.20.2 節 “追溯不同點”。

比較資料夾差異

TortoiseSVN 自帶的內建工具不支援檢視多級目錄之間的差異,但你可以使用支援該功能的外接工具來替代。在這裡 第 5.9.4 節 “其他的比較/合併工具”我們可以介紹一些我們使用過的工具。

6.提交程式碼時怎樣知道自己改了哪些檔案,別人改了哪些檔案

7. 如何知道某個檔案的某一行是誰在哪個版本修改的

8. 如何為一個SVN主工程建立分支或tag

建立分支使用步驟:

1、選擇你要產生分支的檔案,點選滑鼠右鍵,選擇[分支/標記...]

2、在[至URL(T)]輸入框中將檔案重新命名為你的分支檔名,輸入便於區分的日誌資訊,點選確認。

3、在SVN倉庫中會複製一個你所指定的檔案,檔名稱就是你所命名的,但是在你的本地目錄上看不到新建的分支檔名,要使你的檔案更新作用到你的分支上,你必須選擇檔案,點選滑鼠右鍵,選擇[切換...],選擇你重新命名的檔案,點選確定即可。這樣你的本地檔案就和分支檔案關聯上了,不要奇怪,這時本地目錄上看到的檔名仍然為舊的檔名。

經驗小結:

1、如果操作的檔案之前還未提交,而你又想把檔案提交到新的分支上,記得一定要選擇切換

2、SVN分支的管理實際上就是把不同的分支用不同的檔案儲存,因此你在取得新版本的時候會發現,不同分支的最新檔案也會被獲取下來。

建立tag操作,相當於把當前的程式碼版本複製一份到其他地方,然後以這個地方為出發點進行新的開發,與原來位置的版本互不干擾。

對於branches、tags、trunk這三個目錄,並不是subversion必需的,而是被總結的一種良好的團隊開發習慣,其使用方法為:

1、開發者提交所有的新特性到主幹。 每日的修改提交到/trunk:新特性,bug修正和其他。

2、這個主幹被拷貝到“釋出”分支。 當小組認為軟體已經做好釋出的準備(如,版本1.0)然後/trunk會被拷貝到/branches/1.0。

3、專案組繼續並行工作,一個小組開始對分支進行嚴酷的測試,同時另一個小組在/trunk繼續新的工作(如,準備2.0),如果一個bug在任何一個位置被發現,錯誤修正需要來回運送。然而這個過程有時候也會結束,例如分支已經為釋出前的最終測試“停滯”了。

4、分支已經作了標籤並且釋出,當測試結束,/branches/1.0作為引用快照已經拷貝到/tags/1.0.0,這個標籤被打包釋出給客戶。

5、分支多次維護。當繼續在/trunk上為版本2.0工作,bug修正繼續從/trunk運送到/branches/1.0,如果積累了足夠的bug修正,管理部門決定釋出1.0.1版本:拷貝/branches/1.0到/tags/1.0.1,標籤被打包釋出。

一般建立最初的repository時,就建好這三個目錄,把所有程式碼放入/trunk中,如:要將project1目錄下的程式碼匯入repository,project1的結構就是:project1/branches,project1/tags,project1/trunk,project1/trunk/food.c,project1/trunk/egg.pc……,然後將project1目錄匯入repository,建立最初的資料庫。然後export回project1,作為本地工作目錄。