[解決済み] 現在ステージングまたはコミットされているファイルで、git が無視するものをリストアップする方法は?
質問
.gitignoreファイルのルールにマッチし、かつ過去にステージングまたはコミットされたファイルのリストを取得するにはどうしたらよいでしょうか。
どのように解決するのですか?
のドキュメントは
ls-files
に対するドキュメントは必ずしも明確に書かれているわけではありませんが、以下のような単純なエイリアスがその役目を果たしているようです。
git config --global alias.showtrackedignored "ls-files -i --exclude-standard"
上記のコマンドは
showtrackedignored
. 使用するには、実行します。
git showtrackedignored
を実行すると、カレントディレクトリとサブディレクトリにある、追跡されているが、追跡されていなければ無視されるようなファイルをすべてリストアップします。
のバグ
git ls-files
残念ながら、これは100%確実に動作するわけではありません。 どうやら、Git は
ではなく
を無視するファイルを見つけるのはうまくいきますが
は
は無視されます(
-i
のオプションは
git ls-files
) を使用すると、無視のルールにマッチしたディレクトリであれば、 ディレクトリ内の無視されるファイルをリストアップしないようになります。
このバグを回避するには、無視ルールを変換して、ディレクトリではなくファイルのみにマッチするようにしてください (これは常に可能というわけではありません)。
(ありがとうございます クリストフ このバグを発見してくれた Git メーリングリストに報告してくれました。 ! 編集:パッチは現在作成中で、git 1.7.11.2 以降に反映させる予定です)
別のアプローチ
別のアプローチを紹介します。 これははるかに複雑で、コーナーケースが壊れている可能性があります。
git config --global alias.showtrackedignored '!
cd "${GIT_PREFIX}" &&
untracked_list=$(git rev-parse --git-dir)/ignored-untracked.txt &&
git ls-files -o -i --exclude-standard >"${untracked_list}" &&
GIT_INDEX_FILE="" git ls-files -o -i --exclude-standard | grep -Fvxf "${untracked_list}" &&
rm -rf "${untracked_list}"'
エイリアスは次のような働きをします。
-
cd
のあるディレクトリに戻りgit showtrackedignored
が実行されたディレクトリに戻ります(Gitはシェルベースのエイリアスをカレントディレクトリではなく、トップレベルディレクトリから実行します。alias.*
のセクションをご覧ください。git help config
) -
という変数を定義します。
untracked_list
. この変数は、現在無視されているファイルのリストを格納する一時ファイルへのパスを保持します。 この一時ファイルは.git
ディレクトリにあります。 -
無視されるファイルのリストを
${untracked_list}
. - インデックスが空であるかのように振る舞い、無視されたファイルをすべてリストアップするようにGitに指示します。
-
その出力をパイプで
grep
に書き込まれたファイルをフィルタリングします。${untracked_list}
. -
一時ファイルを削除する
${untracked_list}
.
この方法の欠点
-
の中に一時ファイルを作成します。
.git
ディレクトリに一時ファイルを作成します。 - POSIX互換のシェルがあることを前提にしています。
-
のPOSIX互換の実装があることを前提としています。
grep
.
また、以前のエイリアスと同じバグに悩まされています。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] ファイルをリセットしたり、特定のリビジョンに戻したりするにはどうすればよいですか?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] コミットに含まれるすべてのファイルを一覧表示するにはどうすればよいですか?
-
[解決済み] ステージングされた変更を表示するにはどうしたらいいですか?
-
[解決済み] .gitignoreで一部のファイル以外を無視するようにする
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Gitで「このリポジトリでは別のgitプロセスが実行されているようです...」と表示される問題
-
Gitのエラーについて覚えておく-すべて最新にする
-
解決策正しいアクセス権を持っていることと、リポジトリが存在することを確認してください。
-
[解決済み] .gitignore で無視される特定のファイルを表示する Git コマンド
-
gitの利用(ssh鍵の作成とgithubの利用)。
-
git push please tell me who you are or git fatal: empty ident name (for <>) not llowed.
-
[解決済み] .gitignoreで特定のファイルを除外する
-
[解決済み] ローカルレポとリモートレポを接続する
-
[解決済み] GitHubのウェブサイト上でディレクトリやフォルダの名前を変更するには?
-
[解決済み] Git タグリスト、コミット sha1 ハッシュの表示