.gitignore
ファイルを追加した初期化済みの Git リポジトリがあります。無視したいファイルが無視されるように、ファイル インデックスを更新するにはどうすればよいですか?
21 に答える
すでにリポジトリに追加/初期化されている単一のファイルの追跡を解除するには、つまり、ファイルの追跡を停止しますが、システムから削除はしません: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 .
そうしないと、他のファイルへの変更が失われます。
これをリポジトリにプッシュし、別の場所からそれらのファイルがまだ追跡されている状態にプルすると、ファイルは削除されます。
リポジトリですでに追跡されているファイルへの変更を無視しようとしている場合 (たとえば、ローカル環境用に変更する必要があるが、これらの変更をチェックインしたくない 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:]]"
すでにリポジトリに追加/初期化されているファイルの追跡を解除するには、つまり、ファイルの追跡を停止しますが、システムから削除はしません:git rm --cached filename
はい -.gitignore
システムは、現在 git からバージョン管理されていないファイルのみを無視します。
test.txt
つまり、すでにusingというファイルを追加している場合はgit-add
、追加test.txt
して.gitignore
も変更test.txt
が追跡されます。
git rm test.txt
最初にその変更をコミットする必要があります。その場合にのみ、変更はtest.txt
無視されます。
.gitignoreの末尾の空白を削除します
また、.gitignoreに末尾の空白がないことを確認してください。答えを探していたのでこの質問にたどり着きました。それから、.gitignoreを単に猫にするのではなく、エディターを開く必要があるという面白い気持ちになりました。端から1つの余分なスペースを削除し、それが機能するようになりました:)
私はこれらの手順に従いました
git rm -r --cached .
git add .
git reset HEAD
その後、無視する必要があるすべてのファイル (私の場合は *.swp) を git delete します。
ローカル システムからファイルを削除せずにファイルの追跡を停止する場合は、ファイルを無視することをお勧めし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
ありがとう
dav_i が言うように、ファイルをリポジトリに保持し、追加のコミットを作成せずに変更から削除するには、次を使用できます。
git update-index --assume-unchanged filename
「answer」コマンドが何をするのかよくわからないので、それを実行しましたが、がっかりしました。git リポジトリからすべてのファイルを再帰的に削除します。
救助へのスタックオーバーフロー... 「git rm -r」を元に戻す方法は?
git reset HEAD
上書きしたくないローカルファイルをコミットしていなかったので、うまくいきました。
私のような遅い人のための別の提案があります =) .gitignoreファイルを.gitフォルダーではなく、リポジトリのルートに配置します。乾杯!
答えはどれも私にとってはうまくいきませんでした。
その代わり:
- ファイルを git 制御ディレクトリから移動します
- 削除を git に確認する
- ファイルを git 制御のディレクトリに戻します。
ファイルを元に戻した後、git はそのファイルを無視します。
ディレクトリでも動作します!
私が抱えていたもう1つの問題は、インラインコメントを配置したことです。
tmp/* # ignore my tmp folder (this doesn't work)
これは動作します
# ignore my tmp folder
tmp/
あなたの答えのおかげで、私はそれを改善するためにこの小さなワンライナーを書くことができました. .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
。これは、変更されていないファイル専用です。
.gitignore で奇妙な問題を発見しました。すべてが整っていて、正しいように見えました。私の .gitignore が「無視」された唯一の理由は、行末が Mac 形式 (\r) だったからです。そのため、正しい行末でファイルを保存した後 (vi で :set ff=unix を使用)、すべてが魅力的に機能しました!
ここで言及されていないもう 1 つの問題は、.gitignore を Windows のメモ帳で作成した場合、他のプラットフォームでは意味不明に見える可能性があることです。重要なのは、メモ帳でエンコーディングが ANSI に設定されていることを確認することです (または、私が行ったように Linux でファイルを作成します)。
ここでの私の答えから:https://stackoverflow.com/a/11451916/406592
私のサーバー linux サーバー (私のローカル dev mac では当てはまりません) では、アスタリスクを追加しない限り、ディレクトリは無視されます。
www/アーカイブ/*
理由はわかりませんが、それで数時間ほど暇になったので、共有したいと思いました...
が追跡されていないファイルを無視しているように見えない場合に留意すべきことの 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."
は後者のケースを「もちろん持っていないという名前のファイルを無視する」と解釈します。