swpファイルはsvnaddしないで。というお話

symfonyなどのフレームワークだと、コマンド一つで必要なファイルが作られるので大変便利なのですが、
subversionへファイルを一つ一つ追加するのはめんどくさい。
そこで、前回のsvnaddコマンドの登場だったわけですが、


snvaddで追加される新規ファイルたちの中に、vimのスワップファイルの姿が
らめぇええええ

ってことで

.swpファイルは除く。という一文を追加しよう

案1

alias svnadd="svn st | grep '^\?.*\.[^s][^w][^p]$' | sed -e 's/\?[ ]*/svn add /g' | sh"

うん、頭悪い。

発想の転換だ!

grepは-vオプションで、一致しない行を返してくれる。
ということは

案2

alias svnadd="svn st | grep '^\?' | grep -v '\.swp$' | sed -e 's/\?[ ]*/svn add /g' | sh"

grep2つ使うのが、いまいち美しくないが、妥協。

そもそも

こういうのは、subversionの設定ファイルに書くべきでしたよ。

$ vim ~/.subversion/config

適当なエディタで設定ファイル開きます。

# global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store
global-ignores = *.swp

# global-ignores〜と書かれた行があるので、その設定例を参考に、拡張子がswpは外してね。と記述すればおk。
さすが、subversionかゆい所に手が届く。

チェックアウト先でも設定可能

swpファイルは、どんなプロジェクトでも除外して構わないけれど、今回はこれを除外したい!って時は

svn propedit svn:ignore 親ディレクトリ名へのパス

を使います。

設定例
data
|-- fixtures
|   |-- 030_affiliates.yml
|   |-- categories.yml
|   |-- fixtures.yml
|   `-- jobs.yml
|-- job.dev.index
|   |-- _18.cfs
|   |-- _1j.cfs
|   |-- _b.cfs
|   |-- _m.cfs
|   |-- _x.cfs
|   |-- optimization.lock.file
|   |-- read-lock-processing.lock.file
|   |-- read.lock.file
|   |-- segments.gen
|   |-- segments_27
|   `-- write.lock.file
`-- hoge.test.index
    |-- schema.sql
    |-- _18.cfs
    |-- _1j.cfs
    |-- _1t.cfs
    |-- _1u.cfs
    |-- _1v.cfs
    |-- _1w.cfs
    `-- _1x.cfs

こんな、構造のプロジェクトがあったとして、job.dev.indexの下にある拡張子がcfsを除外したい場合は、

cd data
svn propedit svn:ignore job.dev.index

すると、エディタが立ち上がるので

*.cfs

と、入力して保存すれば除外することが可能です。


また、フォルダごと除外も可能で

cd ..
svn propedit svn:ignore data

dataの一つ上の階層に移動して、ignore設定

*.*.index

と、入力して保存すれば、job.dev.indexとhoge.test.indexの二つのフォルダをバージョン管理から外すことができます。