かすみん日記

暇なときに何か喋ります

【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ファイルは無視されない。

ただし、この設定はフォルダのプロパティを書き換えるので、その修正をコミットする必要があるため、 ローカル(自分)だけじゃなくプロジェクトをチェックアウトした人全員に影響が及ぶ。

プロパティの更新だけをコミットすることもできるらしい:

yanor.net

バージョン管理外

バージョン管理外のファイルやフォルダは、まだ一度もコミットされていないものというだけ。

つまり、新規作成したファイルは管理下に置かれていないので、コミットする際はバージョン管理外を非表示にするフィルターを外してチェックするのを忘れずに。

なお、すでにバージョン管理下に置かれているファイルは、後から追加した無視リストにマッチしても、途中からバージョン管理外になったりしないので注意。

後から管理対象から外したい場合は、下記記事を参照(TortoiseSVN):

tortoisesvn.net

後書き

Gitって便利ですよね(こなみ)

お仕事ではウインドウズだしSVNだしで毎日がつらたにえんです。

無視リストにパス指定できないのはgmすぎる...

TortoiseSVNもクソ使いにくいし(GitHub Desktopと比べて)

でもSVNはバイナリファイル(画像やエクセルとか)の管理に自信があるようなので、それはGitよりいいところですかね(そもそも論は置いといて)。

まあ、ローカルではGitも併用してるんですけどね。機能単位じゃなくて作業単位でコミットしたいよね。

参考

tortoisesvn.net

tortoisesvn.net

oki2a24.com

zenn.dev