🫥
後から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