LoginSignup
0
1

.gitignoreの例外(否定文!)が冗長なのでスッキリさせる。

Posted at

結果

.gitignore
- /configs/*
- !/configs/alpha
- /configs/alpha/*
- !/configs/alpha/one
- /configs/alpha/one/*
- !/configs/alpha/one/test1.py
- !/configs/beta
- /configs/beta/*
- !/configs/beta/test3.py

+ /configs/**
+ !/configs/**/
+ !/configs/alpha/one/test1.py
+ !/configs/beta/test3.py

動機

.gitignoreの例外があまりにも長過ぎるのでどうにかできないかと調べた。調査結果をメモ代わりに保存したい。

環境

  • Ubuntu 18.04 LTS
  • git v2.17.1

問題

以下のようなディレクトリ構成の時、次のファイルのみを追跡したいとする。

  • configs/alpha/one/test1.py
  • configs/beta/test3.py
.
└── configs
    ├── alpha
    │   ├── one
    │   │   ├── test1.py
    │   │   └── test2.py
    │   └── test5.py
    └── beta
        ├── test3.py
        └── test4.py

このような場合の.gitignoreの表記は以下のようになる

.gitignore
/configs/*
!/configs/alpha
/configs/alpha/*
!/configs/alpha/one
/configs/alpha/one/*
!/configs/alpha/one/test1.py
!/configs/beta
/configs/beta/*
!/configs/beta/test3.py

確認

$ git add ./
$ git status
ブランチ master
コミット予定の変更点:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   configs/alpha/one/test1.py
        new file:   configs/beta/test3.py
$ git reset

除外+例外の追加を繰り返して行っている。

参考:

しかし、この方法は冗長であり、また追加も面倒だ。

対策

以下のように変更を行う

.gitignore
- /configs/*
- !/configs/alpha
- /configs/alpha/*
- !/configs/alpha/one
- /configs/alpha/one/*
- !/configs/alpha/one/test1.py
- !/configs/beta
- /configs/beta/*
- !/configs/beta/test3.py
# 上と同じ例外になる
+ /configs/**
+ !/configs/**/
+ !/configs/alpha/one/test1.py
+ !/configs/beta/test3.py

確認

$ git add ./
$ git status
ブランチ master
コミット予定の変更点:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   configs/alpha/one/test1.py
        new file:   configs/beta/test3.py
$ git reset

同じ結果が得られた。

参考:

例外の追加

また追加したい場合も楽になる。
以下のファイルを追加して、test6.pyのみを追跡したい場合

  • configs/gamma/test6.py
  • configs/gamma/test7.py
mkdir configs/gamma/
echo "" >> configs/gamma/test6.py
echo "" >> configs/gamma/test7.py
  • 従来
.gitignore
+ !/configs/gamma
+ /configs/gamma/*
+ !/configs/gamma/test6.py
  • 新規
.gitignore
+ !/configs/gamma/test6.py

確認

$ git add ./
$ git status
ブランチ master
コミット予定の変更点:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitignore
        new file:   configs/gamma/test6.py        
$ git reset
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1