日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打包备份svn修改

發(fā)布時間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打包备份svn修改 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用svn開發(fā)項目時,有時由于某種原因,我們不能及時地向svn上提交東西。

為了防止本地機(jī)器硬盤掛掉使這些修改丟掉或者想記錄某個時間點(diǎn)的修改,我們有必要對這些修改(Modify,Add狀態(tài))進(jìn)行額外的備份。

下面通過組合幾個工具,寫了個bat腳本來簡化這個過程。整個工具包從這里下載:svnModifyBackup

@echo off
set SVN_DEV_PATH="..\.."
set PRE_TEXTOR=".\PreTextor.exe"
set BAK_FOLDER=".\Backup"
set RAR_PATH=".\Rar.exe"

svn status %SVN_DEV_PATH% | findstr "^M" > code.lst
svn status %SVN_DEV_PATH% | findstr "^A" >> code.lst
%PRE_TEXTOR% code.lst
md %BAK_FOLDER%
%RAR_PATH% a -agYYYY-MM-DD_HH-MM-SS %BAK_FOLDER%\src @code.lst
pause

這段腳本中包含一個PreTextor.exe(自己寫的一個命令行小工具),是用來將svn輸出的code.lst內(nèi)容,修改為rar.exe需要的文件列表

安裝TortoiseSVN時,也裝上相應(yīng)的命令行工具默認(rèn)會添加svn路徑添加到PATH

rar.exe為WinRar的命令行工具(詳細(xì)用法可通過rar.exe /?來查看)

特性:

1.?rar壓縮包名的后綴為當(dāng)前備份的時間(到秒,防止相互覆蓋,如下圖所示:

2. 生成rar壓縮包會保留文件的目錄結(jié)構(gòu)(解壓后,方便使用Beyond Compare等比對工具合并修改)

++++++++++++++++++++++++++++++++++++

TortoiseSVN為封裝svn命令行的GUI工具,在其About對話框中,有其版本號與svn版本號說明,如下圖:

TortoiseProc.exe /command:about? // 彈出About對話框

TortoiseProc.exe /command:update /path:"G:\svn\TGameClient"? // 打開TortoiseProc.exe并開始更新G:\svn\TGameClient目錄

TortoiseProc.exe /command:commit /path:"G:\svn\TGameClient"?// 打開TortoiseProc.exe并顯示G:\svn\TGameClient目錄下提交對話框

TortoiseProc.exe /command:log /path:"G:\svn\TGameClient"?// 打開TortoiseProc.exe并顯示G:\svn\TGameClient目錄的日志對話框

TortoiseProc.exe /command:log /path:"G:\svn\toys.upk"? //?打開TortoiseProc.exe并顯示G:\svn\toys.upk文件的日志對話框

更多TortoiseSVN命令詳見:https://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-automation.html

++++++++++++++++++++++++++++++++++++

svn常用命令:

svn --help? // 查看svn命令幫助

svn info --help // 查看svn info命令幫助

svn info TRUNK_URL? //?獲取TRUNK_URL庫的最新信息,如當(dāng)前版本號

svn info // 獲取當(dāng)前目錄的本地信息,如TRUNK_URL路徑、本地當(dāng)前svn版本號

svn info main.c // 獲取當(dāng)前目錄下main.c的本地版本信息,如TRUNK_URL路徑、本地當(dāng)前svn版本號

svn list // 查看當(dāng)前服務(wù)器下該目錄文件信息

svn list -v? // 詳細(xì)模式查看當(dāng)前服務(wù)器下該目錄文件信息

svn list -v -R //?詳細(xì)模式查看當(dāng)前服務(wù)器下該目錄(遞歸子目錄)文件信息

svn copy TRUNK_URL BRANCH_URL –m "Create branch from trunk 1665" ?// 從TRUNK_URL的基線號1665,創(chuàng)建一個分支到BRANCH_URL

svn co TRUNK_URL? // 將TRUNK_URL最新版本檢出到當(dāng)前目錄

svn co --username chen --password test?--no-auth-cache TRUNK_URL??// 使用用戶名為chen密碼為test的賬號(不緩存該用戶信息)將TRUNK_URL最新版本檢出到當(dāng)前目錄

svn co TRUNK_URL@1665? PATH --force??// 將TRUNK_URL的基線號1665版本檢出到PATH路徑下(若PATH路徑存在則強(qiáng)制覆蓋)

svn export TRUNK_URL??// 將TRUNK_URL最新版本導(dǎo)出到當(dāng)前目錄

svn?export --username chen --password test?--no-auth-cache TRUNK_URL??// 使用用戶名為chen密碼為test的賬號(不緩存該用戶信息)將TRUNK_URL最新版本導(dǎo)出到當(dāng)前目錄

svn?export TRUNK_URL@1665? PATH --force??// 將TRUNK_URL的基線號1665版本導(dǎo)出到PATH路徑下(若PATH路徑存在則強(qiáng)制覆蓋)

svn sw BRANCH_URL?// 將當(dāng)前svn切到BRANCH_URL分支

svn?sw --username chen --password test?--no-auth-cache?BRANCH_URL ?// 使用用戶名為chen密碼為test的賬號(不緩存該用戶信息)將當(dāng)前svn切到BRANCH_URL分支

svn ci –m "comments"??// 提交當(dāng)前目錄內(nèi)的修改(遞歸子目錄)到svn

svn ci –m "comments"?d:\TestDir??// 提交d:\TestDir目錄內(nèi)的修改(遞歸子目錄)到svn

svn ci –m "comments"?d:\TestDir\Game.exe? // 提交d:\TestDir\Game.exe到svn

svn ci –m "comments"?d:\TestDir\Game.exe e:\scripts\*? // 提交d:\TestDir\Game.exe和e:\scripts目錄下的所有文件到svn

svn add d:\TestDir? // 將d:\TestDir所有目錄和文件(遞歸,除非文件后綴在svn::ignore中)添加本地add狀態(tài)

svn add abc\Test\123.txt?--force --parents // 將當(dāng)前目錄下的abc\Test\123.txt文件及所有父目錄添加本地add狀態(tài)

svn merge TRUNK_URL d:\branch0223??// 將主干最近的改動合并到分支d:\branch0223

svn merge -c 1665 TRUNK_URL d:\branch0223??// 將主干1665改動合并到分支d:\branch0223

svn merge -c 1665 TRUNK_URL\test.txt?d:\branch0223\test.txt ?// 將主干的test.txt文件的1665改動合并到d:\branch0223下的test.txt中

svn merge -r 1665:2015 TRUNK_URL d:\branch0223??// 將主干(1665,2015]改動合并到分支d:\branch0223

-----------------------------------------------------
合并成功后,可以使用一下日志格式和內(nèi)容進(jìn)行提交

Merged revision(s) 1665:2015 from game_proj/trunk/MyGame/Src:
半靈狀態(tài)加個時間顯示
........
-----------------------------------------------------

svn --reintegrate merge BRANCH_URL d:\trunk? // 將分支的改動合并到主干d:\trunk

svn merge -r 801897:801046?d:\TestDir\Game.exe? // d:\TestDir\Game.exe從當(dāng)前801897版本回退到801046版本

svn copy TRUNK_URL TRUNK_BRANCH? // 從主干TRUNK_URL拉取分支TRUNK_BRANCH

svn del?main.c??// 刪除本地當(dāng)前目錄下的main.c文件

svn del?TestDir ?// 刪除本地當(dāng)前目錄下的TestDir文件夾

svn del?TRUNK_URL\main.c?–m "comments" // 刪除TRUNK_URL服務(wù)器上的main.c文件

svn mv?TRUNK_URL\main.c?TRUNK_URL\main2.c –m "comments" --force-log? // 將服務(wù)器上的TRUNK_URL\main.c改名為main2.c

svn mv main.c main2.c // 將當(dāng)前目錄下main.c重命名為main2.c

svn up?// 更新當(dāng)前目錄(遞歸子目錄)的svn到最新版本

svn up main.c // 更新main.c文件的svn到最新版本

svn up?d:\TestDir? // 更新d:\TestDir目錄(遞歸子目錄)的svn到最新版本

svn up -r1665 TestDir? // 更新當(dāng)前目錄下的TestDir目錄(不含external遞歸子目錄)的svn版本到1665

svn revert .? // 丟棄當(dāng)前目錄下所有的修改

svn revert main.c? // 丟棄當(dāng)前目錄下main.c文件的修改

svn revert -R .? // 丟棄當(dāng)前目錄下(遞歸子目錄)所有的修改

svn revert -R?d:\TestDir ?// 丟棄d:\TestDir目錄下(遞歸子目錄)所有的修改

svn revert -R TestDir??// 丟棄當(dāng)前目錄TestDir目錄下(遞歸子目錄)所有的修改

svn cleanup // 清理當(dāng)前目錄下本地未完成svn操作的狀態(tài)信息

svn cleanup TestDir // 清理當(dāng)前目錄TestDir目錄下本地未完成svn操作的狀態(tài)信息

svn log // 查看當(dāng)前目錄的歷史修改

svn log main.c //?查看當(dāng)前目錄下main.c的歷史修改

svn log -l 10 -v //查看當(dāng)前目錄下最新10條log,并打印出每次變更的文件列表

svn log -r {2017-03-24}:{2017-03-25} //查看當(dāng)前目錄下從 [ 2017-03-24, 2017-03-25 ) 之間的記錄,要是時間反過來寫就是先打印2017-03-25的

svn log -r "{2018-04-20 15:00:00}:{2018-04-20 17:00:00}"?//查看當(dāng)前目錄下從 [ 2018-04-20 15:00:00, 2018-04-20 17:00:00 ) 之間的記錄

svn log -r 1665 d:\TestDir?//查看d:\TestDir目錄下版本號為1665的log信息

svn log -r --xml 1665:2015 //以xml形式查看版本號為 [ 1665, 2015 ] 的log信息

svn propset svn:executable on KE.sh? // 為當(dāng)前目錄下的KE.sh增加可執(zhí)行屬性(Unix/Linux/MacOSX等)

svn propset svn:needs-lock on d:\TestDir\*? // 為d:\TestDir下所有文件增加加鎖屬性

svn propset svn:externals "WebUI http://xxx/trunk/Game/WebUI" . // 在當(dāng)前目錄下創(chuàng)建一個externals的外鏈:新建WebUI目錄并將其指向http://xxx/trunk/Game/WebUI

svn propset svn:externals -F externals.txt . // 使用externals.txt文件中externals配置來在當(dāng)前目錄下創(chuàng)建多個外鏈

========== externals.txt ============

WebUI?http://xxx/trunk/Game/WebUI
Content http://xxx/trunk/Game/Content

svn propset svn:ignore "*.pdb *.ncb *.suo" Src??// 為當(dāng)前目錄下的Src目錄增加.pdb .ncb .suo后綴名過濾屬性(在當(dāng)前目錄下點(diǎn)擊Add獲得列表中將過濾掉.pdb .ncb .suo后綴名的文件;但可以通過直接選擇目標(biāo)文件Add)

svn propedit svn:ignore "*.pdb *.ncb" Src??// 為當(dāng)前目錄下的Src目錄過濾屬性修改為.pdb .ncb后綴名(必須要先通過svn propset創(chuàng)建svn:ignore屬性才行使用svn propedit進(jìn)行編輯)

svn propset svn:ignore '*' spool // 忽略當(dāng)前目錄下的spool目錄中的所有文件(Add列表文件列表中不顯示)

svn propset svn:ignore 'images'??// 忽略當(dāng)前目錄下的images文件夾(Add列表文件列表中不顯示)

svn propset svn:keywords "Author Date Revision" test3.txt??// 為test3.txt設(shè)置Author Date Revision關(guān)鍵字

注:在test3.txt中的$Author$、$Date$、$Revision$將被替換成如下內(nèi)容

$Author: chen $
$Date: 2018-07-19 16:36:46 +0800 (周四, 19 七月 2018) $
$Revision: 775107 $

++++++++++++++++++++++++++++++

$Date$ 提交的日期
$Revision$ 提交的版本號
$Author$ 提交的作者
$HeadURL$ 此文件在版本庫中的 URL
$Id$ 上述四個關(guān)鍵字的壓縮組合

svn propdel svn:executable KE.sh? // 刪除KE.sh上的可執(zhí)行屬性(Unix/Linux/MacOSX等)

svn proplist KE.sh?// 查看KE.sh的屬性

svn propget svn:externals -R // 查看當(dāng)前目錄下(遞歸子目錄)所有具有svn:externals屬性的目錄

svn st [-v] ? //?查看本地文件狀態(tài),可以看到當(dāng)前目錄下所有的改動

-v: 可以顯示所有的文件信息,包括未修改的。
-u: 可以用”*”標(biāo)識有更新的文件

文件狀態(tài):
? scratch.c (不在版本控制中)
A stuff/loot (新加文件,未提交)
A stuff/loot/new.c
D stuff/old.c (刪除文件,未提交)
M bar.c (修改文件,未提交)
C cc.c (有沖突未解決的)

svn lock ATD8-Test_Main.udk? // 鎖定當(dāng)前目錄下的ATD8-Test_Main.udk文件

svn lock -m "adjust size" --force ATD8-Test_Main.udk? // 強(qiáng)制鎖定當(dāng)前目錄下的ATD8-Test_Main.udk文件(若被其他人鎖定,則偷鎖),并寫上adjust size的日志

svn unlock ATD8-Test_Main.udk? // 解鎖當(dāng)前目錄下的ATD8-Test_Main.udk文件

svn diff?DefaultADGame_2.ini // 查看DefaultADGame_2.ini文件的當(dāng)前修改

===================================================================
--- DefaultADGame_2.ini (revision 773213)
+++ DefaultADGame_2.ini (working copy)
@@ -6631,7 +6631,7 @@
Level1StateCommandListHard=Rush
Level1StateCommandListHard=SwingBlade
Level1StateCommandListHard=Rush
-Level1StateCommandListHard=Garbage
+Level1StateCommandListHard=Idle

Level1StateCommandListHell=Idle
Level1StateCommandListHell=Laser

注:-Level1StateCommandListHard=Garbage??// -表示刪除

? ? ? ?+Level1StateCommandListHard=Idle?// +表示增加

svn diff -c 772500 DefaultADGame_2.ini?// 查看DefaultADGame_2.ini文件772500版本與其上個版本的差異

svn diff -r 772500?DefaultADGame_2.ini?// 查看DefaultADGame_2.ini文件772500版本與當(dāng)前工作目錄版本的差異

svn diff -r 772688:773161 DefaultADGame_2.ini??// 查看DefaultADGame_2.ini的772688與773161版本差異

===================================================================
--- DefaultADGame_2.ini (revision 772688)
+++ DefaultADGame_2.ini (revision 773161)
@@ -6551,7 +6551,7 @@
RushCount=1
LaserIdleDuration=22.0f
FixedLaserStartFireSeconds=2.4f
-FixedLaserStopFireSeconds=1.2f
+FixedLaserStopFireSeconds=1.6f
MovableLasersStartFireSeconds=1.0f

GrenadeCount=5

+++++++++++++++++++++++++++++++++++

svn版本說明:

svn-win32-1.5.4
svn-win32-1.6.16
svn-win32-1.7.13
svn-win32-1.8.10
... ...

各個版本可以從這兒下載:https://sourceforge.net/projects/win32svn/files/

可以使用以下方法來判斷本地svn目錄是用的哪個版本拉取的:

① 若存在.svn\entries文件,則讀取其中記錄的版本號;不存在則讀取.svn\format文件中記錄的版本號V

? ? ?注:1.7.4等高版本的svn? 把.svn文件夾只放置到簽出root目錄,子目錄不再有.svn

② 若V = 7,則svn的版本為1.3

? ? 若V = 8,則svn的版本為1.4

? ??若V = 9,則svn的版本為1.5

? ??若V = 10,則svn的版本為1.6

? ??若V = 12,則再執(zhí)行命令sqlite3.exe? .svn\wc.db?"PRAGMA user_version",返回值為R(注:sqlite3.exe可以從這兒下載)

? ? ? ? ? ?(a) 若R = 29,則svn的版本為1.7

? ? ? ? ? ?(b) 若R = 31,則svn的版本為1.8

總結(jié)

以上是生活随笔為你收集整理的打包备份svn修改的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。