pengpenglin
人,必須選擇一種生活方式并有勇氣堅(jiān)持下去
BlogJava
首頁(yè)
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
【版本控制之路】版本庫(kù)的備份
【1.業(yè)務(wù)需求】
作為開(kāi)發(fā)人員,最大的噩夢(mèng)莫過(guò)于自己辛辛苦苦開(kāi)發(fā)的程序由于各種原因而丟失了。所以定期備份資料乃是開(kāi)發(fā)人員的一大美德(我自己重要的資料備份了4份,分別放在不同的地方)。SVN作為代碼和文檔匯聚之地,定期備份的重要性更是不容置疑。
【2.基本思路】
通常我們備份的方式無(wú)非有:完全備份和增量備份兩種。完全備份適用于版本庫(kù)的大小比較小的情況,對(duì)于版本庫(kù)比較大或者已經(jīng)存在版本庫(kù)的情況下,則沒(méi)有必要也不可能使用完全備份了。這時(shí)增量備份就是一個(gè)很好的選擇。
除了完全備份和增量備份,我們還有另外一種方式:版本庫(kù)同步。這種方法可以在源版本庫(kù)和目標(biāo)版本庫(kù)之間做同步(通常是單向的)。一旦源版本庫(kù)發(fā)生了改變則可以馬上通知目標(biāo)版本庫(kù)做出相同的改變。
注意:版本庫(kù)的備份不能簡(jiǎn)單地使用copy-paste的方法來(lái)拷貝復(fù)雜版本庫(kù)的db目錄,否則有可能出現(xiàn)數(shù)據(jù)不完全的情況。
所以我們的備份策略是:
①首次備份采用完全備份,后續(xù)備份采用增量備份和版本庫(kù)同步
②完全備份在晚上定時(shí)進(jìn)行,增量備份和版本庫(kù)同步在用戶(hù)提交時(shí)進(jìn)行
注意:這個(gè)策略實(shí)際上是有較大問(wèn)題的(包括備份的方式,頻度,時(shí)間):通常完全備份會(huì)在每周,月進(jìn)行一次。而增量備份會(huì),版本庫(kù)同步會(huì)在每天晚上定時(shí)執(zhí)行,而不是在每次用戶(hù)提交后執(zhí)行,以縮短請(qǐng)求響應(yīng)。但這里因?yàn)楸局?jiǎn)單的原則,只是抽取了最簡(jiǎn)單的策略
【3.相關(guān)命令】
SVN用于備份的命令有以下三個(gè),分別對(duì)應(yīng)于完全備份,增量備份,版本庫(kù)同步。
①svnadmin hotcopy
②svnadmin dump [--incremental]
③svnsync init|sync
關(guān)于這三個(gè)命令的具體用法,請(qǐng)大家自行參考SVN的用戶(hù)手冊(cè)以獲得更多資訊。
【4.示例操作】
注:本示例代碼均為網(wǎng)上下載,非本人原創(chuàng)。
Example 1:完全備份
fullbackup.bat
@echo off
@echo 不同的系統(tǒng)平臺(tái)和時(shí)間格式設(shè)置會(huì)影響目錄的創(chuàng)建,請(qǐng)先用echo命令輸出日期格式并做相應(yīng)調(diào)整
rem
Subversion的安裝目錄
set
SVN_HOME
=
C:
\
Develop
\
Subversion
rem
所有版本庫(kù)的父目錄
set
SVN_ROOT
=
C:
\
Develop
\
svntest
\
testRepos
rem
備份的根目錄
set
BACKUP_SVN_ROOT
=
C:
\
Develop
\
svntest
\
svnbackup
\
full
rem
每次備份的子目錄
set
BACKUP_DIRECTORY
=
%BACKUP_SVN_ROOT%
\
%
date
:~
4
,
14
%
rem
如果備份的子目錄不存在則先創(chuàng)建
if
exist %BACKUP_DIRECTORY%
goto
checkBack
echo 建立備份目錄%BACKUP_DIRECTORY%
>>
%BACKUP_SVN_ROOT%
/
backup.log
mkdir %BACKUP_DIRECTORY%
rem
驗(yàn)證目錄是否為版本庫(kù),如果是則取出名稱(chēng)備份
for
/
r %SVN_ROOT% %%I in (.)
do
@
if
exist
"
%%I\conf\svnserve.conf
"
%SVN_ROOT%
\
dofullBackup.bat
"
%%~fI
"
%%~nI
goto
end
:checkBack
echo 備份目錄%BACKUP_DIRECTORY%已經(jīng)存在,請(qǐng)清空。
goto
end
:
end
dofullbackup.bat
@echo 正在備份版本庫(kù)%
1
@%SVN_HOME%
\
bin
\
svnadmin hotcopy
%
1
%BACKUP_DIRECTORY%
\
%
2
@echo 版本庫(kù)%1成功備份到了%
2
!
由于批處理文件中%date命令的輸出格式受平臺(tái)的控制(實(shí)際上是控制面板中的時(shí)區(qū)設(shè)置)影響,所以對(duì)于文件中使用到date函數(shù)的地方,讀者要特別注意。需要首先在DOS下確認(rèn)日期輸出格式,然后根據(jù)實(shí)際情況進(jìn)行截取。
將這兩個(gè)文件放在repository的同級(jí)目錄下,執(zhí)行之則可以。讀者可以自行修改上面的環(huán)境變量設(shè)置
Example 2:增量備份
post-commit.bat
echo off
set
SVN_HOME
=
C:
\
Develop
\
Subversion
set
SVN_ROOT
=
C:
\
Develop
\
svntest
\
testRepos
set
UNIX_SVN_ROOT
=
C:
/
Develop
/
svntest
/
testRepos
set
DELTA_BACKUP_SVN_ROOT
=
C:
\
Develop
\
svntest
\
svnbackup
\
delta
set
LOG_FILE
=
%DELTA_BACKUP_SVN_ROOT%
\
backup.log
@echo 不同的系統(tǒng)平臺(tái)和時(shí)間格式設(shè)置會(huì)影響目錄的創(chuàng)建,請(qǐng)先用echo命令輸出日期格式并做相應(yīng)調(diào)整
rem
版本庫(kù)增量導(dǎo)出
for
/
r %SVN_ROOT% %%I in (.)
do
if
%UNIX_SVN_ROOT%
/
%%~nI
==
%
1
echo 備份開(kāi)始 版本路徑:%SVN_ROOT%
\
%%~nI 版本號(hào):%
2
>>
%LOG_FILE% | %SVN_ROOT%
\
%%~nI
\
hooks
\
deltaBackup.bat %%~nI %
2
goto
end
:
end
這個(gè)批處理文件的重點(diǎn)在于%UNIX_SVN_ROOT%/%%~nI == %1這句話(huà)。它的作用是判斷當(dāng)前提交的目標(biāo)版本庫(kù)是不是和循環(huán)中的變量值相同,如果是那么認(rèn)為該修改是提交到這個(gè)版本庫(kù)的,就可以進(jìn)行增量備份了。我在運(yùn)行這個(gè)文件時(shí),一開(kāi)始老是失敗,后來(lái)發(fā)現(xiàn)原因居然是路徑的寫(xiě)法問(wèn)題。
請(qǐng)注意UNIX_SVN_ROOT這個(gè)變量的路徑值寫(xiě)法,如果你換成SVN_ROOT看看,肯定是不會(huì)成功的。因?yàn)槁窂降膶?xiě)法不同!
deltaBackup.bat
@echo 正在備份版本庫(kù)%
2
@%SVN_HOME%
\
bin
\
svnadmin dump %SVN_ROOT%
\
%
1
--
incremental
--
revision
%
2
>>
%DELTA_BACKUP_SVN_ROOT%
\
%
1
-
%
date
:~
4
,
14
%.dump
@echo 版本庫(kù)%2成功備份到了%
3
!
這個(gè)文件里面特別要注意的就是--incremental這個(gè)參數(shù),如果你不加上去的話(huà)以后再執(zhí)行l(wèi)oad就會(huì)提示版本庫(kù)已經(jīng)存在的錯(cuò)誤了!而--revision則用于指定備份的版本。
將以上兩個(gè)文件放置在repository的hooks目錄下即可。
Example 3:版本庫(kù)同步
首先創(chuàng)建一個(gè)版本庫(kù)用于同步(目標(biāo)版本庫(kù)),其次要在源版本庫(kù)和目標(biāo)版本庫(kù)之間建立聯(lián)系。這是通過(guò)svnsync init來(lái)達(dá)到的。
svnsync init 目標(biāo)庫(kù)URL 源庫(kù)URL
這個(gè)命令執(zhí)行過(guò)程中可能需要增加兩個(gè)參數(shù)--username和--password用于指明目標(biāo)版本庫(kù)的用戶(hù)名和密碼。
其次在目標(biāo)版本庫(kù)的hooks目錄下建立一個(gè)
空的文件
并命名為pre-revprop-change.bat。這一步很重要,否則會(huì)出現(xiàn)鑒權(quán)失敗的錯(cuò)誤。最后就是在源版本庫(kù)的hooks目錄下建立一個(gè)名為post-commit.bat的文件,如下所示:
echo off
rem
版本庫(kù)同步
%SVN_HOME%
\
bin
\
svnsync sync
--
non
-
interactive
svn:
//
localhost
/
newRepo_backup
但用戶(hù)在源版本庫(kù)執(zhí)行了相應(yīng)的修改動(dòng)作之后,你會(huì)發(fā)現(xiàn)目標(biāo)版本庫(kù)也出現(xiàn)了同樣的修改!
附件:
完整測(cè)試目錄及腳本文件
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2008-12-30 17:35
Paul Lin
閱讀(2486)
評(píng)論(5)
編輯
收藏
所屬分類(lèi):
項(xiàng)目管理
FeedBack:
#
re: 【版本控制之路】版本庫(kù)的備份
2008-12-30 19:04 |
激情
just test!!!
回復(fù)
更多評(píng)論
#
re: 【版本控制之路】版本庫(kù)的備份
2008-12-31 20:00 |
夢(mèng)想在這里起飛
寫(xiě)得不錯(cuò)啊,看看我這個(gè)
開(kāi)源的報(bào)表ireport項(xiàng)目web應(yīng)用
http://ireport.cubebi.com
回復(fù)
更多評(píng)論
#
re: 【版本控制之路】版本庫(kù)的備份[未登錄](méi)
2009-01-01 11:01 |
Paul Lin
@夢(mèng)想在這里起飛
支持國(guó)產(chǎn)軟件,很不錯(cuò)!
回復(fù)
更多評(píng)論
#
re: 【版本控制之路】版本庫(kù)的備份
2009-01-02 11:43 |
愛(ài)吃魚(yú)頭
svn很重要!備份很重要!向lz學(xué)習(xí)了!
回復(fù)
更多評(píng)論
#
re: 【版本控制之路】版本庫(kù)的備份
2010-03-30 11:01 |
醉月茶
很好,拜讀了~
回復(fù)
更多評(píng)論
新用戶(hù)注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶(hù)
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
【轉(zhuǎn)】有沒(méi)有可能進(jìn)行同級(jí)管理
敏捷文章三則
【原】敏捷開(kāi)發(fā)沉思(真實(shí)對(duì)話(huà))
【轉(zhuǎn)】新任項(xiàng)目經(jīng)理必須掌握的五項(xiàng)修煉
【轉(zhuǎn)】管理者的困境:放權(quán)或者崩潰
【轉(zhuǎn)】網(wǎng)絡(luò)閱讀,為什么人會(huì)浮躁?
【原】SVN In Action系列發(fā)布
【原】SVN In Action(23)
【原】SVN In Action(22)
【原】SVN In Action(21)
Copyright ©2025 Paul Lin Powered by:
博客園
模板提供:
滬江博客
<
2008年12月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(21)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類(lèi)
J2EE 框架(9)
J2EE基礎(chǔ)(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 開(kāi)發(fā)(13)
Oracle 管理(4)
Oracle 調(diào)優(yōu)
Oracle 錯(cuò)誤診斷
RoR(19)
UML(3)
Unix / Linux(13)
Web基礎(chǔ)(19)
其它技術(shù)(7)
感悟(3)
雜項(xiàng)(7)
架構(gòu)與性能(8)
模式與重構(gòu)(19)
灌水(8)
電影與音樂(lè)(16)
走過(guò)的路(1)
軟件過(guò)程與軟件方法(3)
陽(yáng)光戶(hù)外(2)
項(xiàng)目管理(36)
隨筆檔案
2012年2月 (3)
2011年11月 (4)
2011年10月 (1)
2011年9月 (2)
2011年8月 (2)
2011年7月 (5)
2011年6月 (3)
2011年5月 (1)
2011年4月 (1)
2011年3月 (3)
2011年1月 (1)
2010年12月 (1)
2010年11月 (5)
2010年10月 (3)
2010年9月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (4)
2010年4月 (9)
2010年3月 (19)
2010年2月 (8)
2010年1月 (3)
2009年12月 (34)
2009年11月 (1)
2009年10月 (2)
2009年7月 (4)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (1)
2009年2月 (5)
2009年1月 (5)
2008年12月 (13)
2008年11月 (4)
2008年10月 (1)
2008年9月 (6)
2008年8月 (5)
2008年7月 (3)
2008年6月 (31)
2008年5月 (10)
2008年4月 (9)
2008年3月 (7)
2008年2月 (4)
2008年1月 (19)
BlogJava熱點(diǎn)博客
BeanSoft
Jack.Wang
如坐春風(fēng)
詩(shī)特林
鄭暉
銀河使者
阿密果
隔葉黃鶯
好友博客
無(wú)羽蒼鷹
搜索
最新評(píng)論
1.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄](méi)
666666666666666666666這幾天正在做個(gè)類(lèi)似工程編碼出現(xiàn)錯(cuò)誤
--李
2.?re: 【Java基礎(chǔ)專(zhuān)題】IO與文件讀寫(xiě)---使用Apache commons IO簡(jiǎn)化文件讀寫(xiě)
不錯(cuò)
--阿斯蘭
3.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(03)----String的toCharArray()方法
多謝分享
--thx
4.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--karl
5.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄](méi)
謝謝,幫了我大忙!
--小龍
閱讀排行榜
1.?Oracle中如何插入特殊字符:& 和 ' (多種解決方案)(48445)
2.?getOutputStream() has already been called for this response的解決方法(43350)
3.?【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換(37031)
4.?360安全衛(wèi)士誤刪audiosrv.dll文件造成系統(tǒng)無(wú)聲的解決方案(21267)
5.?Java中讀取字節(jié)流并按指定編碼轉(zhuǎn)換成字符串的方法(17318)
評(píng)論排行榜
1.?360安全衛(wèi)士誤刪audiosrv.dll文件造成系統(tǒng)無(wú)聲的解決方案(33)
2.?【原】Oracle開(kāi)發(fā)專(zhuān)題之:時(shí)間運(yùn)算(11)
3.?【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換(11)
4.?getOutputStream() has already been called for this response的解決方法(10)
5.?【原】Oracle開(kāi)發(fā)專(zhuān)題之:分析函數(shù)(OVER)(8)
主站蜘蛛池模板:
一级做a爱过程免费视
|
亚洲精品无码AV中文字幕电影网站
|
国产无遮挡吃胸膜奶免费看
|
亚洲乱亚洲乱淫久久
|
日本高清免费中文在线看
|
在线jlzzjlzz免费播放
|
亚洲国产美女精品久久久久
|
在线人成免费视频69国产
|
亚洲人成电影网站国产精品
|
特级无码毛片免费视频尤物
|
中文字幕精品亚洲无线码二区
|
最近中文字幕国语免费完整
|
亚洲一区精品无码
|
AAAAA级少妇高潮大片免费看
|
亚洲AⅤ无码一区二区三区在线
|
日日摸日日碰夜夜爽亚洲
|
精品少妇人妻AV免费久久洗澡
|
亚洲影院天堂中文av色
|
好男人www免费高清视频在线
|
亚洲午夜电影在线观看
|
日韩精品无码区免费专区
|
国产乱子伦精品免费视频
|
精品国产日韩久久亚洲
|
国产老女人精品免费视频
|
免费在线看黄的网站
|
亚洲成人免费在线观看
|
自拍偷自拍亚洲精品第1页
|
成人在线免费观看
|
黄页网站在线免费观看
|
亚洲精品少妇30p
|
99re免费99re在线视频手机版
|
亚洲性色高清完整版在线观看
|
亚洲综合另类小说色区色噜噜
|
无码av免费一区二区三区
|
日韩久久无码免费毛片软件
|
亚洲精品综合在线影院
|
日韩精品一区二区亚洲AV观看
|
亚洲大尺度无码无码专线一区
|
又粗又大又猛又爽免费视频
|
aaa毛片视频免费观看
|
AV激情亚洲男人的天堂国语
|