会社のCIサーバーのJenkinsの設定が一切バックアップ取られてないのが怖くなったので、gitでバージョン管理することにしました。
普通にjenkinsのディレクトリ下でgit initしてバージョン管理すればいいのですが、 それだと余計なもの(特にビルド成果物)がたくさん入ってきてしまうので、当然.gitignoreを書きます。
ここで、jobsディレクトリのサブディレクトリの下にあるconfig.xmlのみバージョン管理したかったのですが、以下のようにすれば出来ました。
* !jobs !jobs/*/ !config.xml
一行目ですべてのファイルを無視したあと、jobs、jobsのサブディレクトリ、config.xmlをそれぞれ無視から外します。 config.xmlのみ外すだけだと、一行目でディレクトリが全て無視されているため、サブディレクトリを探してくれません。
いろいろ試行錯誤していて気づいたのですが、*/のようにすればディレクトリのみにマッチさせることができるようです。 今回のように、.gitignoreで「特定ファイルを無視」ではなく、「特定ファイル以外を無視」したい場合は重要かもしれません。
ちなみに、試行錯誤でgitの操作をあやまり、config.xmlをすべて消し飛ばしてしまいました。Jenkinsが起動していたので、ロードされていた設定を保存し直すことで復活させられましたが・・・