🐙
【Git】あとからgitignoreを設定したいとき
Summary
まず、.gitignoreを更新する。
その後、次のコマンドを実行することで除外対象にすべきファイルが一覧で表示される
Unityプロジェクトの例
❯ git ls-files --full-name --exclude-standard -i -c
Assembly-CSharp-Editor.csproj
Assembly-CSharp-firstpass.csproj
Assembly-CSharp.csproj
EditMode.csproj
...
コマンドの詳細
-
git ls-files- インデックスと作業ツリーにあるファイルについての情報を表示する - オプション:
-
--full-name: サブディレクトリから実行した場合、コマンドは通常、カレントディレクトリからの相対パスを出力します。このオプションは、プロジェクトのトップディレクトリからの相対パスを出力するよう強制します。 -
--exclude-standard: Gitの標準的な除外ファイルである.git/info/exclude、各ディレクトリの.gitignore、そしてユーザーのグローバル除外ファイルを追加します。- つまり、
.git/info/excludeと.gitignoreに書かれたファイルを対象とする
- つまり、
-
-i, --ignored: 除外パターン(.gitignore)に一致したファイルのみ出力する。-cか-oと併せて使う必要がある-
-o, --othersと組み合わせると、除外パターン以外のファイル(管理対象のファイル)を出力する
-
-
-c, --cached: 追跡済み(コミットされた)ファイルを表示
-
通常、git ls-filesするとすべてのファイル名が表示される。
--exclude-standard -icオプションを付けることで、.gitignoreにかかれたファイルかつ、ステージング済みのファイル一覧を返す。
さらに、git rm --cachedと組み合わせることで、除外したいすべてのファイルをステージング上から消すことができる。
ワンラインでの実行例
PowerShellの場合
git ls-files --full-name --exclude-standard -ic | ForEach-Object { git rm --cached $_ }
Linuxの場合、以下で実行できるかも(未検証)
Linuxの場合
git rm --cached $(git ls-files --full-name --exclude-standard -ic)
Reference
Behind
一時ファイルや管理対象にすべきじゃなかったファイル・フォルダをうっかりGitに上げてしまい、あとからgitignoreを設定したかったのでメモ
Discussion