天天看點

SVN版本工具_Git版本工具

                                           第1部分  版本管理工具介紹——SVN 篇

一、版本控制簡介:

1.什麼是版本控制?

軟體開發過程中各種程式代碼、配置檔案及說明文檔等檔案變更的管理。

最主要的功能:

追蹤檔案的變更。

讓版本庫中任意檔案恢複到任意版本。

可檢視代碼在什麼時間被什麼人修改過。

版本控制包括:檢入檢出控制、分支和合并、曆史記錄。

2.為什麼要用版本控制工具

版本控制工具的作用:幫助我們記錄和跟蹤項目中各檔案内容的修改變化。

版本控制工具的分為3類:

1)、直接通路式版本控制系統

2)、集中式版本控制工具,比如CVS、SVN

3)、分布式版本控制工具,比如git

集中式版本控制工具和分布式版本控制工具的差別在于:開發人員之間互相同步修改内容的方式不同。

二:各種版本比較

CVS(使用量較少,從RCS發展而來)、SVN、GIT

并發修改:全部支援

并發送出:CVS每個檔案均出現一個版本号。支援:SVN和GIT

曆史軌迹:SVN和GIT支援更名,即使改名也可以定位到對應版本,CVS不支援

分布式:GIT支援(不需要專門伺服器),SVN和CVS不支援(需要專門的伺服器)

三、SVN 伺服器端的安裝和配置    Windows的SVN教程

用戶端下載下傳位址:TortoiseSVN:http://tortoisesvn.net/downloads.html

服務端下載下傳地:VisualSVN:http://www.visualsvn.com/server/download

服務端和用戶端配置圖

SVN版本工具_Git版本工具
SVN版本工具_Git版本工具
SVN版本工具_Git版本工具
SVN版本工具_Git版本工具

用戶端配置:

選擇安裝目錄

SVN版本工具_Git版本工具

倉庫位置及磁盤路徑(倉庫下載下傳後所放的位置)。

SVN版本工具_Git版本工具
SVN版本工具_Git版本工具

該檔案用于跟服務端倉庫聯系的檔案夾,可以進行svn的操作,增删改查代碼。其中的.svn千萬不要删,若删除則變成一個普通檔案夾。

SVN版本工具_Git版本工具

四、SVN的基本操作

1、基本操作

1).在有.svn的檔案夾中建立一個Test.java檔案,右鍵,commit進行送出。可以直接在檔案夾中删除檔案,然後svn—commi,選中删除。。

2).修改檔案但未送出時,用戶端和服務端的檔案内容不同,需commit進行送出。

2、SVN常見問題

1).TortoiseSVN—Settings—Saved Data—clear all 清除權限。

2).及時更新代碼,送出時加上文字說明。

3).TortoiseSVN—Show log 檢視檔案曆史記錄。

4).若想恢複到某次修改,右擊該記錄—Revert to this revision 恢複到該版本—Revert,。

5).誤操作,删除某檔案。在.svn檔案的檔案夾右擊滑鼠,選擇Show log,下載下傳對應檔案。

6).若A和B使用者在操作同一檔案時,A提前送出,B再送出會出現送出失敗問題。此時需要更新最新版本檔案(SVN的自動合并)。若A和B改的是同一行代碼,則會沖突無法自動合并。

7).a.A和B檔案若沖突地方較多,且雙方均有可用代碼。b.若代碼被修改但未發現

解決方法:

a.先将自己修改的内容備份,再把最新版本更新下來,使用TortoiseSVN—Diff進行比較,并協商。

b.Showlog,逐個版本進行尋找,找到修改的作者,進行協商。

                                      第2部分  SVN從入門到放棄  Linux的SVN教程

安裝指令:  subversion包含服務端和用戶端

Ubuntu: apt-get install subversion

CentOS: yum install subversion

其餘linux版本,不保證代碼全部可執行

服務端和用戶端指令

服務端:

svnserver:控制svn系統服務的啟動

svnadmin:版本庫的建立/導出/導入/删除等

svnlook:檢視版本庫的資訊等

用戶端:

svn:版本庫的檢出/更新/送出/重定向等

建立版本庫: svnadmin create/path/repos  

如:mkdir svnroot;svnadmin create/svnroot/test 或者cd svnroot svnadmin create test2

svnadmin create --fs-type fsfs/dbd test:資料儲存類型

删除版本庫:rm -rvf/path/repos  rm -rvf/svnroot/test1

版本庫配置: 配置檔案位于:/path/repos/conf/

authz:配置使用者組以及使用者組權限

passwd:配置使用者名和密碼

svnserve.conf:配置預設權限、權限配置檔案及密碼配置檔案

版本庫的通路:

運作svn:svnserve -d -r /svnroot/test/

通路svn服務

1)在桌面建立檔案夾svntest

檢出版本庫

2)cd svntest— svn checkout/co svn://ip位址(域名) --username test --password xxx    也可以co svn://ip位址(域名) 輸入使用者名和密碼

https://tortoisesvn.net/  自行下載下傳用戶端軟體

桌面滑鼠右擊有checkout檢出

svn自啟動:

vim /etc/rc.local

svnserve -d -r /svnroot/test/     在exit0前加操作指令

SVN常見術語及檔案狀态

術語:版本庫、檢出、工作副本、更新、送出、删除、修改

檔案狀态:無版本控制、增加、修改、正常、沖突、删除、鎖定

checkout和export的差別與使用

checkout:檢出,檢出的工作副本目錄中含.svn檔案夾,在版本控制下

export:導出,導出的項目檔案中沒有.svn檔案夾,無版本控制

如:

svn checkout -r 版本号

svn export -r 版本号

常見SVN用戶端指令:

svn add: 添加到版本控制

svn add 檔案名

svn add 目錄名 增加目錄及目錄下檔案

svn add 目錄名 --non-recursive 隻增加目錄

svn add *   加載所有檔案和目錄    svn add * --force 強制執行增加

svn commit/ci:送出修改到伺服器

svn commit -m "文字說明" 檔案名

svn commit -m "文字說明" * 送出所有改動

svn update/up:更新工作副本

svn update/up 更新到最新版本

svn update/up -r 版本号 檔案名 檢視曆史版本

svn delete/del:從版本庫中删除檔案或目錄

svn delete/del/remove/rm 檔案名 -m "文字說明"(可省略)

svn diff 檔案名: 比較版本差異

svn mkdir 檔案名:建立目錄并增加到版本控制

svn cat 檔案名:不檢出工作副本,直接檢視檔案

工作副本還原revert

svn revert 檔案名

svn revert *

svn revert --recursive * 遞歸恢複(包括子檔案夾檔案)

沖突

什麼是沖突

常出現于工作副本長時間未更新

修改内容與需更新内容在同一處

發生樹沖突的都不是二進制文本檔案

如何避免沖突

如何解決沖突

發生沖突時,先推遲處理;

當處理沖突後,需要 svn resolved 指令,告訴服務端沖突已解決。

檢視沖突檔案時:

此時我們隻需要在一排<<<<<<<<<<  

    ........    

                一排==========       之間尋找就可以了

    ........

    >>>>>>>>>>

           小于号(<)到等号(=)之間的内容是自己的;

             等号(=)到大于号(>)之間的内容是對方的。

如果一時還無法決定,我們可以輸入p進行推遲送出; 如果已經決定了,那麼就可以輸入e來編輯這個檔案。

鎖定lock與解鎖unlock

svn lock 鎖定檔案,防止其他人對檔案進行送出

svn unlock 解鎖檔案

svn list :列出目前目錄先所有檔案

svn status:列出工作副本中檔案(夾)的狀态

svn log:檢視送出日志(來自svn cide -m參數)

svn info:工作副本及檔案(夾)的詳細資訊

多版本庫的解決方案:

TCP/IP協定端口号範圍:0-65535号

0-1023号為公認端口

1024-49151号為注冊端口

49152-65535号為私有端口,使用者可随意配置設定

解決方法:

監聽端口:svnserve -d -r /path --listen-port 端口号

killall svnserve 停止所有服務

1).手動指定不同的版本号

2).将版本庫放入同一目錄下,使多個版本庫用同一個端口号 svnserve -d -r /svnroot/

檢出工作副本:svn co svn://ip位址/test

總結:多個端口号可以建立在任意位置,但端口号容易混淆;使用同一個端口号必須建立在同一目錄下,無需配置設定端口号。

svn copy

工作副本到工作副本的複制:svn copy/cp 檔案名 目标檔案名

指定檔案版本:svn copy/cp -r 版本号 檔案名 目标檔案名

多個檔案複制:隻能複制到處目前位置以外的位置

svn cp 檔案名1 檔案名2 ... path

本地工作副本到線上副本的複制(不能跨庫):svn cp 檔案名 svn://ip/path/目标檔案名 -m "說明"

線上到本地工作副本複制(可以跨庫):svn cp svn://ip/path/檔案名 目标檔案名

主幹版本和分支版本

建立分支版本

将目前版本庫cp到主幹版本:svn cp svn://ip/test/ svn://ip/test/trunk -m ""

建立分支版本:svn cp svn://ip/test/trunk svn://ip/test/branch -m ""

在工作中,當版本庫建立好後,建立trunk和branch和備份版本

HOOKS鈎子應用:

什麼是鈎子:當執行某些特定操作時觸發執行預定設定好的任務

進入版本庫的hooks目錄中,會看到以.teml結尾的檔案,去掉.teml結尾,該檔案則會執行。

例如:cp -a post-commit.tmpl post-commit

賦予可執行檔案:chmod +x post-commit

版本庫的精簡和丢棄:

killall svnserve—svnadmin dump /svnroot/imooc(版本庫檔案系統的路徑)/ -r 6:16 > -/tt.repo  丢棄版本6之前版本

建立新的版本庫newtest—将版本庫資料加載進來 svnadmin loa /svnroot/newtest/ < ~/tt.repo

将test版本庫中的配置檔案複制到新的版本庫中:

cp -av /svnroot/test/conf/* /svnroot/newtest/conf/

删除舊版本庫:rm -rvf /svnroot/test

運作版本庫:svnserve -d -r /svnroot/

版本庫的遷移與重定向

遷移:

方法1:從舊的版本庫備份資料,然後建立一個新的版本庫,把備份的資料加載到新的版本庫中

方法2:整個版本庫壓縮成一個壓縮包,再移動到新的伺服器上解壓後再運作

1).停止svn的服務

2).把/svnroot/repo壓縮車repo.zip

3).複制repo.zip到新伺服器并解壓

4).在新伺服器上運作repo版本

重定向:當版本庫遷移之後,它的UIL就會失效。那麼我們就要把服務端的UIL重新定義到新的UIL上。

示範:

1).停止svn服務

2).遷移版本庫,并運作

3).svn switch/sw --relocate svn://ip/原url svn://ip/新url

4).執行svn update

常見坑與總結

1-忘記配置svnserve.conf

2-運作版本庫的路徑問題  運作或檢出必須有一個

3-svnadmin dump(>)/load(<)  管道符号

至此,SVN常用操作教程完成。

關于GIT教程,等有空閑時會及時補上。

                                    第3部分  版本管理工具介紹——GIT 篇

GIT介紹

版本控制工具發展曆程:

    1:cvs    1985,集中式, 始祖  (網絡環境)

    2:svn    2000,集中式 , 集大成者 (網絡環境)

    3:git     2005,分布式,geek主流 (無網環境)

    4:GitHub    2008,托管網站,geek社群 (程式猿托管網絡)

集中式:伺服器       分布式:效率高

GIT下載下傳和安裝:

GitHub官網-->Find out more-->https://desktop.github.com/-->下載下傳Git(Hub)-->預設安裝。

Linux安裝GIT:

 軟體包管理器安裝:yum install git

    yes表示同意安裝

    git --help ,git幫助文檔

GitHub注冊:

https://github.com/pricing

注冊github賬号: 通過github用戶端進入github官網 進行注冊,郵箱驗證。

svn版本需要聯網操作!而git不用聯網就能進行操作。

建立一個Git項目:

  1. New repository。 2、建立項目的頁面中:項目名稱repository name(不可用中文),描述Description(可用中文),他人是否可見(public/private),是否加載一個README(勾選了那麼我們建立的項目寫的一些注解,可以在GitHub上邊首頁看到注解)。

将項目克隆到本地

1:mkdir test 先建立檔案

2:cd test

3 : git clone URL (在GitHub中複制項目的連結)

4:ls 檢視

Linux環境下第一次送出項目:

vi 檔案名 新增一個檔案

git status 檢視工作區的狀态

git add 檔案名 建立跟蹤

git commit 送出變更

git push 推送到GitHub上。

填寫賬号和密碼,完成推送。

Windows下檢出項目和送出項目:

github首頁,點選clone to desktop->open in desktop

本地git用戶端編輯,同步Sync 右擊、忽略所有bak檔案。

代碼沖突:

同一時間,同一塊代碼,不止一個人修改,産生了代碼沖突。

Linux下解決思路:

  1. A先送出檔案F,正常送出,無沖突問題.

2. B送出檔案F時,報沖突.

3. B需要執行: git pull 操作,會自動将伺服器端有沖突的最新檔案,合并到本地

4. 進行修改,修改後重新送出。

git pull  把github上的代碼拉到本地

git diff 比較兩個沖突檔案的不同

Windows下解決思路:

送出産生沖突提示,點選OK,會自動合并沖突内容,編輯修改,再點選Sync。

版本回到過去:

git log //檢視git 送出日志,擷取之前送出ID

git reset --hard commitID  

回到未來:

git reflog   //檢視回到過去之前的版本号

git reset --hard commitID 

建立裡程碑,版本号 操作步驟:

  1. 在github網站上.進入項目首頁.

2. 橫欄按鈕(commits, branches, release等),找到release按鈕.

3. 找到按鈕:draft a new release,點選進入下一頁面.

4. 填入版本号,以及說明資訊.

分支開發與分支合并

建立分支,修改内容,送出,釋出

合并分支到master

切換到master,進入新分支

将新分支拖拽到master 左側,merge

另一種分支方式,更适合開源軟體

修改送出釋出新分支

右鍵點選項目名稱,view in github,

點選按鈕merge push request,commit

經驗共享:

1、多用用戶端和工具,少用指令行,除非是在Linux伺服器上直接開發。——學習工具是為了提升我們的工作效率,不是為了研究工具本身

2、每次送出前,diff自己的代碼,以免送出錯誤的代碼

3、下班回家前,整理好自己的工作區

4、并行的項目,使用分支開發

5、遇到 沖突,搞明白沖突的原因,千萬不要随意丢棄别人的代碼