TotoiseSVN的上手教程

本文轉自:http://www.cnblogs.com/xilentz/archive/2010/05/06/1728945.html

TotoiseSVN的基本使用方法:
一、簽入源代碼到SVN服務器
假如我們使用Visual Studio在文件夾StartKit中創建了一個項目,我們要把這個項目的源代碼簽入到SVN Server上的代碼庫中里,首先右鍵點擊StartKit文件夾,這時候的右鍵菜單如下圖所示:
這里寫圖片描述
點擊Import,彈出下面的窗體,其中http://zt.net.henu.edu.cn 是服務器名,svn是代碼倉庫的根目錄,StartKit是我們在上個教程中添加的一個代碼庫:

說明:左下角的CheckBox,在第一次簽入源代碼時沒有用,但是,在以后你提交代碼的時候是非常有用的。
這里寫圖片描述
點擊OK按鈕,會彈出下面的窗體,要求輸入憑據:
這里寫圖片描述
在上面的窗體中輸入用戶名和密碼,點擊OK按鈕:
這里寫圖片描述
如上圖所示,好了,源代碼已經成功簽入SVN服務器了。這時候團隊成員就可以遷出SVN服務器上的源代碼到自己的機器了。

二、簽出源代碼到本機

在本機創建文件夾StartKit,右鍵點擊Checkout,彈出如下圖的窗體:
這里寫圖片描述
在上圖中URL of Repository:下的文本框中輸入svn server中的代碼庫的地址,其他默認,點擊OK按鈕,就開始簽出源代碼了。

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

這時候也會彈出對話框,要求輸入用戶名和密碼,通過驗證后即可瀏覽代碼庫中的內容。

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

打開StartKit目錄,可以看到如下圖的文件夾結構:
這里寫圖片描述
一旦你對文件或文件夾做了任何修改,那么文件或文件夾的顯示圖片機會發生變化。下圖中我修改了其中的二個文件:
這里寫圖片描述
大家看一下不同狀態所對應的圖片:
這里寫圖片描述
我們已經知道怎么將源代碼簽入到SVN服務器,怎么從服務器簽出代碼到本機,也簡單了解了不同狀態所對應的圖案啦。

三、提交修改過的文件到SVN服務器

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

注意:提交源代碼到服務器時,一定確保本機的代碼是最新版本,否則可能提交失敗,或者造成版本沖突。

在Model文件夾上點擊右鍵或在Model文件下的空白處點擊右鍵,點擊SVN Commit…彈出下面的窗體:
這里寫圖片描述
點擊OK按鈕后,彈出如下圖的窗體:
這里寫圖片描述
四、添加新文件到SVN服務器

我們在Model文件下添加一個新的類文件UserInfo.cs,在Model文件下的空白處點擊右鍵,點擊SVN Commit…,和上面講的提交修改過的文件到SVN服務器一樣,就可以了。

另外也可以在文件UserInfo.cs上點擊右鍵,點擊TortoiseSVN=>>Add,彈出如下圖的窗體:
這里寫圖片描述
選中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目錄引用,這樣有什么好處,自己想一想吧!

TotoiseSVN客戶端的基本使用方法:

  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會搜索被點擊目錄以及該目錄下所有的文件,并將修改變動的文件羅列在列表中。

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

————-如遇到文件沖突(沖突:要提交的文件已被其他人改動并提交到版本庫中)要啟用解決沖突功能。

  1. 如何保持本地版本和服務器版本同步

使用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.提交代碼時怎樣知道自己改了哪些文件,別人改了哪些文件

  1. 如何知道某個文件的某一行是誰在哪個版本修改的

  2. 如何為一個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,作為本地工作目錄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456767.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ALV可輸入狀態下輸入金額字段變小數的問題

http://blog.163.com/mxb_sapyeah/blog/static/10335262520167109022155/ 小數位數兩位 當我在給ALV上給該字段輸入整數 ‘1234 ‘ 時,該數據居然會默認變成‘12.34’ 可以在這里解決這個問題。就是定義字段目錄的時候,對于金額字段指定參考數據類型就…

Downloader Middlewares反反爬蟲【學習筆記04】

反反爬蟲相關機制 Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may sometimes require special infrastructure. Please consi…

【轉載】Android 關于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容問題

轉自:【歐陽鵬】http://blog.csdn.net/ouyang_peng Android 設備的CPU類型(通常稱為”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 處理器。2011年15月以后的生產的大部分Android設備都使用它.arm64-v8a: 第8代、64位ARM處理器,很少設備,三星 G…

HDFS的簡介及基本操作(常用的命令參數介紹)

目錄前言:1、HDFS基本概念2、HDFS基本操作總結: 目錄 前言: 總算有空來接著寫大數據的學習筆記了,今天就把之前學過的HDFS的基礎知識詳細的介紹一下,如有哪點寫的不足希望大家多多指教。 1、HDFS基本概念 1.1、前…

Settings【學習筆記05】

Settings Scrapy設置(settings)提供了定制Scrapy組件的方法。可以控制包括核心(core),插件(extension),pipeline及spider組件。比如 設置Json Pipeliine、LOG_LEVEL等。 參考文檔:http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/setti…

java命令

javac.exe是編譯.java文件java.exe是執行編譯好的.class文件javadoc.exe是生成Java說明文檔jdb.exe是Java調試器javaprof.exe是剖析工具轉載于:https://www.cnblogs.com/Berryxiong/p/6143016.html

TensorFlow訓練單特征和多特征的線性回歸

線性回歸 線性回歸是很常見的一種回歸,線性回歸可以用來預測或者分類,主要解決線性問題。相關知識可看“相關閱讀”。 主要思想 在TensorFlow中進行線性回歸處理重點是將樣本和樣本特征矩陣化。 單特征線性回歸 單特征回歸模型為:ywxb 構建模…

大數據之HDFS應用開發(java API)

目錄1、搭建開發環境2、獲取api中的客戶端對象3、DistributedFileSystem實例對象所具備的方法4、HDFS客戶端操作數據代碼示例 目錄 1、搭建開發環境 window下開發的說明: A、在windows的某個目錄下解壓一個hadoop的安裝包 B、將安裝包下的lib和bin目錄用對應windows版本平…

shell腳本執行方式,更方便更快捷。

在進行linux測試時編寫腳本是必不可少的。最近經常使用Linux,感覺太頻繁地敲擊鍵盤有些累了,于是想到了Shell腳本。可以把太多的命令寫成一個腳本,這樣每次執行一遍 shell文件,就可以省去了敲擊鍵盤的時間。于是在網上搜了一些有…

行為科學統計第1章

行為科學統計 Statistics for the Behavioral Sciences 一周只學習一次不如每周學習比較多的幾次高效噢~[一開始,你并不知道這是一個會寫著畫風突變的讀書筆記?…] 第I部分 簡述與描述性統計 第1章 統計學入門 這本書我就是覺得這…

閉包---在函數內部再定義一個函數

什么是閉包 # 定義一個函數 def test(number):# 在函數內部再定義一個函數,并且這個函數用到了外邊函數的變量,那么將這個函數以及用到的一些變量稱之為閉包def test_in(number_in):print("in test_in 函數, number_in is %d" % number_in)re…

慕課網_《Java實現對稱加密》學習總結

時間:2017年4月11日星期二說明:本文部分內容均來自慕課網。慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:對稱加密算…

大數據之MapReduce詳解(MR的運行機制及配合WordCount實例來說明運行機制)

目錄前言:1、MapReduce原理2、mapreduce實踐(WordCount實例) 目錄 今天先總體說下MapReduce的相關知識,后續將會詳細說明對應的shuffle、mr與yarn的聯系、以及mr的join操作的等知識。以下內容全是個人學習后的見解,如…

生動形象的理解什么是裝飾器!

裝飾器 裝飾器是程序開發中經常會用到的一個功能,用好了裝飾器,開發效率如虎添翼,所以這也是Python面試中必問的問題,但對于好多初次接觸這個知識的人來講,這個功能有點繞,自學時直接繞過去了,…

PLSQL 申明和游標

--從鍵盤輸入一個數 accept b prompt 請輸入一個大于零的數字; declareanum number : &b; beginwhile anum>0loopdbms_output.put_line(anum);anum:anum-1;end loop; end;declarev_num number; begin -- 從stsu表中選出id最大的值,并根據該值打印次數select …

20155222 2016-2017-2 《Java程序設計》第8周學習總結

20155222 2016-2017-2 《Java程序設計》第8周學習總結 教材學習內容總結 Java NIO(New IO)是一個可以替代標準Java IO API的IO API(從Java 1.4開始),Java NIO提供了與標準IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和緩沖區&…

BAT經典面試題精簡版(基礎知識附答案)

文章目錄目錄J2SE基礎JVM操作系統TCP/IP數據結構與算法目錄 J2SE基礎 九種基本數據類型的大小,以及他們的封裝類。 原始類型封裝類 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble Switch能否用string做參數&…

使用2to3.py 轉換 python2.x 代碼 到python3

1.使用Windows 命令提示符(cmd)cd到2to3.py 腳本所在位置,如下圖: 找不到的2 to 3.py的去 pycharm中雙擊shift搜索一下 2.緊接著運行 2to3.py 腳本(可省略) 3.執行你想要轉換的文件 python 2to3.py -w H:…

iis6.0與asp.net的運行原理

這幾天上網翻閱了不少前輩們的關于iis和asp.net運行原理的博客,學的有點零零散散,花了好長時間做了一個小結(雖然文字不多,但也花了不少時間呢),鄙人不才,難免有理解不道的地方,還望…

元類--用不上的先了解

元類 1. 類也是對象 在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段。在Python中這一點仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object ObjectCreator() >>> print(my_ob…