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