ローカル ファイルに変更を加えたのですが、これをリポジトリにコミットしたくないのです。これはサーバー上でアプリケーションをビルドするための構成ファイルですが、異なる設定でローカルにビルドしたいのです。当然ながら、このファイルは 'git status' を実行すると常にステージング対象として表示されます。この特定の変更を非表示にしてコミットしないようにしたいと思います。このファイルには他の変更は加えません。
明確に言うと、.gitignore を使用するのは、新しいファイルが追加されないようにするだけなので、私が望んでいることではありません。リポジトリに既に存在するファイルへの変更を無視したいのです。
調べてみると、2つの選択肢が見つかりました。以前のassume-unchanged
質問skip-worktree
ここそれらについて話しますが、それらの違いを実際に説明していません。
2 つのコマンドの違いは何ですか? どちらか一方を使用するのはなぜですか?
ベストアンサー1
使用したいものskip-worktree
:
git update-index --skip-worktree <file_name>
assume-unchanged
ファイルのグループが変更されたかどうかを確認するのにコストがかかるケース向けに設計されています。ビットを設定すると、git
(もちろん) インデックスのその部分に対応するファイルが作業コピーで変更されていないと想定されます。そのため、stat
呼び出しの混乱を回避できます。このビットは、インデックス内のファイルのエントリが変更されるたびに (つまり、ファイルが上流で変更されると) 失われます。
skip-worktree
はそれ以上です。ファイルが変更されたこと (または などによって変更される必要があること) が でgit
わかっているreset --hard
場合でも、変更されていないかのように振る舞い、代わりにインデックスのバージョンを使用します。これは、インデックスが破棄されるまで持続します。
この違いの影響と一般的な使用例については、次のリンクにわかりやすくまとめられています。http://fallengamer.livejournal.com/93321.html。
その記事より:
--assume-unchanged
開発者がファイルを変更してはならないことを前提としています。このフラグは、SDK などの変更されないフォルダーのパフォーマンスを向上させるためのものです。--skip-worktree
開発者が変更する必要があるため、git に特定のファイルを一切変更しないように指示する場合に便利です。たとえば、メイン リポジトリ アップストリームが本番環境対応の設定ファイルをホストしていて、それらのファイルへの変更を誤ってコミットしたくない場合は、--skip-worktree
まさにこれが必要なことです。