1. ホーム
  2. git

[解決済み] あるファイルに対する将来のリビジョンを git に無視させるにはどうしたらいいですか?

2022-04-20 15:29:29

質問

git リポジトリに含まれるファイルのデフォルトバージョンを作成しました。 誰かがリポジトリをクローンしたときに、このファイルのコピーを取得することが重要です。 しかし、後でこのファイルへの変更を無視するようにgitを設定したいと思います。 .gitignore は、追跡されていないファイルに対してのみ機能します。

私の動機は、このファイルにはマシン固有の情報が含まれているからです。 私はデフォルト値を提供する一方で、人々がローカルで変更を加えることができるようにしたいのですが、それはオリジンリポジトリにプッシュバックされないので、新しい変更をプルしたときにマージの衝突を引き起こします。

私たちは一般的にかなり怠惰で git add . そのため、このファイルを無視するように git に指示しなければ、このファイルへの変更がコミットされてプッシュされてしまうことは間違いありません。

まとめると

  1. ファイルを作成し、それを default_values.txt このリポジトリは、私の git リポジトリに追加され、誰かがそのリポジトリをクローンしたときに含まれるようになります。
  2. git add . を追加してはいけません。 default_values.txt をコミットしてください。
  3. この動作は、リポジトリのクローンにも引き継がれるはずです。

解決方法は?

他の多くの方がおっしゃっているように、現代の良い解決策としては

git update-index --skip-worktree default_values.txt

これにより、ローカルとアップストリームの両方で、そのファイルへの変更を無視することになります。

git update-index --no-skip-worktree default_values.txt

でスキップマークがついたファイルの一覧を取得することができます。

git ls-files -v . | grep ^S

とは異なり --skip-worktree は、その --assume-unchanged のステータスは、上流の変更がプルされると失われてしまいます。