.gitignore によって無視される特定のファイルを表示する Git コマンド 質問する

.gitignore によって無視される特定のファイルを表示する Git コマンド 質問する

私は Git を使い始めたばかりですが、次のような問題があります。

私のプロジェクトのソースツリー:

/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...

ベンダー ブランチにコード (現在は MEF) があり、それをそこでコンパイルしてから、参照を移動して、/src/refsプロジェクトが参照を取得する場所にします。

私の問題は、と を.gitignore無視するように設定していることです。 を実行して無視されたファイルを強制的に追加することはできますが、問題は、無視されるファイルが存在するかどうかをリストする方法がわからないことです。*.dll*.pdbgit add -f bar.dll

無視されたファイルをリストして、追加を忘れないようにしたいです。

のマニュアルページを読みましたがgit ls-files、うまく動作しません。 は私がgit ls-files --exclude-standard -i望む動作をするはずです。何が足りないのでしょうか?

ベストアンサー1

ノート:


また興味深いのは(クワーティ答え)を使用することもできますgit check-ignore -vコマンド、少なくとも Unix では ( CMD Windowsセッションでは動作しませんが、Windows CMD git bash セッションでは動作します)

git check-ignore -- *
git check-ignore -v -- *

2番目は、.gitignoregitリポジトリでファイルを無視する実際のルールを表示します。Unix
では、「現在のディレクトリ内のすべてのファイルに再帰的に展開するものは何ですか?" および bash4+:

git check-ignore **/*

(またはfind -execコマンド)

注記:https://stackoverflow.com/users/351947/Rafi B.示唆するコメント欄(危険な)グロブスターを避けるには:

git check-ignore -v $(find . -type f -print)

ただし、サブフォルダーのファイルは必ず除外してください.git/

認定示唆するコメント、 避けるために.git/

find . -not -path './.git/*' | git check-ignore --stdin

元の回答 (2009)

git ls-files -i

動作するはずですが、ソースコード次を示します:

if (show_ignored && !exc_given) {
                fprintf(stderr, "%s: --ignored needs some exclude pattern\n",
                        argv[0]);

exc_given?

実際に何かをリストするには、 の後にもう 1 つのパラメータが必要であることがわかりました-i

試す:

git ls-files -i --exclude-from=[Path_To_Your_Global].gitignore

(ただし、これはキャッシュされた(無視されていない) オブジェクトのみをフィルター付きでリストするため、これは必要な結果とは少し異なります)


例:

$ cat .git/ignore
# ignore objects and archives, anywhere in the tree.
*.[oa]
$ cat Documentation/.gitignore
# ignore generated HTML files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git ls-files --ignored \
    --exclude='Documentation/*.[0-9]' \
    --exclude-from=.git/ignore \
    --exclude-per-directory=.gitignore

実際、私の「gitignore」ファイル(「exclude」と呼ばれます)には、役立つ可能性のあるコマンドラインがあります。

F:\prog\git\test\.git\info>type exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

それで....

git ls-files --ignored --exclude-from=.git/info/exclude
git ls-files -i --exclude-from=.git/info/exclude

git ls-files --others --ignored --exclude-standard
git ls-files -o -i --exclude-standard

うまくいくはずです。

(感謝ホンザイデ指摘コメント欄キャッシュされたファイルは含まれgit ls-files -o -i --exclude-from...ません。(なし) のみ含まれます。git ls-files -i --exclude-from... -o

前述の通り、ls-files マニュアルページは、--othersキャッシュされていない、コミットされていない、通常は無視されるファイルを表示するための重要な部分です。

--exclude_standard単なるショートカットではなく、すべての標準の「無視されるパターン」設定を含める方法です。

exclude-standard
標準の git 除外を追加します: .git/info/exclude.gitignore各ディレクトリに 、およびuser's global exclusion file


Git 2.44 (2024年第1四半期)、バッチ 13は、オプションが非推奨としてマークされていたドキュメントを明確にしました--exclude-per-directory。これにより、将来的にオプションを削除する計画があるのではないかと読者が混乱していましたが、これは私たちの意図ではありませんでした。

見るコミット 0009542(2024年1月24日)浜野ジュニオ(gitster(合併者
ジュニオ・C・ハマノ -- gitster--コミット bbc8c05、2024年2月2日)

ls-files: 個々のオプションに対して「非推奨」という動詞を避ける

いつ750951 翻訳(" ls-files: 他の --exclude* オプションについて案内する--exclude-standard", 2023-01-13, Git v2.40.0-rc0 --マージ記載されているバッチ #13) は、オプションの可視性を高めるためにドキュメントを更新し、オプションを「非推奨」として--exclude-standardマークしました。--exclude-per-directory

非推奨になったからといって、必ずしも後で削除される予定であるわけではないというのは技術的には正しいのですが、特に単に

The option Y can be used to achieve the same thing as the option
X much simpler. To those of you who aren't familiar with either
X or Y, we would recommend to use Y when appropriate.

これは、より詳細なオプションとオプション--exclude-standardの組み合わせの場合に特に当てはまります。詳細なオプションの一般的な組み合わせの 1 つは、前者を指定するだけで取得できることは事実ですが、必ずしもより詳細な制御が必要ないということではありません。--exclude-from--exclude-per-directory

オプションが非推奨であると述べるのではなく、--exclude-standardの説明でリーダーを推奨する理由を述べます。また、 が行うことをエミュレートするレシピを詳しく説明して、ユーザーが細かい調整を加えることができるようにします (「Git Porcelain と同じことを行いますが、core.excludes からグローバル除外ファイルを読み取りたくないという点が異なります」など)。--exclude-per-directory
--exclude-standard

git ls-files今ではマニュアルページ:

ディレクトリとそのサブディレクトリ。Porcelain コマンドの動作をエミュレートしようとしている場合は、--exclude-standard代わりに オプションを使用する方が簡単で徹底的です。

git ls-files今ではマニュアルページ:

--exclude-standard一般的に、除外ルールを Porcelain コマンドと同じ方法で適用したい場合はを使用できるはずです。--exclude-standardの指定をエミュレートするには--exclude-per-directory=.gitignore、 を指定してから次のように指定します。

  1. 構成変数によって指定されたファイルcore.excludesfile(存在する場合)、または$XDG_CONFIG_HOME/git/ignoreファイル。

  2. ファイル$GIT_DIR/info/exclude

オプションを介して--exclude-from=

おすすめ記事