Windows下SVN使用手冊簡明介紹
本節(jié)向大家講解一下Windows下SVN使用手冊,在這列和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
五、客戶端使用
通常使用TortoiseSVN客戶端,它是作為一個(gè)系統(tǒng)插件存在的。
導(dǎo)入版本庫:在本地創(chuàng)建欲導(dǎo)入的目錄,使用右鍵checkout菜單項(xiàng),在URLofrepository中輸入如“svn://127.0.0.1/vwas“,確定之后輸入用戶名和密碼即可完成導(dǎo)入。
其它操作請查TortoiseSVN使用手冊。命令行列舉版本庫:svnlistsvn://127.0.0.1/vwas
六、SVN命令行
SVN使用手冊中SVN命令行問題。創(chuàng)建新的版本庫
svnadmincreate/path/to/repository
svnadmin是有用的subversion系統(tǒng)管理命令,使用svnadminhelp查看在線幫助信息。
添加新的項(xiàng)目(importnewproject)
svnimportprojectfile:///repository_name/project-m"Comment"
svnimportprojecthttp://yourhost/svn_dir/repository_name/project-m"Comment"
檢出(checkout)項(xiàng)目
svncheckoutfile:///repository_name/project/trunkproject
svncheckouthttp://yourhost/svn_dir/repository_name/project/trunkproject
列出倉庫中的項(xiàng)目(list)
svnlist--verbosefile:///repository_name/project
svnlist--verbosehttp://host/svn_dir/repository_name/project
狀態(tài)查詢(status)
svnstatus
給出新文件,已經(jīng)改變的文件和被刪除的文件列表;
添加文件或目錄(add)
svnadd
刪除文件或目錄(delete)
svndelete
svndeletehttp://yourhost/svn_dir/repository/project_dir
提交(commit)
svncommithttp://yourhost/svn_dir/repository/project_dir
更新(update)
svnupdate
更新倉庫中的文件到本地。
標(biāo)簽和特殊版本項(xiàng)目
使用copy命令
svncopyhttp://yourhost/repos/project/trunkhttp://yourhost/repos/project/tags/1.0.0
用于創(chuàng)建某個(gè)特定版本的快照(snapshot);
svnlisthttp://yourhost/repos/project/tags/1.0.0
七、版本庫備份(SVN使用手冊介紹這里引用了rocksun的《談?wù)凷ubversion的備份》)
1.完全備份
最常見和簡單的備份就是直接使用拷貝命令,將版本庫目錄拷貝到備份目錄上就可以了。但是,這樣不是很安全的方式。因?yàn)槿绻诳截悤r(shí)版本庫發(fā)生變化,將會造成備份的結(jié)果不夠準(zhǔn)確,失去備份的作用。為此Subversion提供了“svnadminhotcopy”命令,可以防止這種問題。
如果要把vwas備份到d:svnrootbak目錄下,只需要運(yùn)行:
svnadminhotcopyd:svnrootvwasd:svnrootbakvwas
但是我們作為配置管理員,必須想辦法優(yōu)化這個(gè)過程,如果我們這個(gè)目錄下有許多版本庫,需要為每個(gè)版本庫寫這樣一條語句備份。為此我寫了下面的腳本,實(shí)現(xiàn)備份一個(gè)目錄下的所有版本庫。我們在D:SVNROOT下創(chuàng)建了兩個(gè)文件,***個(gè)是simpleBackup.bat:
echooff
remSubversion的安裝目錄
setSVN_HOME="D:Subversion"
rem所有版本庫的父目錄
setSVN_ROOT=D:svnroot
rem備份的目錄
setBACKUP_SVN_ROOT=D:svnrootbak
@echo正在備份版本庫%1......
@%SVN_HOME%binsvnadminhotcopy%SVN_ROOT%%1%BACKUP_DIRECTORY%%2
@echo版本庫%1成功備份到了%2!
這個(gè)文件僅僅是對“svnadminhotcopy”的包裝,第二個(gè)是backup.bat:
echooff
remSubversion的安裝目錄
setSVN_HOME="D:Subversion"
rem所有版本庫的父目錄
setSVN_ROOT=D:svnroot
rem備份的目錄
setBACKUP_SVN_ROOT=D:svnrootbak
setBACKUP_DIRECTORY=%BACKUP_SVN_ROOT%%date:~0,10%
ifexist%BACKUP_DIRECTORY%gotocheckBack
echo建立備份目錄%BACKUP_DIRECTORY%>>%SVN_ROOT%backup.log
mkdir%BACKUP_DIRECTORY%
rem驗(yàn)證目錄是否為版本庫,如果是則取出名稱備份
for/r%SVN_ROOT%%%Iin(.)do@ifexist"%%Iconfsvnserve.conf"%SVN_ROOT%simpleBackup.bat"%%~fI"%%~nI
gotoend
:checkBack
echo備份目錄%BACKUP_DIRECTORY%已經(jīng)存在,請清空。
gotoend
:end
在使用的時(shí)候,只需要修改backup.bat開頭的三個(gè)路徑,將兩個(gè)腳本拷貝到“SVN_ROOT”下就可以了。根據(jù)以上的配置,你只需要運(yùn)行backup.bat,就可以把“SVN_ROOT”下的版本庫都備份到“BACKUP_SVN_ROOT”里,并且存放在備份所在日的目錄里,例如“D:svnrootbak2006-10-22”。雖然這部分工作很簡單,可是必須有人定時(shí)地去執(zhí)行這個(gè)操作(例如每周一凌晨)。為了避免發(fā)生遺忘的情況,我們可以將這個(gè)操作加入到系統(tǒng)的at任務(wù)當(dāng)中去。例如還是上面的環(huán)境,為了安裝at任務(wù),我們運(yùn)行:
at1:00/every:MD:svnrootbackup.bat
這樣在每周一凌晨1:00都會執(zhí)行這個(gè)備份過程。當(dāng)然備份在本機(jī)也是不安全的,你也許需要上傳到別的機(jī)器,這個(gè)就要靠你自己去實(shí)現(xiàn)了。#p#
2.增量備份
SVN使用手冊介紹一下增量備份。盡管完全備份非常簡單,但也是有代價(jià)的。當(dāng)版本庫非常巨大時(shí),經(jīng)常進(jìn)行完全備份是不現(xiàn)實(shí),也是不必要的。但是一旦版本庫在備份之間發(fā)生問題,該怎么辦呢?這里我們就用到了增量備份。增量備份通常要與完全備份結(jié)合使用,就像Oracle數(shù)據(jù)庫的歸檔日志,記錄著每次Subversion提交的變化,然后在需要恢復(fù)時(shí)能夠回到***的可用狀態(tài)。在我們這個(gè)例子中我們使用的是svnadmindump命令進(jìn)行增量的備份。使用方法是:svnadmindumpproject1--revision15--incremental>dumpfile2
上面的命令實(shí)現(xiàn)了對修訂版本15進(jìn)行增量的備份,其中的輸出文件dumpfile2只保存了修訂版本15更改的內(nèi)容。
為了記錄每次提交的結(jié)果,我們需要使用一項(xiàng)Subversion的特性——鉤子(hook)。
hooks目錄里存放的就是鉤子腳本。我們在此處只使用post-commit鉤子,這個(gè)鉤子會在每次提交之后執(zhí)行。為了實(shí)現(xiàn)我們的備份功能,我們在hooks下建立一個(gè)文件post-commit.bat,內(nèi)容如下:
echooff
setSVN_HOME="C:ProgramFilesSubversion"
setSVN_ROOT=D:svnroot
setUNIX_SVN_ROOT=D:/svnroot
setDELTA_BACKUP_SVN_ROOT=D:svnrootbakdelta
setLOG_FILE=%1backup.log
echobackuprevision%2>>%LOG_FILE%
for/r%SVN_ROOT%%%Iin(.)doifD:/svnroot/%%~nI==%1%SVN_ROOT%%%~nIhooksdeltaBackup.bat%%~nI%2(這里沒有看懂,請高手指點(diǎn)?)
gotoend
:end
通過這個(gè)腳本,可以實(shí)現(xiàn)D:svnroot下的版本庫提交時(shí)自動增量備份到D:svnrootbakdelta(確定這個(gè)目錄存在),其中使用的deltaBackup.bat其實(shí)可以放在任何地方,只是對腳本的svnadmindump的包裝,內(nèi)容如下:
@echo正在備份版本庫%2......
%SVN_HOME%binsvnadmindump%SVN_ROOT%%1--incremental--revision%2>>%DELTA_BACKUP_SVN_ROOT%%1.dump
@echo版本庫%2成功備份到了%1!
以上兩個(gè)腳本可以直接拷貝到project2的hooks目錄下,不需要修改就可以實(shí)現(xiàn)project2的自動備份。
以上的操作已經(jīng)OK了,現(xiàn)在需要做的是將完全備份和增量備份結(jié)合起來,也就是在完全備份后清理增量備份的結(jié)果,使之只保存完全備份后的結(jié)果。
當(dāng)果真出現(xiàn)版本庫的故障,就要求我們實(shí)現(xiàn)版本庫的恢復(fù)操作了。這時(shí)要使用svnadminload命令,同時(shí)也需要上次的完全備份。例如要把上次完全備份backuprepo,和之后的增量備份dumpfile:
svnadminloadbackuprepo<dumpfile
***的結(jié)果可以下載svnroot.rar,將之解壓縮到d:下,然后修改幾個(gè)bat文件的SVN_HOME就可以使用了。
3.版本庫同步
SVN使用手冊中版本庫同步問題。Subversion1.4增加了同步機(jī)制,可以實(shí)現(xiàn)一個(gè)版本庫同另一個(gè)版本庫的同步(但好像只是單向的),我們可以用來實(shí)現(xiàn)版本庫的備份或鏡像。
3.1對目標(biāo)庫初始化
svnsyncinitsvn://localhost/project2svn://localhost/project1
其中project2是目標(biāo)的版本庫,而project1是源版本庫。其中的目標(biāo)版本庫必須為空,而且必須允許修訂版本屬性的修改,也就是在目標(biāo)的版本庫的hooks目錄里添加一個(gè)文件pre-revprop-change.bat,內(nèi)容為空即可。
3.2同步project2到project1
svnsyncsyncsvn://localhost/project2
這時(shí)候你update一下你的project2的一個(gè)工作拷貝,就會發(fā)現(xiàn)有了project1的所有內(nèi)容。如果project1又有提交,這時(shí)候project2的版本庫無法看到***的變化,還需要再運(yùn)行一遍sync操作,這樣才能將***的變化同步。需要注意的是,目標(biāo)版本庫只能做成只讀的,如果目標(biāo)版本庫發(fā)生了變更,則無法繼續(xù)同步了。
3.3同步歷史屬性的修改
因?yàn)橥讲粫聦v史屬性的修改,所以svnsync還有子命令copy-revprops,可以同步某個(gè)版本的屬性。
3.4鉤子自動同步
希望在每次提交時(shí)同步,則需要在源版本庫增加post-commit腳本,內(nèi)容如下:
echooff
setSVN_HOME="D:Subversion"
%SVN_HOME%binsvnsyncsync--non-interactivesvn://localhost/project2
把以上內(nèi)容存放為post-commit.bat,然后放到版本庫project1下的hooks目錄下,這樣project1每次提交,都會引起project2的同步。本節(jié)介紹SVN使用手冊完畢,請關(guān)注本節(jié)其他相關(guān)報(bào)道。
【編輯推薦】