web-dev-qa-db-ja.com

gitプロジェクトの 'bin'ディレクトリを無視する

私はこのようなディレクトリ構造を持っています:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Mainとtools、そして他のディレクトリの中には、どのレベルでも、無視したい(そしてその下にあるすべてのものも無視したい) 'bin'ディレクトリがあります。私は.gitignoreでこれらのパターンのそれぞれを試しましたが、どれもうまくいきません:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

誰かが私を手伝ってくれる?最初のパターン(うまくいくはずだと思うパターン)は、これを実行すればうまく機能します。

/main/**/bin/**/*

しかし、最上位ディレクトリごとにエントリを作成する必要はなく、新しいディレクトリを追加するたびに.gitignoreを変更する必要もありません。

これはWindows上で最新のmsysgitを使用しています。

編集: もう1つ、名前にサブストリング 'bin'を含むファイルとディレクトリがあります。それらを無視したくはありません:)

1058
Ben Hymers

バージョン1.8.2より前の**では、.gitignoreに特別な意味はありませんでした。 1.8.2以降、gitは0個以上のサブディレクトリを意味する**をサポートします( リリースノート を参照)。

ディレクトリツリーの現在のレベルより下の場所にあるbinというすべてのディレクトリを無視する方法は、次のパターンの.gitignoreファイルを使用することです。

bin/

manページには、類似のパターンを使用してfooというディレクトリを無視する例があります。

編集: あなたがもう追跡したくないあなたのgitインデックスの中に既にbinフォルダがあれば、それらを明示的に削除する必要があります。 Gitは、既に追跡されているパスを新しい.gitignoreパターンに一致させるという理由だけで追跡を停止しません。フォルダの削除( rm )をインデックスからのみ( --cached )再帰的に( -r )に実行します。ルートbinフォルダのコマンドラインの例:

git rm -r --cached bin
1590
CB Bailey

あなたの夢の.gitignoreは、

bin/

最上位レベル.

私はそれがgit初心者に言及する価値があると思います:

ファイルを既にチェックインしていて、それを無視したい場合は、後でルールを追加してもGit はそのファイルを無視しません。そのような場合、あなたはあなたの端末で以下のコマンドを実行することによって、最初にファイルをアントラックしなければなりません:

git rm --cached

そのため、.gitignoreを編集した後にローカルリポジトリ内のいくつかのディレクトリ(すでに存在する)を無視して追加したい場合は、ルートディレクトリでこれを実行します。

git rm --cached -r .
git add .

それは基本的にあなたのローカルレポを「リフレッシュ」し、無視されたファイルをステージング解除します。 

見る:

http://git-scm.com/docs/git-rm

https://help.github.com/articles/ignoring-files/ /

192
plancys

**は以前は正しく動作しませんでしたが、 git 1.8.2(2013年3月8日) から、明示的に言及されサポートされているようです:

.gitignoreおよび.gitattributes files 内のパターンは、0レベル以上のサブディレクトリ に一致するパターンとして、**/を持つことができます。

例えば。 "foo/**/bar"は、 "bar"自体または "foo"のサブディレクトリ内の "foo"と一致します。

あなたの場合、それはこの行が今サポートされるかもしれないことを意味します:

/main/**/bin/
69
VonC
[Bb]in/

大文字と小文字の両方に一致

45
wisbucky

ここでは触れていませんが、これは大文字と小文字が区別されるようです。/Binに変更すると、ファイルは期待どおりに無視されました。

31
Cory

[Bb]inは問題を解決しますが、... ここであなたが無視すべきもののより広範なリスト(GitExtensionによるサンプルリスト):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
24
Jaider

Visual Studio(.NET)ソリューション用の優れたグローバル.gitignoreファイルを探している場合-これを使用することをお勧めします。 https://github.com/github/gitignore/blob /master/VisualStudio.gitignore

知る限り、.NETプロジェクト向けの最も包括的な.gitignoreがあります。

17

手順1:ファイル.gitignoreに次の内容を追加します。

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

ステップ2:必ず有効にする

それでも問題が解決しない場合は、 .gitignore の設定では、元々 追跡されていない のファイルしか無視できないためです。いくつかのファイルがすでにバージョン管理システムに含まれている場合は、 .gitignore を変更することは無効です。この問題を完全に解決するには、 Git Bash を開く必要があります。 パッケージマネージャコンソール (以下のスクリーンショットを参照)リポジトリのルートフォルダで以下のコマンドを実行します。

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

PM console それで問題は完全に解決されます。

10
Bravo Yeung

お知らせとして。

.gitignoreが機能しないと考えた場合(foo/*フォルダを追加したが、git statusにはそのフォルダの内容がまだ変更されている、またはこのようなものとして表示されている場合)、このコマンドを使用できます。

git checkout -- foo/*

5
K-Gun

2.13.3以降では、.gitignoreファイルにbinだけを書き込んでもbinとそのすべてのサブディレクトリおよびファイルは無視される 

ビン

3

文字通り答えのどれも実際に私のために働かなかった。私のために働いていた唯一のものは(Linux上)でした:

**/bin
(yes without the / in the end)

git version 2.18.0 
2
AnthonyC

.gitignore内のパターンがスラッシュ/で終わっている場合は、ディレクトリとの一致のみが見つかります。

つまり、bin/はディレクトリbinとその下のパスに一致しますが、通常のファイルまたはシンボリックリンクbinには一致しません。


binのように、パターン にスラッシュ が含まれていない場合、Gitはそれをシェルglobパターン(greedy)として扱います。だから、単純な/binを使うのが最善です。

binはこの特定の問題に対する最良の解決策ではないでしょう。

0
prosti

.gitignoreファイルに**/bin /を追加するとうまくいきました(注:binフォルダはインデックスに追加されませんでした)。

0
Dhwaneel