【SVN】無視リストとバージョン管理外
TortoiseSVNクライアントで「無視リスト」と「バージョン管理外」のフィルターがあるので、何が違うのかと思った。
無視リストは、svnの設定ファイルやフォルダのプロパティで無視するように指定されたファイルやフォルダのこと。
バージョン管理外は、まだ一度もコミットされていない、つまり新規作成したファイルやフォルダのこと。
無視リスト
ローカル設定(常に無視するパターンのリスト)
svnの設定は、%APPDATA%\Subversion\
にあるconfig
という名前のファイルに記載されている。
%APPDATA%
はC:\Users\%username%\AppData\Roaming
の意味なので、そのままエクスプローラのパス窓に貼り付けてOK。
配置場所からもわかるように、この設定はローカルにしか適用されない。
また、逆に言えばローカル環境全体に適用されるので、チェックアウトしているプロジェクトごとに設定を変更したりすることはできない。
無視リストに追加したいファイルやフォルダは、config
ファイルの[miscellany]
の下にあるglobal-ignores
に指定する:
[miscellany] global-ignores = .DS_Store *.dll *.exe bin .git .vscode
名前の指定には、以下のワイルドカードが使える:
*
:0文字以上の任意の文字列にマッチ?
:任意の1文字にマッチ[...]
:鍵括弧で囲まれた文字のうちの1文字にマッチ。ハイフン-
で範囲も表現できる([AGm-p]
はA, G, m, n, o, p
にマッチ)。
複数項目は半角スペース or 改行で区切る。
なので、1行で書かなくてもいい:
global-ignores = .DS_Store *.dll *.exe bin .git .vscode
残念ながら、パスは含めることはできない:
global-ignores = log/*.txt src/bin # NG
あと、#
から行末まではコメントとして扱われる。
フォルダのプロパティ
svn管理下のフォルダのプロパティには「Subversion」タブが追加されているので、そこでsvn:ignore
プロパティに無視したいファイルを指定する。
例えばsrc
フォルダのsvn:ignore
に*.exe
が指定されていると、src
フォルダ以下のexe
ファイルだけが無視される。
このとき、他のディレクトリ、例えばbuildTool
フォルダ以下のexe
ファイルは無視されない。
ただし、この設定はフォルダのプロパティを書き換えるので、その修正をコミットする必要があるため、 ローカル(自分)だけじゃなくプロジェクトをチェックアウトした人全員に影響が及ぶ。
プロパティの更新だけをコミットすることもできるらしい:
バージョン管理外
バージョン管理外のファイルやフォルダは、まだ一度もコミットされていないものというだけ。
つまり、新規作成したファイルは管理下に置かれていないので、コミットする際はバージョン管理外を非表示にするフィルターを外してチェックするのを忘れずに。
なお、すでにバージョン管理下に置かれているファイルは、後から追加した無視リストにマッチしても、途中からバージョン管理外になったりしないので注意。
後から管理対象から外したい場合は、下記記事を参照(TortoiseSVN):
後書き
Gitって便利ですよね(こなみ)
お仕事ではウインドウズだしSVNだしで毎日がつらたにえんです。
無視リストにパス指定できないのはgmすぎる...
TortoiseSVNもクソ使いにくいし(GitHub Desktopと比べて)
でもSVNはバイナリファイル(画像やエクセルとか)の管理に自信があるようなので、それはGitよりいいところですかね(そもそも論は置いといて)。
まあ、ローカルではGitも併用してるんですけどね。機能単位じゃなくて作業単位でコミットしたいよね。