Gitが特定のディレクトリ/ファイルの監視/追跡を無視する方法。あなたはこれを実行します:
git update-index --assume-unchanged <file>
では、どのようにして元に戻して、彼らが再び見られるようにしますか?(想定外と呼びましょう。)
Gitが特定のディレクトリ/ファイルの監視/追跡を無視する方法。あなたはこれを実行します:
git update-index --assume-unchanged <file>
では、どのようにして元に戻して、彼らが再び見られるようにしますか?(想定外と呼びましょう。)
回答:
未変更と見なされるように設定されている元に戻す/ディレクトリを表示するには、次のコマンドを実行します。
git update-index --no-assume-unchanged <file>
これをassume-unchanged
実行するディレクトリ/ファイルのリストを取得するには:
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
。これは、「h」プレフィックスなしでファイル名だけを提供します。
assume-unchanged
、を使用してくださいgit update-index --really-refresh
。このコマンドを使用すると、git ls-files
最初にファイルを探す必要がありません。
これが頻繁に使用するコマンドである場合、別名を付けることも検討してください。グローバルに追加.gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
エイリアスを設定する方法(まだわからない場合):
git config --configLocation alias.aliasName 'command --options'
例:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
これをに保存した後.gitconfig
、よりクリーンなコマンドを実行できます。
git hide myfile.ext
または
git unhide myfile.ext
このgitドキュメントは非常に役に立ちました。
コメントの通り、これは現在どのファイルが隠されているかを知るのに役立つエイリアスです:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
git update-index関数には、次のように入力できるいくつかのオプションがあります。
git update-index --help
ここには、さまざまなオプションがあります-関数update-indexで処理する方法。
[ファイル名がわからない場合]
git update-index --really-refresh
[ファイル名がわかっている場合]
git update-index --no-assume-unchanged <file>
無視リストに追加されたすべてのファイルを元に戻します。
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>
私の命を救った。わかりました。フォルダをもう一度同期することができましたが、この問題の「実際の」解決策が必要でした。
@ adardesign、@ adswebwork、@ AnkitVishwakarmaからの優れた元の回答、および@ Bdoserror、@ Retsam、@ seanf、@ torekからのコメントを、追加のドキュメントリンクと簡潔なエイリアスを使用して合成するには...
基本的なコマンド
するには、ファイルのリセットであると仮定し、そのまま正常に戻りました:
git update-index --no-assume-unchanged <file>
変更されていないと見なされるすべてのファイルをリストするには、次のようにします。
git ls-files -v | grep '^[a-z]' | cut -c3-
するには、すべてリセット前提とし、変更されていないファイルが正常に戻っ:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
注:他の場所にリストされているこのコマンドは、すべての想定されていない変更されていないファイルをリセットするようには見えません(私はそれが以前に解決策としてリストされていたと思います):
git update-index --really-refresh
ショートカット
これらの一般的なタスクをgitで簡単に実行できるようにするには、ユーザー用に次のエイリアスセクションを追加/更新し.gitconfig
ます(例:~/.gitconfig
* nixまたはmacOSシステム):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hidden
使用して、シェルのエイリアスやスクリプトなしで同じ効果を得ることができ、!
このようにhidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
インデックスファイルの想定された変更されていないフラグをクリアしません(または、そうしなくなった可能性があります。
適用されたすべてのファイルを元に戻すには、キャッシュされているだけでなく、ステータスも変更されていないと見なす場合(gitは小文字で文字でマークします)、次のコマンドを使用できます。
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
すべてのファイルとそのステータスを印刷しますgrep '^[a-z]'
ファイルをフィルタリングし、変更されていないものと仮定するだけを選択しますcut -c 3-
ステータスを削除し、パスのみを残して、3番目の文字から最後まで切断しますtr '\012' '\000'
行末文字(\ 012)をゼロ文字(\ 000)に置き換えますxargs -0 git update-index --no-assume-unchanged
git update-index --no-assume-unchanged
元に戻すためにゼロ文字で区切られたすべてのパスを渡します追加@adardesign
あなたが追加されているすべてのファイルをリセットしたい場合は、答えのassume-unchanged
ために、リストno-assume-unchanged
1回では、次の操作を実行できます。
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
これは単にgrep ieから出力される2文字を取り除き"h "
、ファイル名に存在する可能性のあるスペースをエスケープ|| true
し、ループ内の一部のファイルにエラーがある場合にコマンドが途中で終了するのを最後に防ぎます。
ここではカバーされないものはありません。しかし、私の2セントを追加したいと思います。時々、私はビルドを実行し、それが多くのファイルを変更し、それから何かに取り組みたいので、このコマンドは本当に私を助けてくれます。
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
他の誰かにも役立つと思います。
.gitignore
ビルドアーティファクトを無視するためにを使用することにはメリットがあると思います。
.gitignore
いますが、それは時々、私の経験では十分ではありません。しかし、私はあなたがこれを言っている文脈を理解しています。
Windowsでは、どのソリューションも機能しませんでした。ファイルステータスではH
なく、資本を使用しているようh
です。grepコマンドでは、^
行頭と次の文字の否定を表すため、追加のキャレットが必要です。
Windowsソリューション
git ls-files -v | grep '^^H'
キャッシュされていないすべてのファイルを一覧表示するにはgit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
経由で行われたすべてのファイルをスキップしてファイルを元に戻す update-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
経由で行われたすべてのファイルをスキップしてファイルを元に戻す update-index --assume-unchanged
git ls-files -v | grep '^^H'
再びすべてのキャッシュされていないファイルを一覧表示し、上記のコマンドが機能しているかどうかを確認します-これは何も返さないはずです