私は.gitignore
ファイルを追加したGitリポジトリを既に初期化しています。無視したいファイルが無視されるようにファイルインデックスを更新するにはどうすればよいですか。
すでにリポジトリに追加/初期化されている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 .
を実行する前に重要な変更をすべてコミットしてください。そうしないと、他のファイルへの変更が失われます。
あなたがしたいことよりも、リポジトリ内で既に追跡されているファイル(例えば、あなたのローカル環境のために変更する必要があるが、決してこれらの変更をチェックインしたくない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:]]"
リポジトリに既に追加/初期化されているファイルの追跡を解除するには、ファイルの追跡を停止し、システムから削除しないようにします。git rm --cached filename
はい - .gitignore
systemは現在gitのバージョン管理下にないファイルのみを無視します。
すなわちtest.txt
を使用してgit-add
というファイルを既に追加している場合は、test.txt
に.gitignore
を追加しても、test.txt
への変更は追跡されます。
最初にgit rm test.txt
してその変更をコミットする必要があります。その時だけtest.txt
への変更は無視されます。
.gitignoreの末尾の空白を削除する
また、.gitignoreに末尾の空白がないことを確認してください。私は答えを探していたのでこの質問にたどり着きました、それから私はちょうど.gitignoreをキャッチする代わりにエディタを開くべきであるという面白い気持ちがありました。末尾から余分なスペースを1つ削除し、 poof これで動作します:)
私はこれらのステップに従った
git rm -r --cached .
git add .
git reset HEAD
その後、gitは無視すべきすべてのファイル(私の場合は* .swp)を削除します。
ローカルシステムからファイルを削除せずにファイルの追跡を停止したい場合は、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
ありがとう
いたるところに複雑な答えがあります!
以下を使うだけです
git rm -r --cached .
無視しようとしているファイルは、コンピュータ上のマスタからではなく、Originから削除されます。
その後、コミットしてプッシュするだけです。
追跡対象から特定のファイルのみを削除するには
git update-index --assume-unchanged path/to/file
追跡を再開したい場合は、次の手順を実行します。
git update-index --no-assume-unchanged path/to/file
Dav_iが言っているように、追加のコミットを作成せずにファイルをリポジトリに保存したまま変更から削除するには、次のようにします。
git update-index --assume-unchanged filename
'answer'コマンドが何をしたのかよくわからないので、私はそれを実行しました。 Gitリポジトリからすべてのファイルを再帰的に削除します。
救助へのStackoverflow ... "git rm -r。"を元に戻す方法?
git reset HEAD
上書きしたくないローカルファイルをコミットしていないので、トリックをやりました。
.gitignore ファイルをリポジトリのルートに置く ではなく in .git フォルダーに入れてください。乾杯!
答えのどれも私のために働きませんでした。
代わりに:
ファイルを元に戻した後、gitはそれを無視します。
ディレクトリでも動作します。
ファイルがすでにバージョン管理されている場合は、手動で削除する必要があります。
私が抱えていたもう一つの問題は、私がインラインコメントを入れたことでした。
tmp/* # ignore my tmp folder (this doesn't work)
この作品
# ignore my tmp folder
tmp/
あなたの答えのおかげで、私はそれを改善するためにこの小さなワンライナーを書くことができました。私は私の.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
が手に入るでしょう。変更されていないファイルだけです。
ここに記載されていないもう1つの問題は、Windowsのメモ帳であなたの.gitignoreを作成した場合、私が知ったように他のプラットフォームではぎこちないように見えることがあるということです。重要なのは、メモ帳でエンコーディングがANSIに設定されていることを確認することです(または、私が行ったようにLinux上でファイルを作成します)。
ここに私の答えから: https://stackoverflow.com/a/11451916/406592
私は.gitignoreで奇妙な問題を見つけました。すべてが整っていて、正しいようでした。私の.gitignoreが "無視"された唯一の理由は、行末がMacフォーマット(\ r)だったからです。ファイルを正しい行末で保存した後(viでは:set ff = unixを使用)、すべてが魅力的に動作しました。
私のサーバーのLinuxサーバー(私のローカルのdev Macでは正しくない)では、アスタリスクを付けない限りディレクトリは無視されます。
www/archives/*
理由はわかりませんが、数時間でゆるくなったので、共有したいと思いました...
たくさんの無視されたファイルの追跡をやめる必要があるなら、いくつかのコマンドを組み合わせることができます。
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
これは無視されたファイルの追跡をやめるでしょう。実際にファイルシステムからファイルを削除したい場合は、--cached
オプションを使用しないでください。次のように、検索を制限するフォルダを指定することもできます。
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm
.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."
という名前のファイルを無視しますが、もちろんあなたは持っていません)と解釈します。