🫥
後からgitignoreを一気にやる
結論
// ファイル確認
git ls-files --cached --ignored --exclude-standard
// git管理から外す
git ls-files --cached --ignored --exclude-standard -z | xargs -0 git rm --cached
補足
1つ目のコマンド
-
--cachedと--ignoredを組み合わせることでgit管理下で除外対象をリスト化-
--cached(-c):git管理ファイルを対象とする -
--ignored(-i):.git/info/exclude、.gitignoreの対象となってるファイルを表示する -
--exclude-standard:.git/info/exclude、各ディレクトリの.gitignoreを除外対象とする-
--exclude-per-directory=.gitignoreでリポジトリ内の.gitignoreだけを対象とする
-
-
2つ目のコマンド
-
git ls-files -z:出力されるファイル名を\0(ヌル文字)で区切られた1行のバイト列に変換-
\0:表示はされないけど意味を持つ制御文字、つまり今回はファイル名の安全な区切りとして使っている
-
-
xargs -0 git rm --cached:標準入力の内容をgit rm --cachedの引数として渡す-
xargs:標準入力で受け取った内容を引数として別のコマンドに渡す -
-0:\0区切りで受け取ることで、スペースや改行、特殊文字を含むファイル名でも安全に扱う
-
参考
Discussion