svn log path
SVN客戶端簡明使用教程
0、查看幫助
命令: svn help
1、同步(checkout)服務(wù)器數(shù)據(jù)到本地
命令: svn checkout <url> [directory]
svn co <url> [directory]
例:把 http://svn.shiwan.com/svn/shiwan/branches/program/ 目錄同步到本地的 /usr/local/svn/book/network 目錄
# cd /usr/local/svn/book
# svn checkout http://svn.shiwan.com/svn/shiwan/branches/program/
...
(R)eject, accept (t)emporarily or accept (p)ermanently? t
...
Password for 'wandering': <回車> # wandering是我當(dāng)前登錄系統(tǒng)的賬號
Authentication realm: <https://svn.test.cn:443> book Subversion Repository
Username: jack
Password for 'jack': <password>
...
2、提交(commit)本地文檔到服務(wù)器
命令: svn commit -m "" [directory|file]
svn ci -m "" [directory|file]
例:把 /usr/local/svn/book/network/tcpip.txt 提交到服務(wù)器,前提是服務(wù)器上已經(jīng)有此文件。
# cd /usr/local/svn/book/network/
# svn commit -m "" # -m是記錄的log信息,可以為空
一般情況下,只要在需要更新的數(shù)據(jù)文件所在的目錄執(zhí)行 svn ci -m "" 即可。
3、更新(update)服務(wù)器數(shù)據(jù)到本地
命令: svn update [directory|file]
svn up [directory|file]
例:把 https://svn.test.cn/book/network/ 目錄中的內(nèi)容更新到本地
# cd /usr/local/svn/book/network
# cd update
4、查看日志
命令: svn log [directory|file]
例:查看 /usr/local/svn/book/network 目錄的修改日志
方法一:
# cd /usr/local/svn/book/network
# svn log
方法二:
# svn log /usr/local/svn/book/network
5、增加(add)本地數(shù)據(jù)到服務(wù)器
命令: svn add <directory|file>
SVN簡明課程
1. 版本控制介紹
1.1. 什么是版本控制
版本控制系統(tǒng)用于保存編寫開發(fā)應(yīng)用程序時的文檔的各個修訂版(revision)。
版本控制也稱作Revision Control System(RCS)。
名詞解釋:
- 修訂版(revision):可以認為是某個文件在其生命周期內(nèi)各個保存的快照,每個快照和一個時間區(qū)間對應(yīng)。
- 版本庫(Repository):存放修訂版的數(shù)據(jù)庫
- 本地工作拷貝(Local working copy):修訂版在本地的副本
- 版本的檢入(Check in):本地副本提交到服務(wù)器的版本庫
- 檢出(Check out):從服務(wù)器的版本庫中取出修訂版成為本地副本
- 版本號的來源:有兩種策略,基于文件的計數(shù)和基于倉庫的計數(shù),subversion使用后者
- 標簽(Tags):為版本加一個名字,便于檢出
- 分支(Branches):修訂版打分支,以后可以平行修改,互不干擾
- 合并(Merging):將分支的修訂版合并為一個新的修訂版
- 鎖(Locking):為修訂版枷鎖
- 沖突(Conflict):并發(fā)版本控制時防止修訂版混亂的錯誤機制
1.2. 使用版本控制的好處
對團隊和個人都有好處:
- 為團隊提供了所有項目文檔的回退按鈕;
- 支持多個開發(fā)人員在可控的方式下為相同的代碼工作;
- 版本控制系統(tǒng)保存了文檔在過去的各個改動,便于查找是誰,在何時,因為什么修改了文檔;
- 支持在文檔的主線上同時有多個版本;
- 支持查詢在某個時點上項目各個文檔的狀態(tài),可用于研究生產(chǎn)效率等,也可用于對以前的軟件發(fā)行版的再發(fā)行。
1.3. 常見的版本控制系統(tǒng)
2. Subversion介紹
Subversion是新一代的版本控制工具,正逐步替代CVS。
資源:
3. Subversion基本使用
3.1. Subversion安裝
Subversion是典型的C/S模式應(yīng)用程序。
安裝過程很簡單,圖形界面,默認選擇即可。
輸入svn命令查看安裝是否成功:
svn --version
svn命令是subversion程序的客戶端
svnserver命令可以啟動svn服務(wù)器,用于搭建簡易的svn服務(wù)器環(huán)境
3.2. 服務(wù)器端
以下是搭建簡易的服務(wù)器端環(huán)境的做法,正式一般配合apache通過http訪問。
3.2.1. 創(chuàng)建版本庫
創(chuàng)建服務(wù)器端版本庫,相當(dāng)于DBMS創(chuàng)建數(shù)據(jù)庫示例。
命令行:
svnadmin create file_path/repo_name
3.2.2. 啟動服務(wù)器
svnserve.exe -d -r file_path
訪問該版本庫的url:svn//localhost/repo_name
3.3. 客戶端
3.3.1. 初始導(dǎo)入(import)
通過命令行導(dǎo)入:
svn import -m "init import" http://10.0.0.6/svn/teaching/
該命令可將當(dāng)前路徑下文件導(dǎo)入到版本庫中。
3.3.2. 檢出(checkout)
通過命令行檢入:
svn co http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1
或者:
svn checkout http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1
將svn服務(wù)器的最新修訂版下載到本地成為本地工作拷貝。
3.3.3. 保持更新(update)
命令行:
svn update
或者
svn up
或者通過tortoiseSVN
用svn服務(wù)器的最新修訂版更新本地工作拷貝。
多人合作時:
- 更新要經(jīng)常頻繁的做,盡量讓問題及早暴露,便于處理。
- 提交代碼前要更新,否則容易產(chǎn)生版本沖突。
3.3.4. 添加(add)
命令行:
svn add file_path
或者通過tortoiseSVN,eclipse插件。
告知svn服務(wù)器,添加目錄和/或文件到服務(wù)器上,這個操作類似SQL的insert,但是并沒有真的操作,直到commit。
3.3.5. 提交改動
相當(dāng)于通用概念:檢入(checkin)。
命令行:
svn commit
或者:
svn ci
或者通過tortoiseSVN,eclipse插件。
提交本地工作拷貝的所有改動,而且是原子性的。
要求:一般要注明修改的原因
svn ci -m "修改bug #224"
要求:提交之前要做更新
svn up svn ci -m "修改bug #224"
3.3.6. 還原改動
對應(yīng)提交(commit),要有類似回滾(rollback)的操作。
svn revert
或者通過tortoiseSVN,eclipse插件。
這個操作對開發(fā)人員十分有用,在改動被人很多代碼后可以“一鍵恢復(fù)”。
3.3.7. “還原”已提交的改動
revert只適合未提交的情況。
如果已經(jīng)提交,發(fā)現(xiàn)問題,要回退到之前的修訂版。
首先需要:
svn up
讓本地工作拷貝更新到最新狀態(tài)。
然后:
svn log your_file_path
查看文件日志,這時候提交時填寫的說明信息就派上用場了。
查看兩個修訂版之間的不同:
svn diff -r 舊修訂版序號:新修訂版序號 your_file_path
或者通過tortoiseSVN,eclipse插件。
決定用哪個舊的修訂版號后,用舊的修訂版號文件覆蓋新的修訂版號文件。
svn merge -r 新修訂版序號:舊修訂版序號 your_file_path
還需要:
svn commit -m "恢復(fù)到某修訂版(某修訂版作廢)"
或者通過tortoiseSVN,eclipse插件。
這個還原是所謂的,不是用舊的版本號替代,而是將舊文件覆蓋新文件。
3.3.8. 拷貝文件和目錄
命令行:
svn copy path/file_name newpath/new_file_name svn commit -m "xxxx"
或者:
svn cp path/file_name newpath/new_file_name svn commit -m "xxxx"
或者:利用windows的資源管理器/unix的cp命令
或者通過tortoiseSVN,eclipse插件。
svn的copy,是很重要的工具,版本分支和標簽等概念都通過它實現(xiàn)。
svn的copy,是廉價的拷貝。
3.3.9. 重命名目錄/文件
命令行:
svn move file_name new_file_name
或者:
svn mv file_name new_file_name
3.3.10. 處理合并沖突
svn默認不對文件加鎖。
如果不同人編輯了同一個文件的不同部分,提交時會自動合并。
如果不同人編輯了同一個文件的同一部分,后提交者會報告合并沖突。
解決方法(人工仲裁):
- 放棄改動;
- 堅持你的改動,找到.mine的文件名,恢復(fù)為原文件名,然后執(zhí)行:
svn resolved file_name
3.3.11. 刪除文件
將本地工作拷貝刪除。
命令行:
svn delete file_path
或者:
svn del file_path
4. Subversion高級內(nèi)容
4.1. 文件鎖
一般用于二進制內(nèi)容,因為無法合并。
如果某個文件加鎖,其他用戶的本地工作拷貝(更新后)將是只讀的。
當(dāng)該用戶提交后,其他用戶的本地工作拷貝(更新后)才可以寫操作。
其他用戶可以“撬鎖”,然后進行寫操作。
高級配置可以配置“撬鎖”權(quán)限,使不是什么人都可以“撬鎖”。
4.2. 版本庫創(chuàng)建策略
單一的版本庫保存一個項目。
單一的版本庫保存多個項目。
多個版本庫。
4.3. 使用標簽和分支
在svn中標簽和分支都源于copy命令。
3個約定俗成的目錄:
- trunk:主干
- branches:分支
- tags:標簽
發(fā)布分支:
svn cp -m "創(chuàng)建用于實現(xiàn)radio標簽的分支" https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1 https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2
切換分支:
svn switch https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2
合并分支需要兩個步驟:
合并操作
svn merge -r 33:HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2
或者:
svn merge https://easymorse-simpletag.googlecode.com/svn/trunk/simpletag@HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1@HEAD
提交。