文章目錄
- 1.1. 什麼是版本控制
- 1.2. 使用版本控制的好處
- 1.3. 常見的版本控制系統
- 3.1. Subversion安裝
- 3.2. 伺服器端
- 3.3. 用戶端
- 4.1. 檔案鎖
- 4.2. 版本庫建立策略
- 4.3. 使用標籤和分支
轉自 http://5iwww.blog.51cto.com/856039/278045
1、首先需要安裝SVN。Ubuntu下的SVN安裝十分簡單,sudo apt-get install subversion,然後根據提示一步一步,就完成了SVN的安裝;
sudo apt-get install subversion subversion-tools
上面的這種安裝方式,可能會對已安裝好的mysql產生影響,使mysql無法啟動。(出現pid錯誤)
下面這種方式安裝不會影響mysql。
===================================================================
=====================>源碼安裝svn
1>下載 subversion-1.6.3.tar.bz2 (:http://subversion.tigris.org/)(本地/home/chenyi/myTools/svn/subversion-1.6.3.tar.gz)
2>先解壓,解壓後
要裝一個支援checkout 從 http://這樣地址的擷取的功能。
cd subversion-1.6.3
(wget http://www.webdav.org/neon/neon-0.25.5.tar.gz去下載[下載以後放在目前的目錄],或者把已有的/home/chenyi/myTools/svn/neon-0.25.5.tar.gz 放入 subversion-1.6.3目錄 )
tar xzf neon-0.25.5.tar.gz
mv neon-0.25.5 neon
./configure --prefix=/usr/local/stow/subversion && make &&
make install
=====================>錯誤解決
[ 在configure的時候可能會出錯:configure: error: Subversion requires SQLite ]
可以http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz 可以下載到最新的Sqlite (本地/home/chenyi/myTools/svn/sqlite-amalgamation-3.6.13.tar.gz)
=>tar zxvf sqlite-amalgamation-3.6.13.tar.gz
=>cd subversion-1.6.3
=>mkdir sqlite-amalgamation (在解壓後的subversion目錄下建立一目錄)
=>cp ../sqlite-3.6.13/sqlite3.c
sqlite-amalgamation
=> 再執行subversion 的 configure和make,make install
=====================================================================
2、檢出檔案(checkout)。
使用命令:svn co http://{svn repository url} /destination
如:svn co http://svn.shiwan.com/svn/shiwan/branches/program/
然後系統會用當前的使用者名稱登入,提示輸入密碼,如果第一次密碼輸入錯誤,會提示你輸入使用者名稱;
輸入正確後,就可以檢出檔案了。
3、提交檔案(commit)。
進入需要更新的目錄,輸入命令:
svn commit -m path-to-commit,其中path-to-commit可以為空白,成功後會提示更新後的版本號碼。
4、更新檔案(update)。
svn update,在要更新的目錄運行這個命令就可以了。
5、查看日誌(log)。
svn log path
SVN用戶端簡明使用教程
0、查看協助
命令: svn help
1、同步(checkout)伺服器資料到本地
命令: 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是我當前登入系統的帳號
Authentication realm: <https://svn.test.cn:443> book Subversion Repository
Username: jack
Password for 'jack': <password>
...
2、提交(commit)本地文檔到伺服器
命令: svn commit -m "" [directory|file]
svn ci -m "" [directory|file]
例:把 /usr/local/svn/book/network/tcpip.txt 提交到伺服器,前提是伺服器上已經有此檔案。
# cd /usr/local/svn/book/network/
# svn commit -m "" # -m是記錄的log資訊,可以為空白
一般情況下,只要在需要更新的資料檔案所在的目錄執行 svn ci -m "" 即可。
3、更新(update)伺服器資料到本地
命令: svn update [directory|file]
svn up [directory|file]
例:把 https://svn.test.cn/book/network/ 目錄中的內容更新到本地
# 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)本機資料到伺服器
命令: svn add <directory|file>
SVN簡明課程1. 版本控制介紹1.1. 什麼是版本控制版本控制系統用於儲存編寫開發應用程式時的文檔的各個修訂版(revision)。版本控制也稱作Revision Control System(RCS)。名詞解釋:
- 修訂版(revision):可以認為是某個檔案在其生命週期內各個儲存的快照,每個快照和一個時間區間對應。
- 版本庫(Repository):存放修訂版的資料庫
- 本地工作拷貝(Local working copy):修訂版在本地的副本
- 版本的檢入(Check in):本機複本提交到伺服器的版本庫
- 檢出(Check out):從伺服器的版本庫中取出修訂版成為本機複本
- 版本號碼的來源:有兩種策略,基於檔案的計數和基於倉庫的計數,subversion使用後者
- 標籤(Tags):為版本加一個名字,便於檢出
- 分支(Branches):修訂版打分支,以後可以平行修改,互不干擾
- 合并(Merging):將分支的修訂版合并為一個新的修訂版
- 鎖(Locking):為修訂版枷鎖
- 衝突(Conflict):並發版本控制時防止修訂版混亂的錯誤機制
1.2. 使用版本控制的好處對團隊和個人都有好處:
- 為團隊提供了所有項目文檔的回退按鈕;
- 支援多個開發人員在可控的方式下為相同的代碼工作;
- 版本控制系統儲存了文檔在過去的各個改動,便於尋找是誰,在何時,因為什麼修改了文檔;
- 支援在文檔的主線上同時有多個版本;
- 支援查詢在某個時點上項目各個文檔的狀態,可用於研究生產效率等,也可用於對以前的軟體發行版的再發行。
1.3. 常見的版本控制系統
- VSS:Visual Source Save,微軟公司的版本控制器軟體,http://msdn2.microsoft.com/zh-cn/vstudio/aa718670.aspx
- CVS:Concurrent Versions System,開源免費,http://www.nongnu.org/cvs/
- Subversion,開源免費,http://subversion.tigris.org/
- ClearCase,IBM公司,http://www-306.ibm.com/software/awdtools/clearcase/
2. Subversion介紹Subversion是新一代的版本控制工具,正逐步替代CVS。資源:
- 官方網址:http://subversion.tigris.org/
- subversion中文站:http://www.subversion.org.cn/
- 中文手冊:http://www.subversion.org.cn/svnbook/
- subversion與cvs的對比:http://www.uml.org.cn/pzgl/200705251.asp
3. Subversion基本使用3.1. Subversion安裝Subversion是典型的C/S模式應用程式。Windows環境下的安裝包:http://subversion.tigris.org/files/documents/15/41687/svn-1.4.6-setup.exe安裝過程很簡單,圖形介面,預設選擇即可。輸入svn命令查看安裝是否成功:
svn --version
svn命令是subversion程式的用戶端svnserver命令可以啟動svn伺服器,用於搭建簡易的svn伺服器環境見:http://www.easymorse.com/bbs/viewthread.php?tid=95&extra=page%3D13.2. 伺服器端以下是搭建簡易的伺服器端環境的做法,正式一般配合apache通過http訪問。3.2.1. 建立版本庫建立伺服器端版本庫,相當於DBMS建立資料庫樣本。命令列:
svnadmin create file_path/repo_name
3.2.2. 啟動伺服器
svnserve.exe -d -r file_path
訪問該版本庫的url:svn//localhost/repo_name3.3. 用戶端3.3.1. 初始匯入(import)通過命令列匯入:
svn import -m "init import" http://10.0.0.6/svn/teaching/
該命令可將當前路徑下檔案匯入到版本庫中。3.3.2. 檢出(checkout)通過命令列檢入:
svn co http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1
或者:
svn checkout http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1
或者:通過第三方圖形工具的檢出,比如tortoiseSVN(http://tortoisesvn.tigris.org/)將svn伺服器的最新修訂版下載到本地成為本地工作拷貝。3.3.3. 保持更新(update)命令列:
svn update
或者
svn up
或者通過tortoiseSVN或者通過eclipse外掛程式,subclipse(http://subclipse.tigris.org/),線上安裝:http://subclipse.tigris.org/update_1.2.x/用svn伺服器的最新修訂版更新本地工作拷貝。多人合作時:
- 更新要經常頻繁的做,盡量讓問題及早暴露,便於處理。
- 提交代碼前要更新,否則容易產生版本衝突。
3.3.4. 添加(add)命令列:
svn add file_path
或者通過tortoiseSVN,eclipse外掛程式。告知svn伺服器,添加目錄和/或檔案到伺服器上,這個操作類似SQL的insert,但是並沒有真的操作,直到commit。3.3.5. 提交改動相當於通用概念:檢入(checkin)。命令列:
svn commit
或者:
svn ci
或者通過tortoiseSVN,eclipse外掛程式。提交本地工作拷貝的所有改動,而且是原子性的。要求:一般要註明修改的原因
svn ci -m "修改bug #224"
要求:提交之前要做更新
svn up svn ci -m "修改bug #224"
3.3.6. 還原改動對應提交(commit),要有類似復原(rollback)的操作。
svn revert
或者通過tortoiseSVN,eclipse外掛程式。這個操作對開發人員十分有用,在改動被人很多代碼後可以“一鍵恢複”。3.3.7. “還原”已提交的改動revert只適合未提交的情況。如果已經提交,發現問題,要回退到之前的修訂版。首先需要:
svn up
讓本地工作拷貝更新到最新狀態。然後:
svn log your_file_path
查看檔案日誌,這時候提交時填寫的說明資訊就派上用場了。查看兩個修訂版之間的不同:
svn diff -r 舊修訂版序號:新修訂版序號 your_file_path
或者通過tortoiseSVN,eclipse外掛程式。決定用哪箇舊的修訂版號後,用舊的修訂版號檔案覆蓋新的修訂版號檔案。
svn merge -r 新修訂版序號:舊修訂版序號 your_file_path
還需要:
svn commit -m "恢複到某修訂版(某修訂版作廢)"
或者通過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,是很重要的工具,版本分支和標籤等概念都通過它實現。svn的copy,是廉價的拷貝。3.3.9. 重新命名目錄/檔案命令列:
svn move file_name new_file_name
或者:
svn mv file_name new_file_name
3.3.10. 處理合并衝突svn預設不對檔案加鎖。如果不同人編輯了同一個檔案的不同部分,提交時會自動合并。如果不同人編輯了同一個檔案的同一部分,後提交者會報告合并衝突。解決方案(人工仲裁):
- 放棄改動;
- 堅持你的改動,找到.mine的檔案名稱,恢複為原檔案名稱,然後執行:
svn resolved file_name
3.3.11. 刪除檔案將本地工作拷貝刪除。命令列:
svn delete file_path
或者:
svn del file_path
4. Subversion進階內容4.1. 檔案鎖一般用於二進位內容,因為無法合并。如果某個檔案加鎖,其他使用者的本地工作拷貝(更新後)將是唯讀。當該使用者提交後,其他使用者的本地工作拷貝(更新後)才可以寫操作。其他使用者可以“撬鎖”,然後進行寫操作。進階配置可以配置“撬鎖”許可權,使不是什麼人都可以“撬鎖”。4.2. 版本庫建立策略單一的版本庫儲存一個項目。單一的版本庫儲存多重專案。多個版本庫。4.3. 使用標籤和分支在svn中標籤和分支都源於copy命令。3個約定俗成的目錄:
- trunk:主幹
- branches:分支
- tags:標籤
發布分支:
svn cp -m "建立用於實現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