のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

svn add と svn del で複数ファイルを一括処理する

SubVersionで、ファイルを一括で追加、削除する方法

TortoiseSVNguiツールを使っていれば簡単なんですが

command shellからも、以下のコマンドで簡単にできます。

svn add
$ svn st|grep '^?'|awk '{print $2}'|xargs svn add
svn del
$ svn st|grep '^!'|awk '{print $2}'|xargs svn del

ただし、対象ファイル名に 半角スペースが混ざってるとうまく動きません。

.bash_profile 等で、alias にしとくとよいかもしれません。


余談ですが

svn status や svn info するとき、--xml を引数としてつけると 結果をxmlとして受けとることができます。

svn info の結果を別ツールに渡すときなど、xml出力をしてやれば、svn本体のバージョン等による出力差異*1をあまり気にせず処理することができます。

02:02:18 mikeneko mikenekoSystem $ svn info --xml
<?xml version="1.0"?>
<info>
<entry
   kind="dir"
   path="."
   revision="1">
<url>file:///home/mikeneko/svn/svnroot/mikenekoSystem</url>
<repository>
<root>file:///home/mikeneko/svn/svnroot</root>
<uuid>25ebeeb8-90a9-40ff-a5ae-1ee10670f6ee</uuid>
</repository>
<wc-info>
<schedule>normal</schedule>
<depth>infinity</depth>
</wc-info>
<commit
   revision="1">
<author>mikeneko</author>
<date>2010-05-20T15:14:57.526842Z</date>
</commit>
</entry>
</info>

02:03:28 mikeneko mikenekoSystem $ svn info 
パス: .
URL: file:///home/mikeneko/svn/svnroot/mikenekoSystem
リポジトリのルート: file:///home/mikeneko/svn/svnroot
リポジトリ UUID: 25ebeeb8-90a9-40ff-a5ae-1ee10670f6ee
リビジョン: 1
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: mikeneko
最終変更リビジョン: 1
最終変更日時: 2010-05-21 00:14:57 +0900 (金, 21  5月 2010)

*1:localeによって出力が日本語だったり英語だったり