web-dev-qa-db-ja.com

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

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

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

驚くべきことに、これは常に起こります。したがって、2つの質問:

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

nity docs say:

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

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

  • 組織化:「_」で始まるようなローカルフォルダーの命名規則を設定します。しかし、私たちは皆これが機能しないことを知っています;-)
  • クライアント側 pre-commit hook をすべてのマシンにインストールします。私はまだこれをしていませんが、有望なようです。

さまざまなgitコマンドを試してみましたが、次の方法が役立ちます。gitフックスクリプトは、.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

更新

このような事前コミットフックを書いたところです:-) GitHubリポジトリを参照してください git-pre-commit-hook-unity-assets コードと ブログ投稿 について詳細。

54
Kay

これを.gitignoreに追加します

#Ignore all .meta file
*.meta
#But not source file with postfix. which is everything but a folder
!*.*.meta

これは、接尾辞なしのファイルを無視します。しかし、それは痛くないはずです。

2
Guo Lieene