Hatena::ブログ(Diary)

shouhの日記

2014-01-28

TortoiseSVN マージ用バッチファイル

SVN のマージは賢くないようで、作業コピーのルートディレクトリを trunk にマージ(あるいは逆に trunk の更新分を取り込む)、なんてことをすると、すぐに競合が起こる。原因は色々あるが、とにかく SVN のマージは賢くない。

競合を回避するには、自分が更新した部分だけをマージすればいい。しかし、マージする部分を手動で選ぶなんてアホらしい。何のためのバージョン管理なのだろうと思う。

せめてバッチ化することで手間を減らすことに。

TortoiseProc.exe は、上手い具合に引数を与えてやるとマージ画面を出してくれる。マージしたい部分を全部バッチファイルに書いて呼び出すようにすると、必要なマージ画面を簡単に呼び出せる。

set PROC="C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe"
set FOOTER=/notempfile /closeonend:0

::RPROOT を WCROOT にマージする.
::パスに "" 囲みは不要
set WCROOT=作業コピーのディレクトリパス(マージ先)
set RPROOT=リポジトリのURL(マージ元)

::この辺はマージしたいものに合わせて適当に.
set hoge_include=src/include/hoge
set hoge_src=src/hoge
set hoge_test=test/hoge

%PROC% /command:merge /path:"%WCROOT%/%hoge_include%" /fromurl:"%RPROOT%/%hoge_include%"
%PROC% /command:merge /path:"%WCROOT%/%hoge_src%" /fromurl:"%RPROOT%/%hoge_src%"
%PROC% /command:merge /path:"%WCROOT%/%hoge_test%" /fromurl:"%RPROOT%/%hoge_test%"

pause

::以下メモ
::----------------------------------------
::path: マージ先の作業コピー
::fromurl: マージ元のurl
::
::/closeonend:0 自動でダイアログを閉じません。
::/closeonend:1 エラーがなければ自動で閉じます。
::/closeonend:2 衝突がなければ自動で閉じます。
::/closeonend:3 マージがなければ自動で閉じます。

2013-10-23

ファイル/フォルダをバックアップするバッチファイル

勉強がてら作ってみました。送るフォルダに置いておくと便利かもしれません。

要約

  • 一つのファイルorフォルダをバックアップ可能
  • 自動的に名前に日付時刻文字列を付加する
  • フォルダの圧縮には Lhaplus を使用

スクリプト

::Lhaplusの詳細設定で「アーカイブと同じフォルダ」に圧縮/解凍するよう設定が必要

::--------------------------------
::設定部分
::--------------------------------

::@echo off
set ZIPPER="c:\Program Files (x86)\Lhaplus\Lhaplus.exe"
set ZIPPER_OPT=/c:zip /od

::バックアップ先(スペース含むパスでも "" で囲まないで!)
set BAKDIR=D:\Dropbox\backup_misc

::--------------------------------
::実処理
::--------------------------------

::コピー元パス
set TARGET=%1
::コピー元パスのファイル名+拡張子部分(以下部分文字列には "" は付かない)
set TARGET_NX=%~nx1
::コピー元パスのファイル名部分
set TARGET_N=%~n1
::コピー元パスの拡張子部分
set TARGET_X=%~x1

::コピー先パスに付加する日付時刻文字列
::YYMMDD_hhmmss にする
set MYDATE=%date%
set MYDATE=%MYDATE:/=%
set MYDATE=%MYDATE:~2,6%
set MYTIME=%time%
set MYTIME=%MYTIME: =0%
set MYTIME=%MYTIME::=%
set MYTIME=%MYTIME:~0,6%
set MYDATETIME=%MYDATE%_%MYTIME%

::引数解析
:: * ATTR 部分はファイルかどうかチェックしている
::   drahs----
::   ^ここ
set ATTR=%~a1
if %ATTR:~0,1% == - goto CASE_FILE
goto CASE_FOLDER

:CASE_FILE
::ファイル: コピー先にコピー後、末尾に日付つける
::echo %1 is FILE
copy /-Y %TARGET% "%BAKDIR%"
ren "%BAKDIR%\%TARGET_NX%" "%TARGET_N%_%MYDATETIME%%TARGET_X%"

goto END

:CASE_FOLDER
::フォルダ: 圧縮して、末尾に日付つけて、コピー先に移動
::echo %1 is FOLDER
%ZIPPER% %ZIPPER_OPT% %TARGET%
set TARGET=%TARGET_NX%.zip
set AFTERREN=%TARGET_NX%_%MYDATETIME%.zip
ren "%TARGET%" "%AFTERREN%"
move /-Y "%AFTERREN%" "%BAKDIR%"
::echo %AFTERREN%

goto END

:END
ping localhost -n 2 > nul
::pause