追跡されていないファイルのリストに.gitignoreが表示されないようにするにはどうすればよいですか?


971

私はちょうどgit init私の新しいプロジェクトの根本でやった。

次に、.gitignoreファイルを作成しました。

ここで、と入力するとgit status.gitignoreファイルが追跡されていないファイルのリストに表示されます。何故ですか?


13
git add self && git commit -m "-1 for reverting existential depression" && git remote rm HEAD
Alastair 2013年

1
.git /フォルダーを無視して「.gitignore」に配置できますか?
Timo

2
Linuxのホームフォルダーにグローバルな「gitignore」を作成してそこに保存できます。git config --global core.excludesfile〜/ .gitignore_global
Timo

14
私は検索how to gitignore .gitinore fileしてここに来ましたが、質問と受け入れられた回答はタイトルとはあまり関係がありません。タイトルが改善される可能性があります。
m.rufca

6
.gitignoreを無視する使用例があります。私のチームのワークフローでは、ローカルの開発環境用に一連のファイルを変更する必要がありますが、コミットするべきではありません。ワークフローはアーキテクチャを改善することで改善できるかもしれませんが、手に負えません。その間、gitがそれらのファイルに注意を払うようにすることには責任があります。したがって、ローカルでのみそれらをgitignoreしたいと思います。また、.gitignoreをチームと共有してはならないため、コミットするリスクを負いたくありません。
マーク

回答:


959

.gitignoreそれは確かに、追加され、中にコミットしなければならないように、ファイルには、リポジトリにする必要がありますgit status示唆しています。リポジトリツリーへの変更をマージできるように、リポジトリツリーの一部である必要があります。

したがって、リポジトリに追加してください。gitignoredにしないでください。

本当に必要な場合は、コミットしたくない場合.gitignore.gitignoreファイルに追加できます。ただし、その場合は.git/info/exclude、.gitignoreと同じように機能するが、.gitフォルダー内にあるため「git status」に表示されない特別なチェックアウトローカルファイルに、ignore を追加する方がおそらく良いでしょう。

https://help.github.com/articles/ignoring-filesも参照してください


17
これは、追跡されるファイルではなく、リポジトリのメタデータの一部ではありませんか?
エンドリス

13
リポジトリメタデータはリポジトリに対してローカルです。たとえば、コミットフックをリポジトリに追加し、誰かがリポジトリを複製した場合、たとえば、コミットフックは取得されません。
August Lilleaas

91
@wukong、あなたがチームで働いているなら、誰もが同じファイルのセットを無視すべきではないのですか?そのため、.gitignoreファイルがリポジトリに追加されます。プロジェクトの一部としてデプロイする必要があると言う人はいません。
ライアンランディー

13
@endolithとwukongリポジトリ内のファイルである必要はありません。無視設定は、さまざまな場所で使用できます。GitHubにはすばらしい記事があります。help.github.com/ ignore-filesグローバルな無視設定をどこにでも持つことができ、リポジトリの.gitメタデータにリポジトリ固有の設定を含めることができます。
Boushley

6
@ deed02392これらの無視ファイルを使用する場合は、ファイルに何を入れるかを判断する必要がありますが、それでもいくつかの優れた用途があります。たとえば、Vimを使用しているため、グローバルgitignoreで* .swpファイルを無視としてマークしています。これにより、各プロジェクトに追加する必要がなくなり、vimを使用したことがない人も心配する必要がなくなります。
Boushley 2013

282

無視されたファイルのリストをGitツリーの外部に保存する場合は、.git / info / excludeファイルを使用できます。リポジトリのチェックアウトにのみ適用されます。


19
+1、これはemacs *〜バックアップファイル、OS Xからの.DS_Storeなど、プロジェクトに関係のない無視に最適です。
8月のリレアス

38
@AugustLilleaas私は個人的に、これらのタイプの{editor、platform}固有のファイルを~/.gitignore入れて、作業しているリポジトリでは無視されるようにします。
マイケル・マイア

22
ファイルを追跡したら、を使用git update-index --assume-unchanged <file>して、リポジトリを変更せずに変更の追跡を停止できます。これは、ローカルで変更を加える必要があるが、他の誰もがリポジトリにコミットされたものを見たくない大規模な共有プロジェクトで非常に役立ちます。blog.pagebakers.nlを
Chris Esplin

6
@AugustLilleaas:ユーザーごとのgitignoreはそのユースケースに適しています。
メカニカルカタツムリ

3
サーバー上のsvnレポの他のユーザーが正確に.gitignoreがチェックインたくないので、このヒントに感謝、私はのgit - SVNを使用しています。
enorl76

74

実際にファイルに行.gitignoreを入れることができ.gitignoreます。これにより、.gitignoreファイルはgitによって無視されます。これは良い考えではないと思います。無視ファイルは、バージョン管理および追跡する必要があると思います。私はこれを完全にするためにそこに置いています。


7
私のために働いた!バージョン1.5.6.5。私は1800の情報にも同意しますが、これは良い考えではありませんが、特定のコンテキストでは問題ないと思います(たとえば、git-svnリポジトリーを使用していて、git-ishファイルをsvnに移動したくない場合)。excludesファイルの方が良いでしょう。
J. Polfer、2010

4
@ehsanul-ファイルを追跡しないでください(ファイルを追加またはコミットしてはなりません)。追跡を解除できます。これはおそらくgitのみの環境では優れたアイデアではありませんが、たとえばgitをsubversionリポジトリのスマートクライアントとして使用する場合(他の人が知らないうちに<マニアックな笑い声>)-このようなトリックは素晴らしいです。
Tomasz

2
@IshanSrivastavaファイルはすでに追跡されています。実行してみてくださいgit rm --cached .gitignore
ギデオン

51

すべてのリポジトリに.gitignore自動的に適用されるグローバルユーザーgit ファイルを使用することもできます。これは、IDE、エディタファイル(例えばために有用であるとのVim用のファイル)。OSに合わせてディレクトリの場所を変更します。swp*~

  1. ~/.gitconfigファイルに追加:

    [core]
    excludesfile = /home/username/.gitignore
    
  2. ~/.gitignore無視するファイルパターンを含むファイルを作成します。

  3. ドットファイルを別のリポジトリに保存して、バックアップを作成します(オプション)。

リポジトリをコピー、初期化、または複製するときはいつでも、グローバルgitignoreファイルも使用されます。


6
エディターが。*。swp(VIM)や._ *(TM)などの一時ファイルを残している状況では、これらのルールをすべてのgitリポジトリに継続的に追加するのは意味がないため、これが最良の解決策であると思います。そして、異なるIDEを持つ他のユーザーにこれらのファイルをチェックさせる。
トーマスハンターII

1
これは、どのブランチにもプッシュされるべきではない無視のために見事に機能します。もちろん、 'username'を実際のユーザー名に置き換え、すでに.gitconfigがある場合は2つ目の[core]セクションを追加しないでください。excludesfile行を既存の[core]セクションの下に配置するだけです。
エメリー

47

誰かがすでに.gitignoreリポジトリにa を追加しているが、それに変更を加えてそれらの変更を無視したい場合は、次のようにします。

git update-index --assume-unchanged .gitignore

ソース


5
悪い考え、存在する理由.git/info/excludesがあります。
Arrowmaster

6
理由もあると思い--assume-unchangedます。なぜ一方が他方より優れているのですか?
Leif Gruenwoldt、2011

9
また.git/info/excludes、ファイルがすでに追跡されている場合、btw は機能しません。
Leif Gruenwoldt、2011

これは、すでにコミットされていて、変更をコミットしたくない.gitignoreで本当に役に立ちました。Ubuntu 11.04リポジトリからgit 1.7.4.1を実行しています。ヘルプページでこれをupdate-indexに追加しています。「このオプションは、追跡されたファイルのコミットされていない変更を無視するための大まかなファイルレベルのメカニズムとしても使用できます(追跡されていないファイルに対して.gitignoreが行うのと同様)。インデックスでこのファイルを変更する必要がある場合、Gitは(正常に)失敗しますたとえば、コミットをマージするとき、つまり、追跡されていないファイルが上流で変更された場合、手動で状況を処理する必要があります。」
YonahW

私はこの回答に投票します。一般に、マスターリポジトリの初期状態にこのアクションが必要であり、git機能の利点を維持するためです。このファイル(期間)を無視する十分な理由はありません
Lazaros Kosmidis

37

.gitignoreファイルを追加してコミットすると、「追跡されていないファイル」リストに表示されなくなります。

git add .gitignore
git commit -m "add .gitignore file"
git status

20

他の誰かが私たちと同じ苦痛を持っている場合に備えて。すでにコミットされているファイルを除外したかったのです。

この投稿はもっと便利でした: .git / info / excludeの操作が遅すぎます

特に、ファイルを無視する必要があるのは、実際にはコマンドgit removeを使用することです。git rmhttp://www.kernel.org/pub/software/scm/git/docs/git-rm.html)を参照してください。

あなたは行くことによってそれをテストします

git rm --dry-run *.log
(すべてのログファイルを除外する場合)

これは、実行した場合除外されるものを出力します。

その後

あなたは行くことによってそれを実行します

git rm *.log
(または任意のファイル名パス/式)

次に*.log.gitignoreファイルに行を追加します。


4
もちろん、これをフォローアップして、関連するパターン(* .log)を.gitignoreに追加することもできます。git statusそうすれば、将来それらが表示されても混乱することはありません。
Patrick O'Leary、2010

2
私の問題はOPと同じではありませんでしたが、.gitignoreに変更を加えた後、RMを使用してリポジトリを「クリーンアップ」する必要があることを知らせてくれてありがとう(ファイルがすでにコミットされている場合)。Noobエラー、私は知っていますが、これは私が個人的にそれを言及するのを見た最初の場所でした。
Mike

フィードバックをお寄せいただきありがとうございます。ええ、それで私はそれを書いたのです。ここに来て、これを解決するために長い道のりを歩んできたので、それを書くのは良いことだと思いました。:)
進化

16

もちろん、.gitignoreファイルは追跡されていないため、ステータスに表示されます。gitは、このファイルをおいしい新しいファイルと見なしています。

ただし、.gitignoreは追跡されないファイルであるため、.gitignoreに配置すると、gitによって無視される候補になります。

したがって、答えは簡単です。次の行を追加するだけです。

.gitignore # Ignore the hand that feeds!

あなたの.gitignoreファイルに!

そして、8月の応答とは逆に、.gitignoreファイルリポジトリにある必要はありません。ちょうどそれが起こることができ、多くの場合、便利である、こと。そして、これが.gitignoreが.git / info / excludeの代わりとして作成された理由であり、リポジトリで追跡するオプションがありません。とにかく、.gitignoreファイルの使い方は完全にあなた次第です。

参考として、kernel.orgのgitignore(5)のマンページを確認してください。


15

アイデアは、プロジェクトに固有のファイルをファイルに入れ.gitignore、(すでに述べたように)それをリポジトリーに追加することです。たとえば.pyc.oファイル、テストスイートが作成するログ、いくつかのフィクスチャなど。

独自のセットアップで作成されたが、必ずしもすべてのユーザーに表示されるとは限らない.swpファイル(vim、非表示のecpliseディレクトリなどを使用する場合のファイル)の場合は、.git/info/exclude(前述のように)使用する必要があります。


14

まず第一に、他の多くの人がすでに言ったように、あなた.gitignoreはGitによって追跡されるべきです(したがって無視されるべきではありません)。その理由を説明させてください。

(TL; DR:.gitignoreファイルをコミットし、グローバル.gitignoreを使用して、IDEまたはオペレーティングシステムによって作成されたファイルを無視します)

Gitは、おそらくすでにご存じのとおり、分散バージョン管理システムです。つまり、異なるバージョン間で開発を切り替えることができ(開発が異なるブランチに分岐した場合でも)、複数の開発者が同じプロジェクトで作業することもできます。

.gitignoreスナップショットを切り替えると、追跡にもメリットがありますが、コミットする最も重要な理由は、同じプロジェクトで作業している他の開発者とファイルを共有することです。Gitにファイルをコミットすることで、他のコントリビューターは.gitignoreリポジトリを複製するときに自動的にファイルを取得するため、コミットしてはならないファイル(ログファイル、キャッシュディレクトリ、データベース資格情報など)を誤ってコミットすることを心配する必要はありません。など)。また、ある時点でプロジェクト.gitignoreが更新された場合、ファイルを手動で編集する代わりに、変更を取り込むことができます。

もちろん、無視したいファイルやフォルダがいくつかありますが、それらはあなたに固有であり、他の開発者には適用されません。ただし、これらはプロジェクトのに含めないでください.gitignore。ファイルとフォルダーを無視できる場所は他に2つあります。

  • オペレーティングシステムまたはIDEによって作成されたファイルとフォルダは、グローバルに.gitignore配置する必要があります。利点は、これ.gitignoreがコンピューター上のすべてのリポジトリーに適用されるため、すべてのリポジトリーでこれを繰り返す必要がないことです。また、別のオペレーティングシステムやIDEを使用している可能性があるため、他の開発者とは共有されません。
  • プロジェクトの.gitignoreやグローバル.gitignoreに属していないファイルは、で明示的なリポジトリ除外your_project_directory/.git/info/excludeを使用して無視できます。このファイルは他の開発者と共有されず、その単一のリポジトリに固有です

グローバルの素晴らしい言及.gitignore
グルーバー

初期設定後、.gitignoreファイルは無視する必要があるので、偶発的な変更はありません。もう変更できないという意味ではありませんが、ある意味で事故から守られています。そのファイルでの事故は、混乱を招いたり、作業を危険にさらしたりする可能性があるため、「シーリング」(それ自体を無視する)も検討する必要があります。
Sasa

@Sasa .gitignoreは、Gitでまだ追跡されていないファイルを無視する場合にのみ機能します。すでに追跡されているファイルをに追加しても、.gitignoreそのファイルへの変更をコミットすることはできます。これが可能だったとしても、.gitignoreGitに自分自身を無視するように指示するときに、変更をどのようにコミットしますか?
Nic Wortel 2016

@Nic-私は、このスレッドの下部にある個別の返信@で、私の見解に詳細な説明を渡しました。
Sasa

12

次の「問題」に注意してください。ディレクトリを追加したいが、それらのディレクトリ内にファイルを追加したくない場合があります。簡単な解決策は、次の内容で.gitignoreを作成することです。

*

これは、ディレクトリが(リポジトリに期待どおりに)追加されなかったことに気付くまで正常に機能します。その理由は、.gitignoreも無視されるため、ディレクトリが空になるため、次のようにする必要があります。 :

*
!.gitignore

9

これは、現在のディレクトリでのみ機能Gitし、リポジトリのすべてのファイルを無視するように見えます。

このファイルを更新

.git/info/exclude 

ワイルドカードまたはファイル名

*pyc
*swp
*~

5

すでに.gitignoreをチェックインしていて、それに対する変更を無視したい場合は、次の回答を確認してください。

次のコマンドを使用してみてください:

git update-index --assume-unchanged FILENAME_TO_IGNORE

これを元に戻すには(変更をコミットしたい場合)、以下を使用します。

git update-index --no-assume-unchanged

更新

現在のディレクトリの下にある「変更されていない」ファイルをリストする方法は次のとおりです。

git ls-files -v | grep -E "^[a-z]"

通り-vのオプションは、「変わらないと仮定」ファイルのための小文字を使用します。


4

私の場合、既存のファイルを除外します。.gitignoreの変更のみでは機能しません。私はこれらのステップに従いました:

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

このようにして、除外したいファイルをキャッシュから削除し、それを.gitignoreに追加しました


私にとって最善の解決策。git addを使用することもできます。2番目に、そのgit commit -m "fixing .gitignore"の後
ブレインレイ2015

3

gitリポジトリのベースディレクトリに移動し、次のコマンドを実行します。

echo '\\.*' >> .gitignore

Macを使用している場合の厄介な.DS_Storeを含め、すべてのドットファイルは無視されます。


4
私はそれをしません。必要なドットファイルがあるかもしれません。代わりに、文字どおり.gitignoreと.DS_Storeを追加します。
Edward Falk 2013年

2

Eclipseによって作成されたIDE固有のフォルダーがおそらくNetBeansまたは別のIDEと異なるため、エンドユーザーがGitに「.gitignore」ファイルを無視させたい可能性は十分にあります。したがって、ソースコードIDEを拮抗的に保つことで、個々の開発者が異なるIDEを使用している可能性があるため、チーム全体で共有されないカスタムgitを無視することが容易になります。


1

.gitignore他のファイルを無視することです。gitはファイルに関するものなので、これはファイルを無視することに関するものです。ただし、gitはファイルを処理するため、このファイルは他のファイル名をリストするメカニズムとして存在する必要があります。

それが呼び出された場合、それは.the_list_of_ignored_filesもう少し明白かもしれません。

類推は、したくないTo Doアイテムのリストです。あなたがそれらをどこかにリストしない限り、あなたはそれらについて知らないであろうある種の「やること」リストです。


1

.gitignoreを無視することが非常に役立つ状況があると思います。たとえば、同じコードベースで作業している複数のチームや大きなチームがある場合です。その場合、特定の規則が必要です。これらの規則の1つは、gitリポジトリで無視されるものに関するものです。通常は、IDEまたはOSによって作成されたファイルやディレクトリ、一部の生成されたログなどを無視することです。

ただし、.gitignoreファイルに従来とは異なる変更を導入する傾向がある力があります。.gitignoreファイルには、さらに、または他のいくつかのケースで使用されるツールで、誤って、無責任な人物によって変更することができます。

これに対抗するには、次のようにします。

  1. 最初の.gitignoreは、チームでの慣習を反映する必要があります。
  2. プッシュされた後、.gitignoreエントリを追加して.gitignoreを保護し、その変更を再度プッシュする必要があり.gitignoreます。ファイルはこのようにして「シール」されます。

封印された.gitignoreファイルは、そのチェンジャーをチームの他のメンバーに伝達することなく、ローカルでのみ変更できます。ただし、変更の「封印解除」が可能な場合は、チーム全体で変更が広く合意されている場合は、変更してから再度「封印」してください。それは意図的に行われたのではなく、誤って行うことはできません。

悲しいことに、あなたは愚かさから100%保護することはできませんが、このようにして、愚かなことが起こらないようにするためにできることはすべて実行しました。

非常に優れた専門家を擁する比較的小規模なチームの場合、これは重要ではありませんが、そのような人たちでも、心配することを1つ少なくしていただければ幸いです。

使用すると、.git/info/excludeあなただけのミスをしないように**独自のAをカバーし、インフラストラクチャの設定については何もできないときにクールです。

何が正しいか、何が悪いかという立場から、私は.gitignoreエントリを.gitignoreファイル内に持つことを投票します。


0

厄介な.DS_Storeファイルの無視を設定するのに最適な場所はファイルにあることがわかりました.git/info/exclude

IntelliJは、gitリポジトリをセットアップすると、自動的にこれを行うようです。


1
ユーザーのファイルが.DS_Storeを無視するには良い場所でしょうグローバル無視
マックスNanasy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.