Gitはサブフォルダーを無視します


437

.Netソリューションには多くのプロジェクトがあります。すべての「bin / Debug」および「bin / Release」フォルダー(およびそれらの内容)を除外しますが、「bin」フォルダー自体とそこに含まれるすべてのdllを含めます。

.gitignore with "bin /"は、 "Debug"フォルダーと "Release"フォルダーを無視しますが、 "bin"フォルダーに含まれているdllも無視します。

.gitignoreファイルの「bin / Debug」または「bin / Release」は、無視パターンを「Solution / Project / bin / Debug」として完全に修飾しない限り、ディレクトリを除外しません。私のソリューションの各プロジェクトにこの完全なパターンを含めるだけでなく、追加された新しいプロジェクトに追加する必要があります。

助言がありますか?


DLLを追加する理由 サードパーティのDLLを参照している場合は、すべてのプロジェクトが参照する共通フォルダーを追加するのが理にかなっています。
Paddy

6
Paddyの権利-それらがサードパーティのDLLである場合、それらはおそらくあなたのコードから離れて編成されるべきです。しかし、私にとっては、自分のビルド製品をチェックインしているように思えますが、これは一般的に希望する方法ではありません。gitを使用して、コードとビルド構成に完全に含まれている情報を追跡します。製品はまあ、製品です。それらを追跡することは問題を求めています-たとえば、コードを変更したが、新製品のビルドとチェックインを忘れた場合はどうなりますか?
Cascabel

サブフォルダの除外に問題がありました。ここに書かれている正確なサンプルを含め、すべてを試したが成功しなかった。最後に、フォルダーパターンの間に空白行を追加しました。おそらくエンコードの問題です。私はウィンドウを持っており、これをUTF8でエンコードしました。
RoadBump

回答:


550

ワイルドカードを試しましたか?

Solution/*/bin/Debug
Solution/*/bin/Release

gitのバージョン1.8.2では、**ワイルドカードを使用して任意のレベルのサブディレクトリを照合することもできます。

**/bin/Debug/
**/bin/Release/

8
それは機能しますが、たとえばSolution / Module / Projectに別のプロジェクトを含むサブフォルダーがある場合を除き、今のところ/ * / * / bin / Debugおよび/ * / * / * / bin / Debug(subフォルダ)。ディレクトリ構造の各レベルにワイルドカードサブフォルダーを追加する必要があるようです。
マルセル

1
@Marcel:まあ、gitは確かに、指示していないファイルを無視するつもりはありません-ワイルドカードに一致するものはすべて無視します。
Cascabel

ダブルスターはディレクトリの境界を越えると思います。すなわち、/ ** / bin / Debug
Trent

11
@Taras:残念ながらそうではありません。
Tuukka Mustonen 2012年

2
Visual Studioに関連するバグがありました**。今までに修正する必要があります。 リンク
ボガック2015年

106

トップレベルで.gitignoreを使用して、プロジェクト内の同じ名前のすべてのディレクトリを無視できます。例えば:

Debug/
Release/

これはすぐに更新されるので、git statusを実行すると表示されます。これらのディレクトリが無視に優先するため、これらのディレクトリがまだgitに追加されていないことを確認してください。


OP $GIT_DIR/.git/info/excludeファイルにパターンを追加することでも同じことができます。
Tim Henigan

1
違いは、.gitignoreファイルがコードに従うため、どこにでも適用されることです。除外ファイルはリポジトリのみにローカルですが、その特定のリポジトリにのみ適用されます。他のコミッターがこれらのディレクトリをコミットしたい理由がない限り、.gitignoreを使用することをお勧めします。
Andreas

1
これに関するもう1つの問題は、ソリューションにデバッグと呼ばれるプロジェクトがある場合です。このプロジェクトも無視されます。ソリューションはすべての回答とコメントの組み合わせだと思います-ソリューションを再構築して、共通または参照されるdllを別のフォルダーに保持し、「bin /」を無視するか、ワイルドカードを使用します。
マルセル

16
+1ディレクトリがまだgitに追加されていないことを確認するためのコメント。すでにgitのを追加した場合は、実行しますgit rm -rf DirectoryName/
levibostian

57

質問はすべてのサブディレクトリを無視することを求めているわけではありませんが、どこにも答えが見つからなかったため、投稿します*/*


1
明確にできる可能性はありますか?私はこれについてあらゆる種類のバリエーションを試しましたgit addが、ディレクトリとそのディレクトリのすべてのサブディレクトリにあるすべてのファイルを無視することはできません。私が試してみましたdirname/dirname/*dirname/**dirname/*/*でも絶望に、dirname/*/*/*dirname/*/*/*/*dirname/*/*/*/*/*
クリス、

3
*/*現在のディレクトリにあるファイルではなく、すべてのサブディレクトリを無視します。特定のサブディレクトリを無視することは、通常のgitignoreの使用法です。dirnamedirname/dirname/*私のためにすべての作業。そのディレクトリに何かがすでにコミットされていますか?
mgold 14年

これは、ブランドの新しいレポです-私は、全体の削除.git、その後、試行間のディレクトリをgit init、次にgit add --all .(もせずに試してみました--all)、1.9.4.msysgit.1を使用します。名前付きディレクトリの下の空でないサブディレクトリはすべてインデックスに追加されます(TortoiseGitおよびでチェックされますgit status)。.gitignore開始時に関連する行は!ありませんが、いくつかの競合があるはずです。今のところフォルダを削除することで解決しましたadd。これは、診断に必要な情報を提供するためにもう少し掘り下げる必要があるものだと思います。構文を誤解していないことを安心してくれてありがとう。
Chris

フォルダー内のフォルダーを無視する必要があるが最初のフォルダーは無視する必要がある場合はどうなりますか?同様にフォーラム/ ignorethisfolder / ...しかし、彼はフォーラムと呼ばれるフォルダを無視することはない
ジャン・カルロスRacoski

これは、名前がドットで始まるディレクトリを無視する場合には機能しません。" /。 "および "。* / *"も機能しません。
トニー

44

上記のすべての回答は有効ですが、そのディレクトリからリポジトリにファイルを追加すると、そのファイルを含むディレクトリ/サブディレクトリを無視できなくなることを私が言及していないと思います(gitはそのディレクティブを無視します) )。

追加済みのファイルを無視するには

$ git rm --cached

それ以外の場合は、最初にリポジトリのターゲットディレクトリからすべてのファイルを削除する必要があります。その後、そのフォルダーを無視できます。


12
git rm --cachedを使用して、追跡を解除したり、履歴とは無関係にしたいが、ファイルをローカルにそのまま保持したい場合。
Erik Reppen、2015年

29

.gitignoreファイルに正しいエントリを追加する以外に、すでにリポジトリに追加されているものを無視しようとする場合はgit rm -r /path/to/dir、.gitignoreファイルにディレクトリを追加する前に、それを実行してコミットする必要があります。そうでなければ、gitが無視する唯一のものは、ignoreディレクティブです。


19

これを自分のマシンで動作させる唯一の方法は、次のようにすることでした。

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

含める各レベルのコンテンツを明示的に許可する必要があることに注意してください。したがって、テーマの下に5つのサブディレクトリがある場合でも、それを詳しく説明する必要があります。

これは@Yarinのコメントからです:https : //stackoverflow.com/a/5250314/1696153

これらは有用なトピックでした:

私も試しました

*
*/*
**/**

そして **/wp-content/themes/**

または /wp-content/themes/**/*

それも私にとってはうまくいきませんでした。試行錯誤がたくさん!


13

コンテンツとサブディレクトリを除外するには:

**/bin/*

すべてのサブディレクトリを除外するだけでコンテンツを取得するには、「/」を追加します。

**/bin/*/

9

すべてのサブディレクトリを無視するには、単に次のように使用できます。

**/

これはgitのバージョン1.8.2以降で機能します。


8

/binディレクトリにあるファイルの追跡を継続しながらすべてのサブフォルダーを無視する一般的な方法は、プロジェクトの.gitignoreファイルに次の行を追加することです。

bin/*/*

特定の名前付きサブフォルダーのみを無視したい場合は、次のようにします。

bin/Debug/*
bin/Release/*

nb。binディレクトリがプロジェクトのルートにない場合(.gitignoreファイルとともに)、たとえばの代わりに。bin/*/*あなたは必要かもしれませんpath/to/bin/*/*

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.