第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的操作,增删改查代碼。其中的.svn千萬不要删,若删除則變成一個普通檔案夾。
四、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項目:
- 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下解決思路:
- 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
建立裡程碑,版本号 操作步驟:
- 在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、遇到 沖突,搞明白沖突的原因,千萬不要随意丢棄别人的代碼