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