1. ホーム
  2. git

[解決済み] Git - 'assume-unchanged'と'skip-worktree'の違い

2022-03-18 21:25:36

質問

リポジトリにコミットしたくないファイルをローカルで変更しています。それはサーバー上でアプリケーションを構築するための設定ファイルですが、私は異なる設定でローカルに構築したいのです。当然ながら、このファイルは 'git status' を実行するとステージされるものとして常に表示されます。私はこの特定の変更を隠して、コミットしないようにしたいと思います。私はこのファイルに他の変更を加えることはありません。

明確にするために、.gitignoreを使用することは、新しいファイルが追加されるのを防ぐだけなので、私が望んでいることではありません。すでにリポジトリにあるファイルへの変更を無視したいのです。

いろいろ調べてみると、2つのオプションがあるようです。 assume-unchangedskip-worktree . 以前の質問 こちら は、両者について述べていますが、その違いについてはあまり説明されていません。

この2つのコマンドはどのように違うのでしょうか?また、なぜどちらかを使うのでしょうか?

どのように解決するのですか?

あなたが欲しいのは skip-worktree .

assume-unchanged は、ファイル群が変更されたかどうかをチェックするのが面倒な場合のために、ビットを設定するときに使用します。 git (もちろん)インデックスのその部分に対応するファイルは、作業コピーで変更されていないものと見なします。そのため stat を呼び出します。このビットは、インデックス内のファイルのエントリが変更されるたびに (つまり、ファイルが上流で変更されたときに) 失われます。

skip-worktree はそれ以上です。 git 知っている によってファイルが変更されたこと(または変更する必要があること)を示します。 reset --hard など)、インデックスにあるバージョンを使って、 使われていないふりをします。これは、インデックスが破棄されるまで続きます。

この違いの影響と典型的な使用例については、こちらによくまとまっています。 http://fallengamer.livejournal.com/93321.html .

その記事から。

  • --assume-unchanged は、開発者を想定しています。 はいけません。 を変更します。このフラグは パフォーマンス向上 SDKのような変更しないフォルダの場合。
  • --skip-worktree は、開発者が次のような理由で特定のファイルに触れないように git に指示する場合に便利です。 が必要です。 を変更します。たとえば、上流のメインリポジトリに製品化可能な 設定ファイル で、それらのファイルへの変更を誤ってコミットしてしまわないようにするためです。 --skip-worktree は、まさにあなたが望むものです。