私は Git を使い始めたばかりですが、次のような問題があります。
私のプロジェクトのソースツリー:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
ベンダー ブランチにコード (現在は MEF) があり、それをそこでコンパイルしてから、参照を移動して、/src/refs
プロジェクトが参照を取得する場所にします。
私の問題は、と を.gitignore
無視するように設定していることです。 を実行して無視されたファイルを強制的に追加することはできますが、問題は、無視されるファイルが存在するかどうかをリストする方法がわからないことです。*.dll
*.pdb
git add -f bar.dll
無視されたファイルをリストして、追加を忘れないようにしたいです。
のマニュアルページを読みましたがgit ls-files
、うまく動作しません。 は私がgit ls-files --exclude-standard -i
望む動作をするはずです。何が足りないのでしょうか?
ベストアンサー1
ノート:
- 小白の答えよりシンプルです (git1.7.6+):
git status --ignored
(詳細は「.gitignore
git-status にファイルの影響を無視するように指示する方法はありますか?)
また興味深いのは(クワーティの答え)を使用することもできますgit check-ignore -v
コマンド、少なくとも Unix では ( CMD Windowsセッションでは動作しませんが、Windows CMD git bash セッションでは動作します)
git check-ignore -- *
git check-ignore -v -- *
2番目は、.gitignore
gitリポジトリでファイルを無視する実際のルールを表示します。Unix
では、「現在のディレクトリ内のすべてのファイルに再帰的に展開するものは何ですか?" および bash4+:
git check-ignore **/*
(またはfind -exec
コマンド)
注記:https://stackoverflow.com/users/351947/Rafi B.示唆するコメント欄(危険な)グロブスターを避けるには:
git check-ignore -v $(find . -type f -print)
ただし、サブフォルダーのファイルは必ず除外してください.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
、 を指定してから次のように指定します。
構成変数によって指定されたファイル
core.excludesfile
(存在する場合)、または$XDG_CONFIG_HOME/git/ignore
ファイル。ファイル
$GIT_DIR/info/exclude
。オプションを介して
--exclude-from=
。