「Subversion」カテゴリーアーカイブ

作業コピーにあるすべてのバージョン化されていないオブジェクトを再帰的に追加する

Subversion によるバージョン管理

通常、コマンドsvn add *はすでにバージョン管理下にあるすべてのディレクトリを飛ばします。しかし作業コピーにあるすべてのバージョン化されていないオブジェクトを再帰的に追加したいこともあるでしょう。svn addに --forceオプションを渡すと既にバージョン化されているディレクトリにも再帰的に降りていきます:

$ svn add * --force
A         foo.c
A         somedir/bar.c
A         otherdir/docs/baz.doc
…

バージョン化されていないディレクトリとファイルをすべてaddして、
紛失ファイルをdelete後にcommitする

$ svn add * --force
$ svn commit
svn: Commit failed (details follow):
svn: Directory <path><file> is missing
$ svn delete <file>
D         <file>
$ svn commit

しかし、svn add * --force では、実行したディレクトリ直下のsvn:ignore属性に設定したファイルやディレクトリも追加されてしまう。
なので、以下のようにいったんadd * --forceで追加した後、無視ファイルをrevertする必要がある。

$ svn add * --force
A         ignore.txt
A         ignoredir
A         ignoredir/ignore.txt
$ svn revert --depth infinity ignore.txt ignoredir/
'ignore.txt' を元に戻しました
'ignoredir' を元に戻しました
$ svn commit

何かもっといい方法はないのだろうか?

svnだけではうまい方法はない。svn status の出力をsedでフィルタしてsvn add にリダイレクトするaliasを設定するとよい。
以下をご覧ください。
無視ファイル以外をまとめて svn add、紛失ファイルをまとめてsvn del

ログの編集を許可してコミットメッセージを変更するには

■サーバ側の設定
レポジトリのhooks/pre-revprop-change.tmplをpre-revprop-changeにコピーして、実行権限を与え、以下のように変更する。

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" -a "$USER" = "HOGEHOGE" ]; then exit 0; fi
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

上記の例では、ユーザHOGEHOGEだけがログの変更が出来るようになる。

■クライアント側でログを編集するには

svn propset --revprop -r 25 svn:log "Journaled about trip to New York."

上記例では、リビジョン25のログメッセージを設定しています。

svn propset svn:log --revprop -r 10 -F r10_log.txt svn://repo

上記例では、svn://repoにあるリポジトリのリビジョン10のログメッセージを「r10_log.txt」に書かれている内容に変更します。

または、propeditでエディタで編集できる。

svn propedit --revprop -r 25 svn:log

Subversion - YImai's memo

svn:ignore

たとえば、Ruby on Railsアプリケーションのプロジェクトのtmpディレクトリ以下の全サブディレクトリ内のファイルを無視するには、tmpディレクトリにsvn:ignore属性で*を再帰的に適用する。
サブディレクトリ自体も無視する場合は、親ディレクトリにsvn:ignore属性で*を設定すればよい。
たとえばsymfonyプロジェクトのcacheディレクトリのように、cacheディレクトリ下のディレクトリは、自動的に作成されるため、ディレクトリ自体をソース管理する必要がない場合など。

svn propedit svn:ignore cache

で、環境変数SVN_EDITORで設定したエディタが開くので、

*

と入力して保存する。