2683

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

4

21 に答える 21

4455

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

にあるすべてのファイルの追跡を解除するには.gitignore:

最初に未処理のコード変更をコミットしてから、次のコマンドを実行します。

git rm -r --cached .

これにより、変更されたファイルがインデックス(ステージング領域)から削除され、次のコマンドを実行するだけです:

git add .

コミットします:

git commit -m ".gitignore is now working"

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

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

これをリポジトリにプッシュし、別の場所からそれらのファイルがまだ追跡されている状態にプルすると、ファイルは削除されます。

于 2009-07-16T19:32:50.543 に答える
662

リポジトリですでに追跡されているファイルへの変更を無視しようとしている場合 (たとえば、ローカル環境用に変更する必要があるが、これらの変更をチェックインしたくない 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


更新: 人々が尋ねてきたので、ローカル ワークスペースで現在「無視」されている (--assume-unchanged) ファイルを確認するための便利な (そして以下でコメントされているので更新された) エイリアスを次に示します。

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
于 2012-07-06T17:09:29.007 に答える
373

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

于 2010-09-14T23:55:15.740 に答える
90

はい -.gitignoreシステムは、現在 git からバージョン管理されていないファイルのみを無視します。

test.txtつまり、すでにusingというファイルを追加している場合はgit-add、追加test.txtして.gitignoreも変更test.txtが追跡されます。

git rm test.txt最初にその変更をコミットする必要があります。その場合にのみ、変更はtest.txt無視されます。

于 2009-07-18T08:15:31.360 に答える
54

.gitignoreの末尾の空白を削除します

また、.gitignoreに末尾の空白がないことを確認してください。答えを探していたのでこの質問にたどり着きました。それから、.gitignoreを単に猫にするのではなく、エディターを開く必要があるという面白い気持ちになりました。端から1つの余分なスペースを削除し、それが機能するようになりました:)

于 2012-02-02T15:59:49.453 に答える
46

私はこれらの手順に従いました

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

その後、無視する必要があるすべてのファイル (私の場合は *.swp) を git delete します。

于 2011-07-15T07:22:58.157 に答える
42

ローカル システムからファイルを削除せずにファイルの追跡を停止する場合は、ファイルを無視することをお勧めし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

ありがとう

于 2014-03-02T09:00:50.530 に答える
29

dav_i が言うように、ファイルをリポジトリに保持し、追加のコミットを作成せずに変更から削除するには、次を使用できます。

git update-index --assume-unchanged filename
于 2015-04-17T07:21:44.333 に答える
25

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

救助へのスタックオーバーフロー... 「git rm -r」を元に戻す方法は?

git reset HEAD

上書きしたくないローカルファイルをコミットしていなかったので、うまくいきました。

于 2011-04-12T20:39:32.243 に答える
25

私のような遅い人のための別の提案があります =) .gitignoreファイルを.gitフォルダーではなく、リポジトリのルートに配置します。乾杯!

于 2013-06-18T21:08:56.640 に答える
25

答えはどれも私にとってはうまくいきませんでした。

その代わり:

  1. ファイルを git 制御ディレクトリから移動します
  2. 削除を git に確認する
  3. ファイルを git 制御のディレクトリに戻します。

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

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

于 2015-11-15T04:03:26.390 に答える
21

私が抱えていたもう1つの問題は、インラインコメントを配置したことです。

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

これは動作します

# ignore my tmp folder
tmp/
于 2011-12-06T13:14:59.130 に答える
15

あなたの答えのおかげで、私はそれを改善するためにこの小さなワンライナーを書くことができました. .gitignore とリポジトリで実行しましたが、問題はありませんでしたが、明らかな問題が見られた場合はコメントしてください。これは次のようにする必要git rm -r --cachedが あり.gitignoreます。

cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached

が大量に得られることに注意してくださいfatal: pathspec '<pathspec>' did not match any files。これは、変更されていないファイル専用です。

于 2012-07-03T17:25:08.077 に答える
10

.gitignore で奇妙な問題を発見しました。すべてが整っていて、正しいように見えました。私の .gitignore が「無視」された唯一の理由は、行末が Mac 形式 (\r) だったからです。そのため、正しい行末でファイルを保存した後 (vi で :set ff=unix を使用)、すべてが魅力的に機能しました!

于 2012-03-02T09:56:39.580 に答える
10

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

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

于 2013-05-21T09:43:51.703 に答える
8

私のサーバー linux サーバー (私のローカル dev mac では当てはまりません) では、アスタリスクを追加しない限り、ディレクトリは無視されます。

www/アーカイブ/*

理由はわかりませんが、それで数時間ほど暇になったので、共有したいと思いました...

于 2013-03-09T06:36:42.540 に答える
7

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

# 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."は後者のケースを「もちろん持っていないという名前のファイルを無視する」と解釈します。

于 2016-02-19T22:52:59.310 に答える