web-dev-qa-db-ja.com

Gitリポジトリにコミット済みのファイルを無視します

私は.gitignoreファイルを追加したGitリポジトリを既に初期化しています。無視したいファイルが無視されるようにファイルインデックスを更新するにはどうすればよいですか。

2349
trobrock

すでにリポジトリに追加/初期化されているsingleファイルを追跡解除するには、i.e。、ファイルの追跡を停止しますが、システムからは削除しません:git rm --cached filename

現在の.gitignoreにあるeveryファイルを追跡解除するには:

最初に未解決のコード変更をコミットする、次にこのコマンドを実行します:

git rm -r --cached .

これにより、変更されたファイルがindex(staging area)から削除され、次のコマンドが実行されます。

git add .

コミットする:

git commit -m ".gitignore is now working"

git rm --cached filenameを元に戻すには、git add filenameを使用します。

git add .を実行する前に重要な変更をすべてコミットしてください。そうしないと、他のファイルへの変更が失われます。

3958
trobrock

あなたがしたいことよりも、リポジトリ内で既に追跡されているファイル(例えば、あなたのローカル環境のために変更する必要があるが、決してこれらの変更をチェックインしたくないdev.propertiesファイル)への変更を無視しようとするならです:

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

変更の追跡を再開したい場合

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

git-update-index(1)マニュアルページ を参照してください。

Git-resetを過ぎてもこれを保持する必要がある場合は、update-indexのskip-worktreeおよびno-skip-worktreeオプションも調べてください( via


更新:人々が質問してきたので、ローカルワークスペースで現在無視されているファイルを確認するための便利な(そして以下でコメントされてから更新された)エイリアスです。

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
560
dyodji

リポジトリに既に追加/初期化されているファイルの追跡を解除するには、ファイルの追跡を停止し、システムから削除しないようにします。git rm --cached filename

354
pagetribe

はい - .gitignore systemは現在gitのバージョン管理下にないファイルのみを無視します。

すなわちtest.txtを使用してgit-addというファイルを既に追加している場合は、test.txt.gitignoreを追加しても、test.txtへの変更は追跡されます。

最初にgit rm test.txtしてその変更をコミットする必要があります。その時だけtest.txtへの変更は無視されます。

79
Antony Stubbs

.gitignoreの末尾の空白を削除する

また、.gitignoreに末尾の空白がないことを確認してください。私は答えを探していたのでこの質問にたどり着きました、それから私はちょうど.gitignoreをキャッチする代わりにエディタを開くべきであるという面白い気持ちがありました。末尾から余分なスペースを1つ削除し、 poof これで動作します:)

49
MikeJansen

私はこれらのステップに従った

git rm -r --cached .
git add .
git reset HEAD

その後、gitは無視すべきすべてのファイル(私の場合は* .swp)を削除します。

40
Orlando

ローカルシステムからファイルを削除せずにファイルの追跡を停止したい場合は、config/database.ymlファイルを無視することをおすすめします。単に試してみてください。

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.

さて、このファイルを.gitignoreファイルに追加して変更をコミットします。そしてこれからはconfig/database.ymlに加えられた変更はgitによって追跡されません。

$ echo config/database.yml >> .gitignore

ありがとう

36
przbadu

いたるところに複雑な答えがあります!

以下を使うだけです

git rm -r --cached .

無視しようとしているファイルは、コンピュータ上のマスタからではなく、Originから削除されます。

その後、コミットしてプッシュするだけです。

30
Ahmad Awais

追跡対象から特定のファイルのみを削除するには

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

追跡を再開したい場合は、次の手順を実行します。

git update-index --no-assume-unchanged path/to/file                      
28
Mark Salvatore

Dav_iが言っているように、追加のコミットを作成せずにファイルをリポジトリに保存したまま変更から削除するには、次のようにします。

git update-index --assume-unchanged filename
27
Iman Mohamadi

'answer'コマンドが何をしたのかよくわからないので、私はそれを実行しました。 Gitリポジトリからすべてのファイルを再帰的に削除します。

救助へのStackoverflow ... "git rm -r。"を元に戻す方法?

git reset HEAD

上書きしたくないローカルファイルをコミットしていないので、トリックをやりました。

23
averydev

.gitignore ファイルをリポジトリのルートに置く ではなく in .git フォルダーに入れてください。乾杯!

22
Olga

答えのどれも私のために働きませんでした。

代わりに:

  1. ファイルをgit管理下のディレクトリから移動します。
  2. Gitへの削除を確認してください
  3. ファイルをgit管理のディレクトリに戻します

ファイルを元に戻した後、gitはそれを無視します。

ディレクトリでも動作します。

21
Hunter S

ファイルがすでにバージョン管理されている場合は、手動で削除する必要があります。

19
Aragorn

私が抱えていたもう一つの問題は、私がインラインコメントを入れたことでした。

tmp/*   # ignore my tmp folder (this doesn't work)

この作品

# ignore my tmp folder
tmp/
19
kindahero

あなたの答えのおかげで、私はそれを改善するためにこの小さなワンライナーを書くことができました。私は私の.gitignoreとrepoでそれを実行しました、そして何の問題もありませんでした、しかし誰かが明白な問題を見るならば、コメントしてください。これはgit rm -r --cachedから.gitignore

cat $(git rev - parse --show-toplevel)/。gitIgnore | sed "s // $ //" | grep -v "^#" | xargs -L 1 -I {} $の検索(git rev-parse --show-toplevel)-name "{}" | xargs -L 1 git rm -r - キャッシュ

たくさんのfatal: pathspec '<pathspec>' did not match any filesが手に入るでしょう。変更されていないファイルだけです。

12
umop

ここに記載されていないもう1つの問題は、Windowsのメモ帳であなたの.gitignoreを作成した場合、私が知ったように他のプラットフォームではぎこちないように見えることがあるということです。重要なのは、メモ帳でエンコーディングがANSIに設定されていることを確認することです(または、私が行ったようにLinux上でファイルを作成します)。

ここに私の答えから: https://stackoverflow.com/a/11451916/406592

9
Matt Parkins

私は.gitignoreで奇妙な問題を見つけました。すべてが整っていて、正しいようでした。私の.gitignoreが "無視"された唯一の理由は、行末がMacフォーマット(\ r)だったからです。ファイルを正しい行末で保存した後(viでは:set ff = unixを使用)、すべてが魅力的に動作しました。

9
Johannes Vetter

私のサーバーのLinuxサーバー(私のローカルのdev Macでは正しくない)では、アスタリスクを付けない限りディレクトリは無視されます。

www/archives/*

理由はわかりませんが、数時間でゆるくなったので、共有したいと思いました...

7
ndemoreau

たくさんの無視されたファイルの追跡をやめる必要があるなら、いくつかのコマンドを組み合わせることができます。

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

これは無視されたファイルの追跡をやめるでしょう。実際にファイルシステムからファイルを削除したい場合は、--cachedオプションを使用しないでください。次のように、検索を制限するフォルダを指定することもできます。

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

6
Etherealone

.gitignoreが追跡されていないファイルを無視しているように見えない場合にも留意すべき1つのことは、無視するのと同じ行にコメントを入れるべきではないということです。だからこれは大丈夫です

# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*

しかしこれはうまくいきません。

foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.

.gitignoreは後者のケースを「"foo* # ignore all foo.txt, foo.markdown, foo.dat, etc."という名前のファイルを無視しますが、もちろんあなたは持っていません)と解釈します。

6
Gabriel Perdue