各種版本控制工具的使用

一、SVN、TortoiseSVN、Subclipse介紹

團隊開發技術:
(1)單元測試;
(2)版本控制;
(3)項目自動化;

SCM:軟件配置管理,包括SVN;
SVN是CVS的接班人,是版本控制系統;
版本控制簡單地說就是要讓團隊的人能夠快速的統一代碼,加強溝通;
SVN由客戶端和服務器組成,服務器是項目倉庫,即存儲項目的地方;客戶端則是本地拷貝,即由SVN管理,可以提交到項目倉庫和從項目倉庫中獲得項目的地方;
svn宗旨:萬物皆目錄;
TortoiseSVN是SVN的客戶端,因爲如果是傳統的Subversion客戶端,需要通過命令行完成任務,而TortoiseSVN是通過GUI的方式完成的;
Subclipse是Eclipse中的一個插件,簡單的說也是一個SVN客戶端,只是爲了方便Eclipse開發,因此可以在Eclipse中進行提交、導入;
下載地址:
SVN:https://sourceforge.net/projects/win32svn/files/1.6.17/svn-win32-1.6.17.zip/download
TortoiseSVN:https://downloads.sourceforge.net/project/tortoisesvn/1.7.6/Application/TortoiseSVN-1.7.6.22632-win32-svn-1.7.4.msi?r=&ts=1331344321&use_mirror=cdnetworks-kr-2
Subclipse在線安裝地址:http://subclipse.tigris.org/update_1.6.x

注意:配置SVN時需要配置環境變量;
(1)path=C:/subversion/bin; 
(2)SVN_EDITOR=notepad; 設置默認的編輯器
<img src="http://hi.csdn.net/attachment/201203/10/0_1331343490p1ff.gif" alt="" />

二、SVN命令介紹

檢測版本:svn --version 和  svnadmin --version

創建項目倉庫:svnadmin create D:\svn-repos

導入tmpdir目錄下的文件到sesame/trunk中,即是添加而不是修改:
D:\svnworkspace\tmpdir>svn import -m "import Sesame project" .  file:///d:/svn-repos/sesame/trunk

-m表示可以提供一些註釋;.表示把當前目錄下的文件導入;

注:只有在import時需要項目倉庫的URL,在diff、commit都不需要URL;

在svnworkspace下checkout指定最新的項目,並命名爲sesame:D:\svnworkspace>svn co file:///d:/svn-repos/sesame/trunk sesame

checkout指定版本(此處爲第一版本)的項目:svn checkout -r 1 svn://xiazdong-PC/sesame/trunk test3

查看文件狀態:svn status Day.txt

查看項目倉庫是否有更新:svn status --show-updates
注:
(1)M:本地被修改,但是沒有提交;
(2)C(Conflict):更新時有衝突存在;
(3)G(Gather):本地版本和項目倉庫版本合併到一起;
(4)U(Update):本地版本被成功更新;
(5)A(Add):工作拷貝中添加新文件;
(6)D(Delete):文件在項目倉庫中被刪除,所以工作拷貝中此文件也被刪除;

查看本地拷貝的文件改動(如果項目倉庫有改動,檢查不出):svn diff Day.txt

查看項目倉庫和本地工作拷貝的區別:svn diff -rHEAD Number.txt

查看兩版本之間的差別:svn diff -r2:4 Number.txt

查看最近的改動:svn diff -r PREV:BASE Number.txt

更新本地拷貝:svn update

更新指定目錄或文件:svn update Number.txt dir1/ dir2/

注:當發生衝突時,會出現提示修改;
選擇: (p) 推遲,(df) 顯示全部差異,(e) 編輯,
       (mc) 我的版本, (tc) 他人的版本,
       (s) 顯示全部選項: 

提交改動:D:\svnworkspace\sesame>svn commit -m "註釋"
但是注意:commit只會提交改動,如果在本地拷貝中創建一個文件,則需要在此之前 svn add 文件
如果提交時衝突沒解決,則提交失敗;

獲得某個文件的日誌:D:\svnworkspace\sesame>svn log Day.txt

獲得某個文件的詳細日誌:D:\svnworkspace\sesame>svn log --verbose Day.txt

獲得兩版本之間的日誌:svn log -r 2:4 Day.txt

分頁顯示日誌:svn log | more

注:svn log不一定是最新的日誌,因爲可能工作拷貝的版本和項目倉庫的版本不一致,svn log只能顯示工作拷貝版本的日誌

注:*表示有更新;

獲得sesame工作拷貝信息:svn info sesame
拷貝文件:svn copy Number.txt copy.txt
注:拷貝後只是在本地完成,需要提交更新項目倉庫;

重命名文件:svn move copy.txt copy.py

重命名目錄:svn move dir1 dir2

直接在項目倉庫中重命名目錄:D:\svnworkspace\test3>svn move -m "rename" svn://xiazdong-pc/sesame/trunk/Number.txt svn://xiazdong-pc/sesame/trunk/dest.txt

顯示文件的每行的最新版本及誰更改的:svn blame Number.txt

還原文件:svn merge -r 7:6 Number.txt

 

聯網訪問的三種方法:

(1)svnserve
(2)ssh
(3)apache

對於某個特定的項目倉庫啓動svnserve:start svnserve --daemon --root D:\svn-repos 

通過svnserve簽出文件:svn co svn://xiazdong-PC/sesame/trunk vizier

默認svnserve管理的項目倉庫是隻讀的,即只能簽出,不能提交;在/conf/svnserve.conf中添加:
anon-access=read  //匿名用戶只讀
auth-access=write //授權用戶可寫
passowrd=passwd //在passwd文件內配置
在passwd文件中配置:xiazdong=12345表示用戶名是xiazdong,密碼是12345

注意:在svnserve.conf和passwd兩個文件配置時必須頂格,否則無效;


屬性:文件的元數據;

爲Number.txt設置checked-by屬性爲xiazdong:svn propset checked-by "xiazdong" Number.txt

編輯Number.txt中的checked-by屬性(需要配置SVN_EDITOR設置默認編輯器):svn propedit checked-by Number.txt

列出Number.txt的所有屬性:svn proplist Number.txt


獲得某個屬性:svn propget checked-by Number.txt


常用屬性:
(1)svn:ignore:忽略某些文件; *.java表示忽略java文件
(2)svn:eol-style:設置換行符,一般爲 native,表示隨着操作系統而變化;
(3)svn:mime-type:設置文件的mime類型;
(4)svn:needs-lock:設置文件加鎖

一般我們可以在文件中配置autoprops,自動設置;
1.尋找config文件:
(1)echo %APPDATA%
(2)\subversion\config
2.設置enable-auto-props = true
3.找到[auto-props],並設置自動屬性
文件加鎖
 
嚴格加鎖:只允許一個人改動一個文件;
樂觀加鎖:比如有A、B兩人同時checkout了一個文件File.java,並且同時對他們修改了,A先提交,當B想提交時,必須先svn update,把自己的目錄變成最新的以後才能夠提交,更新時會出現兩種情況:
(1)如果A和B改動的不是同一行,那麼會正常合併;
(2)如果A和B改動的是同一行,則會在源代碼中標記出衝突:
而Subversion默認是採用樂觀加鎖;

對於文本文件,可以通過合併的方式解決衝突,但是對於二進制文件,則需要文件加鎖解決;

爲文件開啓文件加鎖:爲某個文件添加svn:needs-lock屬性,並且commit到文件倉庫;

文件加鎖:svn lock Day.txt -m "lock"

強制解鎖(雖然別人有鎖,但是另一個人可以強制解開鎖,但沒有獲得鎖):svn unlock --force svn://xiazdong-pc/sesame/trunk/Day.txt

強制加鎖(不管有沒有人有鎖,都搶過來):svn lock --force Day.txt

轉向其他目錄:svn switch svn://xiazdong-pc/sesame/branches/b1

衝突:
<<<<<<< .mine
原本代碼
=======
項目倉庫代碼
>>>>>>> .r4

分支和標籤:簡單地來說就是某個工作拷貝的複製;
在分支上開發:
(1)在項目倉庫中創建branches目錄; svn mkdir svn://xiazdong-pc/sesame/branches
(2)在項目倉庫中將主幹複製到b1目錄中; svn copy svn://xiazdong-pc/sesame/trunk svn://xiazdong-pc/sesame/branches/b1
(3)通過b1目錄checkout一份工作拷貝;   svn co svn://xiazdong-pc/sesame/branches/b1 b1
(4)提交;

三、TortoiseSVN使用介紹

如果知道SVN中的術語,其實此工具非常易於入門和使用;

1.checkout
<img src="http://hi.csdn.net/attachment/201203/10/0_1331345279z9aF.gif" alt="" />
 
2.衝突問題

<img src="http://hi.csdn.net/attachment/201203/10/0_1331345802fV6x.gif" alt="" />

<img src="http://hi.csdn.net/attachment/201203/10/0_1331346033GC30.gif" alt="" />
<img src="http://hi.csdn.net/attachment/201203/10/0_13313458145Nbs.gif" alt="" />
<img src="http://hi.csdn.net/attachment/201203/10/0_1331345896scbq.gif" alt="" />
四、Subclipse使用介紹

1.checkout

<img src="http://hi.csdn.net/attachment/201203/10/0_1331345896scbq.gif" alt="" />
<img src="http://hi.csdn.net/attachment/201203/10/0_1331346414vxUS.gif" alt="" />
<img src="http://hi.csdn.net/attachment/201203/10/0_1331346418iqsO.gif" alt="" />
<pre name="code" class="cpp">2.commit等



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章