75

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

これにより、バージョン管理を使用しているときに厄介な状況が発生する可能性があります (スキップして質問に移動できます): 誰かが無視されるファイルのフォルダーを作成しますが、フォルダーのメタ ファイルを無視するのを忘れます。Unity がメタ ファイルを作成し、この人がメタをバージョン管理に追加します。別の人が変更セットを取得し、フォルダーがないため、Unityがメタ ファイルを削除し、メタ ファイルをバージョン管理から削除します。チームの全員がこれを理解しているわけではないため、プロセスは地獄からのループで永続化されます。

驚くべきことに、これは常に起こります。だから、2つの質問:

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

4 に答える 4

69

Unityのドキュメントには次のように書かれています。

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

私にとって、これはそれらをバージョン管理下に置くのに十分な理由です。この問題を解決するには、次の 2 つの方法があります。

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

さまざまな git コマンドをいじってみましたが、次のコマンドが役に立ちます。

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を参照してください。詳細については、それに関する私のブログ投稿を参照してください。

于 2013-10-03T11:10:56.243 に答える
0

はい、.meta ファイルは重要です。ファイルやフォルダーの GUID を保持するなど、いくつかの便利なタスクがあるため、ファイル/フォルダーの名前が変更されたり、再配置されたりしても、Unity は参照を保持できます。完全なディスカッションを見る

追加する必要があります

# Meta Files built by Visual Studio
*.meta

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta

# Autogenerated files
InitTestScene*.unity.meta
InitTestScene*.unity

# Asset meta data should only be ignored when the corresponding asset is also ignored
!/[Aa]ssets/**/*.meta

あなたの.gitignoreに。次に、いつものようにgitignore を更新します

最後の行は、Assets フォルダーの下にあるメタ ファイルを保持する (無視しない) ため、Assets フォルダー内のフォルダーのメタ ファイルは無視されません。

于 2022-02-15T22:57:12.607 に答える
-5

アセットとともにメタ ファイルを含めるには、除外の後に次を追加するだけです。

!*.*.meta

これが私の .gitignore のサンプルです:

# Ignore the following files
# --------------------------
# Unity3D specific
#
**/Library/*
**/Temp/*
**/*.csproj
**/*.unityproj
**/*.sln
**/*.userprefs
**/*.pidb

# include meta files
!*.*.meta

これを git リポジトリ構造のフォルダーに配置すると、プロジェクト構造は次のようになります。

root folder /
   - Unity Project/
        - .gitignore
        - .git/
        - ProjectFolder/
              - {all project related data}

それが役立つことを願っています。

于 2013-12-04T16:13:12.240 に答える