svn(subversion)代碼版本管理在linux下的一些常見使用命令

以下的操作都是默認你的服務器安裝有svn的大前提下進行的。
一、創建版本庫
我的版本庫存放路徑爲: /var/svn ; 下面我們來創建一個名爲 svntet 的版本庫   svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
註釋: svnadmin create svntet  就是svn的創建版本庫命令;執行之後我們會發現 /var/svn 下會出現 svntet 的文件夾

二、修改新建的版本庫的配置文件
進入 /var/svn/svntet  ;我們會發現有3個配置文件
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin

我們先修改下 passwd ,添加 svntet 版本庫的用戶名和密碼
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
修改 authz ,添加  svntet 版本庫的用戶的權限
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
註釋:現在給 svntet 版本庫的用戶名爲admin的用戶添加他對該版本的讀寫權限

修改 svnserve.conf 
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin

三、導入代碼文件到 svntet 版本庫
我的代碼文件存放在 /var/www/html/qinkaizhu/svntest ; 
svn代碼版本庫的路徑 /var/svn/svntet (也就是剛剛我們創建的版本庫的位置);
執行導入命令: svn import /var/www/html/qinkaizhu/svntest file:///var/svn/svntet -m "i"
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
 
四、從版本庫導出代碼
導出代碼到當前目錄下; 執行導出命令: svn checkout svn://192.168.1.5/svntet 
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
這時候,已經從 svntet 版本庫取了最新版本的代碼
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
 
五、從工作的代碼拷貝提交到版本庫
如何我們沒有修改如何代碼,那麼提交是沒有意義的。下面我們先來修改下1.php;
cd svntet 
vim 1.php
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin     svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin

保存修改後,在 svntet 目錄下執行提交命令:svn commit -m  "cxcxcxc"
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
註釋:-m “msg”  其中msg:爲本次提交版本的一些描述(例如修改了什麼之類的)

六、從版本庫更新工作的代碼拷貝
假如有n個人在進行同一項工作,大家都是公用同一版本庫,那麼可能你現在的版本庫就不是最新的了。所以,我們需要從版本庫裏更新下工作的代碼拷貝。
執行代碼:
cd svntet 
svn update
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
 
七、在工作的代碼拷貝新建文件或者文件夾,然後提交到版本庫
1、先新建 3.php  4.php 
2、執行加入版本控制命令:svn add 3.php 4.php

小插曲 【start】
在這裏注意了,經常我們在開發的時候,可能會加人很多的新文件,難道我們要一個一個地加嗎?當然,你也可以實現的。。但是,如果我們加的文件特別多,而且目錄結構也特別複雜。怎麼辦?
svn status — 打印工作拷貝文件和目錄的狀態。
我們可以藉助svn status 或者 svn st快速找到新添加並沒有納入版本控制的文件。
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
 第一列代表狀態改變的文件的狀態:
'?'   項目不在版本控制之下;
'M'  項目已經修改了;
'!'    項目已經丟失;
'~'   項目作爲一種對象(文件、目錄或鏈接)納入版本控制,但是已經被另一種對象替代。
更多的狀態信息,可以在這裏看見:傳送門
我們利用grep篩選出不在版本控制之下的文件或者文件夾
svn st | grep ?
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
svn st | grep ? | awk '{print $2}'
我們可以利用awk逐一獲取到他們的信息,現在我們就只需要他們的路徑就好了,然後有svn將他們加入版本控制
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
前面是和大家一起慢慢來,順便回顧下shell的一些命令使用。
其實就工作備份的最外層執行下面的代碼就可以將沒有加入版本控制的文件或者文件名加入版本控制
svn status | grep ? | awk '{print $2}' | xargs svn add
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
然後,下次執行提交的時候,就會將新加文件提交加入到版本庫了。。。
小插曲 【end】

3、再執行提交到版本庫的命令:svn commit -m "addnewfile"
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
註釋:執行加入版本控制命令:svn add 3.php 4.php 後,版本庫的並沒有更新版本。直到下一次執行 commit 纔會提交更新

 八、刪除工作拷貝和版本庫的文件
情況一:先在工作的拷貝刪除,在下次執行commit命令時候,自動從版本庫裏刪除
1、先執行刪除命令:svn del 1.php 2.php
2、再執行提交命令:svn commit -m "delfile"
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin
 
情況二:直接從版本庫裏刪除,然後在工作拷貝下更新(update)
執行刪除命令:svn del -m "del 4.php" file:///var/svn/svntet/4.php
svn(subversion)代碼版本管理在linux下的一些常見使用命令 - kaizhu_QIN - kaizhu_Qin

以上是我經常用到的一下svn在linux的命令操作。大家在操作的時候應該注意命令操作時候所在的當前目錄。
例如 svn update ;svn commite,不然會導致一些錯誤。

在工作拷貝中在每個目錄下都會存在.svn文件;在項目完成要上線的時候,我們怎麼樣快速都將所有的.svn文件都刪除呢。。我們可以寫個shell腳本來進行刪除。
find -type d -name ".svn" | xargs rm -rf

其他常用的命令:
更新到某個版本 
svn update -r m path 
例如: 
svn update如果後面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。 
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200) 
svn update test.php(更新,於版本庫同步。如果在提交的時候提示過期的話,是因爲衝突,需要先update,修改文件,然後清除svn resolved,最後再提交commit) 
簡寫:svn up 

加鎖/解鎖 
svn lock -m “LockMessage“ [--force] PATH 
例如:svn lock -m “lock test file“ test.php 
svn unlock PATH 

查看日誌 
svn log path 
例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化 

比較差異 
svn diff path(將修改的文件與基礎版本比較) 
例如:svn diff test.php 
svn diff -r m:n path(對版本m和版本n比較差異) 
例如:svn diff -r 200:201 test.php 
簡寫:svn di 

將兩個版本之間的差異合併到當前文件 
svn merge -r m:n path 
例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合併到當前文件,但是一般都會產生衝突,需要處理一下) 

版本庫下的文件和目錄列表 
svn list path 
顯示path目錄下的所有屬於版本庫的文件和目錄 
簡寫:svn ls 

創建納入版本控制下的新目錄 
svn mkdir: 創建納入版本控制下的新目錄。 
用法: 
1、mkdir PATH… 
2、mkdir URL… 
創建版本控制的目錄。 
1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,並且加入新增 
調度,以待下一次的提交。 
2、每個以URL指定的目錄,都會透過立即提交於倉庫中創建。 
在這兩個情況下,所有的中間目錄都必須事先存在。 

利用鉤子文件觸發一些命令:
例如,我們有3個工作副本。我們想實現這樣的功能:兩個開發者,單獨有自己的工作副本和測試環境。第3個工作副本是用來觀察某開發者提交後是否和另外的開發者修改的代碼有衝突。簡單點說就是,無論那個工作副本一提交,就是自動更新我指定的工作副本。
將hooks下的post-commit.tmpl複製一份爲post-commit。在post-commit的下面加入下面的代碼,具體情況,要視自己的機子的配置而變。這裏是舉例說明而已。
export LANG=en_US.UTF-8
SVN=/usr/bin/svn
WEB=/var/www/html/test
$SVN up $WEB --username admin --password admin --no-auth-cache
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章