1. ホーム
  2. git

バージョン管理でフォルダのメタファイルを無視すること

2023-09-09 17:08:40

質問

Unity は、次のようなメタファイルを作成および削除します。 フォルダー のメタファイルを作成し、削除します。

それは、バージョン コントロールを使用するときに迷惑な状況を作り出すことができます (それをスキップして質問に行くことができます)。誰かが無視されるファイルのフォルダを作成しますが、そのフォルダのメタ ファイルを無視することを忘れてしまいます。Unityがメタ・ファイルを作成し、この人がメタをバージョン・コントロールに追加します。別の人がチェンジセットを取得し、その人はそのフォルダーを持っていないため その Unity はメタ ファイルを削除し、彼らはメタ ファイルをバージョン管理から削除します。チームの誰もがこのことを理解しているわけではないので、このプロセスは地獄のループのように永続化します。

驚くことに、これはよくあることなのです。そこで、2 つの質問をします。

  1. フォルダー メタ ファイルのバージョンは重要ですか?
  2. フォルダのメタファイルを自動的に無視する方法はありますか - 特に git や mercurial で?

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

この Unityのドキュメント は言う。

新しいアセットを作成するときは、アセット自体と関連する .meta ファイルの両方がバージョンコントロールに追加されていることを確認します。

私にとっては、これはバージョン管理の下に置くのに十分な理由です。私は、この問題を解決するために 2 つのアプローチを考えています。

  • 組織的な方法。ローカル フォルダに "_"で始まるような命名規則を設定する。しかし、これがうまくいかないことは誰もが知っています;-)。
  • クライアント側をインストールする プリコミットフック をすべてのマシンにインストールします。まだやってませんが、期待できそうです。

私はちょうどさまざまなgitコマンドで遊んでいました、以下は便利かもしれません。 git hook スクリプトは、まず .gitignore が次のように変更されたかどうかをチェックする必要があります。

git diff-index --cached --name-only HEAD | grep ".gitignore"

新しく追加された行がAssetsフォルダの下にある場合、そのディレクトリ名を.gitignoreに出力します。

git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2


更新

こんなpre-commitフックを書きました :-) GitHub リポジトリを参照してください。 git-pre-commit-hook-unity-assets(ギットプレコミットフック-ユニティアセット を、そして私の ブログ投稿 をご覧ください。