Gitで特定のファイルを無視する方法


731

ファイルを含むリポジトリがありますHello.java。コンパイルすると、追加のHello.classファイルが生成されます。

私はのためのエントリを作成Hello.class.gitignoreのファイルを。ただし、ファイルは追跡されているように見えます。

どうすればGitを無視させることができHello.classますか?


8
「動作しない」とはどういう意味ですか?Hello.classをリポジトリにすでに追加した可能性がありますか?gitignoresは、既に追跡されているコンテンツには影響しません。たとえば、stackoverflow.com
questions /

回答:


809

問題は、.gitignore以前に(によってgit add)追跡されなかったファイルのみを無視することです。実行git reset name_of_fileしてファイルをアンステージし、保持します。(プッシュした後)リポジトリから特定のファイルも削除する場合は、を使用しますgit rm --cached name_of_file


190
コマンドgit rm --cached name_of_fileはファイルをgitリポジトリから削除します。.gitignoreファイルに追加したとしても。それはそれが削除されていることを無視していません。
OrwellHindenberg 2015年

4
この場合、OPはこれを望んでいたようです。
OndrejSlinták2015年

40
あなたのソリューションが@ Kohan95で機能してうれしいです!ただし、この質問は選択した回答に基づいて名前を変更する必要があります。私のコメントは、コマンドが何をしているのか知らない開発者への警告にすぎません。
OrwellHindenberg 2015年

91
git reset name_of_file追跡を削除し、ファイルを削除しません。
Cees Timmerman、2015年

7
git rm --cached <name_of_file>を試しました。リポジトリ内のファイルは削除されましたが、.gitignoreファイル内にあるため、ローカルコピーは削除されませんでした。さらに、ディレクトリを追加するには、末尾にスラッシュ「/」を付ける必要があります。私は、誰かがチェックインした ".idea"であるrubyプロジェクトのRubymineのconfigディレクトリを削除していました。ファイルに「.idea /」と「git rm --cached -r .idea」を入れて、ディレクトリとその下のすべてを削除します(gitはバージョンではなく、ファイルのみのバージョンであるためです)
Doug Noel

222

新しいファイルを無視する方法

世界的に

無視したいパスをファイルに追加し.gitignoreます(そしてそれらをコミットします)。これらのファイルエントリは、リポジトリをチェックアウトする他のユーザーにも適用されます。

ローカルで

無視したいファイルへのパスをファイルに追加し.git/info/excludeます。これらのファイルエントリは、ローカルの作業コピーにのみ適用されます。

一時的に変更されたファイルを無視する方法

変更されたファイルが変更済みとしてリストされるのを無視するには、次のgitコマンドを使用できます。

git update-index --assume-unchanged <file>

その無知を元に戻すには、次のコマンドを使用します。

git update-index --no-assume-unchanged <file>

現在のAPIキーを保持するファイルがgithubにプッシュされるのを防ぐのに最適です!
ジムインテキサス2015年

1
@Xmanなぜ一時的だと言ったのですか?私はあなたがlocalgit ignore について述べた手順を実行し、システムを再起動しましたが、まだ正常に動作していることがわかります。
Vivek Vardhan

1
便利なupdate-indexトリックに感謝し.gitignoreます。ファイルの変更を回避するために完全に最適です。ファイルはGitによって追跡されます。
Thomas P.

@mcbjam特別なgit ignoreコマンドはありません。作業コピー内の適切な場所にある.gitignoreファイルを編集します。次に、この.gitignoreを追加してコミットする必要があります。そのリポジトリを複製する人は全員、それらのファイルを無視することになります。
Xman Classical

@Vivek Vardhan git update-index --assume-unchangedは、インデックスの一時的なマスクのようなものです。オフにするまで有効です。私のポイントをより明確にするために、インデックスは最初に(つまり、git read-treeの直後に)読み込まれたばかりのtree-ishからのすべてのファイルを「含んでいます」。インデックスエントリは、実際の削除とは異なります。
Xmanクラシック

150

次の行を.gitignoreに追加します。

/Hello.class

これにより、gitからHello.classが除外されます。すでにコミットしている場合は、次のコマンドを実行します。

git rm Hello.class

すべてのクラスファイルをgitから除外する場合は、次の行を.gitignoreに追加します。

*.class

32
Hello.classto .gitignoreを追加するとHello.class、サブディレクトリで呼び出されたファイルは無視されます。ファイルHello.classと同じディレクトリにあるファイルのみを無視する場合は、代わりに行を.gitignore使用してください/Hello.class
ndim

.gitignoreファイルはどこに置きますか?
CodyBugstein、2015年

6
@Imrayあなたは.gitignoregitプロジェクトのどこにでも置くことができます-パスがで始まる場合/、それは.gitignoreファイルの場所に相対的です。それ以外の場合は、現在のディレクトリとその子孫ディレクトリにあるファイルを再帰的に参照します。
Armand

109

1).gitignoreファイルを作成します。これを行うには、.txtファイルを作成して拡張子を次のように変更します。

ここに画像の説明を入力してください

次に、名前を変更して、コマンドウィンドウに次の行を書き込みます。

 rename git.txt .gitignore

git.txt作成したファイルの名前はどこですか。

次に、ファイルを開いて、リポジトリに追加したくないすべてのファイルを書き込むことができます。たとえば、私の場合は次のようになります。

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

これを取得したら、Gitリポジトリに追加する必要があります。リポジトリがある場所にファイルを保存する必要があります。

次に、Git Bashで次の行を記述する必要があります。

git config --global core.excludesfile ~/.gitignore_global

リポジトリがすでに存在する場合は、次のことを行う必要があります。

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

手順2が機能しない場合は、追加するファイルのルート全体を記述してください。


プロンプトで「copy con .gitignore」コマンドを使用し、CTRL + Zを押して、Windowsエクスプローラーなしでファイルを直接作成できます。
heringer

61

無視する:

git update-index --assume-unchanged <path/to/file>

無視を取り消すには:

git update-index --no-assume-unchanged <path/to/file>

6
私はこれを問題の解決策としてチャートのトップにしたいと思います...それは非常にシンプルでエレガントです
user1457958

「それは非常にシンプルでエレガントです」— 本当にではありません: '変更しないことを無視メカニズムのために乱用するべきではありません。「ファイルシステムの操作が遅いことを知っています。これらのパスを変更しないことをGitに約束します ...」特に、それは約束ではありません ... Gitがパスを決定できる場合、Gitは常にこれらのパスが変更されていないと見なします…追加のlstat(2)コストを発生させることなく変更れ、パス変更れたことを報告する権利を留保します(… git commit -a変更をコミットするのは自由です)。
クリス

47

以下の方法を使用して、追跡されたファイルの変更を無視する/無視しないことができます。

  1. 無視する場合: git update-index --assume-unchanged <file>
  2. 無視されたファイルを元に戻すには: git update-index --no-assume-unchanged <file>

4
それはすべてのファイルに適用されますか?これらのコマンドを単一のファイルに適用して無視/無視を解除する方法は不明です。
javadba

@kapilついに!! 1兆のgitコマンドのバリエーションの中で実際に機能するもの!すべてのビルドの後に表示され続けるいくつかの愚かなbuild.xmlファイルを無視するためにすべての回答を試してみました...ありがとう!
killjoy

1
しないでください:「仮定の変更は、無視メカニズムのために悪用されるべきではありません。「ファイルシステムの操作が遅いことを知っています。これらのパスを変更しないことをGitに約束します ...」特に、それは約束ではありません ... Gitがパスを決定できる場合、Gitは常にこれらのパスが変更されていないと見なします…追加のlstat(2)コストを発生させることなく変更れ、パス変更れたことを報告する権利を留保します(… git commit -a変更をコミットすることは自由です)。
クリス

22

.gitignore.gitがあるディレクトリにを作成します。改行で区切られたファイルをリストできます。ワイルドカードを使用することもできます。

*.o
.*.swp

3
ツール固有のパターン(つまり、一時的なVimファイル)を.gitignoreファイルに配置しないことをお勧めします(そのツールがプロジェクトで必須でない場合)。お気に入りのツールのパターンをユーザーごとの除外ファイル(set core.excludesFile)に入れることができます。それらはすべてのリポジトリで機能します。たとえばgit config --global core.excludesFile "$HOME/.git-user-excludes"、それらをそのファイルに入れます。
Chris Johnsen

@クリス:先端をありがとう。しかし、私はちょうど何が良い:)私の心に来ていないがためにそれを書いた
末端

1
@ChrisJohnsen「ツール固有?」vim用?? 私は...それはvimのスワップファイルを除外しても安全だと思う
javadba

16

公式GitHubサイトから:

既にファイルをチェックインしていて、それを無視したい場合、後でルールを追加しても、Gitはファイルを無視しません。このような場合は、ターミナルで次のコマンドを実行して、最初にファイルの追跡を解除する必要があります。

git rm --cached FILENAME

または

git rm --cached .

12

あなたは次のようなものを書くべきです

*.class

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


4
@AgentZebraにエントリ*.classを追加して、.gitignore末尾がで終わるすべてのファイルをgitに無視させる必要があります.class
KingCrunch

7

無視するファイルをfileに追加します.gitignore

*。クラス

* .projects

* .prefs

*。事業



5

既にファイルをコミットしていて、.gitignoreファイルに追加してそれを無視しようとしている場合、Gitはそれを無視しません。そのためには、まず以下のことを行う必要があります。

git rm --cached FILENAME

プロジェクトを新しく開始し、いくつかのファイルをGit ignoreに追加する場合は、次の手順に従ってGit ignoreファイルを作成します。

  1. Gitリポジトリに移動します。
  2. .gitignoreファイルを作成する「touch .gitignore」と入力します。

3

(.gitignoreの代わりに).gitattributesを使用して、ファイルタイプ全体を除外することもできます。ファイルは一目瞭然ですが、参照のためにここに内容を貼り付けています。最後の行に注意してください(* .classバイナリ):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary

2

.git / info / excludeに次の行を追加します:
Hello.class


フォルダ内のファイルを変更することになっています.gitか?
Peter Mortensen

たぶん、.gitの下にあるファイルを手動で操作するのはお勧めできません。
mgyky

2

「dump.rdb」ファイルにも同様の問題がありました。
このファイルをさまざまな方法で.gitignoreファイルに追加してみましたが、1つの方法しか機能しませんでした。

.gitignoreファイルの最後にファイル名を追加します

注:他の場所へのファイルの追加は機能しませんでした。

たとえば、https//gitlab.com/gitlab-org/gitlab-ce/raw/b3ad3f202478dd88a3cfe4461703bc3df1019f90/.gitignoreをご覧ください。


2

このWebページは、を使用する場合に役立ち、時間を節約でき.gitignoreます。

通常はGitリポジトリにプルしたくない特定のファイル/フォルダー(たとえば、IDE固有のフォルダーや構成ファイル)を使用して、さまざまなIDEおよびオペレーティングシステム用の.gitignoreファイルを自動的に生成します。


1

私はこれを試しました-

  1. 無視したいファイルのリスト

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. 手順1の内容をコピーして、.gitignoreファイルに追加します。

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. 検証

git status .gitignore

同様に、gitステータスで無視したいディレクトリとそのすべてのサブディレクトリ/ファイルを追加してdirectoryname/*、このコマンドをsrcディレクトリから実行できます。


1
  1. .gitignoreファイルに移動し、無視するファイルのエントリを追加します
  2. 走る git rm -r --cached .
  3. 今すぐ実行 git add .

0

私も試しまし--assume-unchanged.gitignoreが、どちらもうまくいきませんでした。ブランチを切り替えたり、他の変更をマージしたりするのが難しくなります。これは私の解決策です:

私はときにコミット、私は手動でリストからファイルを削除します、変更します

プルする前に、変更したファイルを隠しておきます。そして引っ張った後、私はスタッシュポップをします。

  1. git stash
  2. git pull
  3. git stash pop

手順3でマージがトリガーされ、解決が必要な競合が発生する場合があります。これは良いことです。

これにより、チームの他のメンバーと共有されていないローカルの変更を保持できます。

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