Unity3Dソース管理にGitを使用する方法


499

Unity 3DでGitソース管理を使用する場合、特にUnity 3Dプロジェクトのバイナリの性質を扱う場合のベストプラクティスは何ですか?ワークフロー、.gitignoreに含めるパス、Unityやプロジェクトで設定する必要のある設定、その他の注意すべき特別な事項について説明してください。

注:Asset Serverの使用はUnity推奨の方法であることは理解していますが、さまざまな理由でGitを使用したいと思います。その答えを述べたり、Asset Serverを使用するだけでよいと主張したりしないでください。Asset Serverは本当に私にとって選択肢ではありません。


3
意味のないgit Vのsvn引数に関係なく、「svnを使用するだけ」、gitは大きなバイナリファイル用ではありません。Unityプロジェクトは、ムービー(およびさまざまな巨大なバイナリファイル-テクスチャなど)であり、数行のコードが含まれています。gitを使用して映画コレクションを保存しますか?svnは少なくとも妥当です。
Fattie、2015

1
最も簡単な解決策は、gitignoreを使用してすべてのバイナリフォルダーを単に除外し、実際のコードファイル、およびおそらくアセットファイルに対してのみgitを使用することです。すべてのバイナリは、すべてのチームメンバーが自分でコンパイルできるため、含める必要はありませんか?
Kokodoko、2015年

@Kokodokoアーティストは、独自の実行可能ファイルをコンパイルできません。
Crashworks、2015

それが真実であっても、新しい画像アセットをgitにプッシュできるので、開発者は新しいアートワークでコンパイルできます...
Kokodoko

@Kokodokoつまり、アーティストがゲーム内での変更を確認するには、開発者がコミットを確認してビルドを行うのを待つ必要があります。これは非常に長い反復時間です。
Crashworks、2016年

回答:


522

以下は、私の個人ブログからの抜粋です。

3DゲームでのGitの使用

2015年10月の更新: GitHubは、以下の問題を直接処理するGit LFSと呼ばれるGitのプラグインをリリースしました。大きなバイナリファイルを簡単かつ効率的にバージョン管理できるようになりました。

Gitはそのままの状態で3Dゲームで正常に動作します。ただし、ここでの主な注意点は、大きな(> 5 MB)メディアファイルのバージョン管理は、コミット履歴が膨らむにつれて長期的に問題になる可能性があることです。バイナリアセットが最終版であると見なされた場合にのみバージョン管理を行うことで、この潜在的な問題を解決しました。私たちの3Dアーティストは、Dropboxを使用してWIPアセットを処理します。これは、上記の理由と、はるかに高速でシンプルであるためです(多くのアーティストがGitを積極的に使用することはないでしょう)。

Gitワークフロー

あなたのGitワークフローは、チームとしての自分の経験とあなたがどのように連携するかを考えると、自分で決める必要があるものです。しかしながら。原作者がここで説明しているように、適切に名前が付けられたGit Flow手法強くお勧めします

方法論がどのように機能するかについては、著者がそれを完全にそして非常に短い言葉で説明しているため、ここではあまり深く掘り下げることはしません。私はしばらくの間、チームで使用しており、これはこれまでに試した中で最高のワークフローです。

Git GUIクライアントアプリケーション

これは、Git GUIまたはGUIを使用するかどうかに関してかなり多くのオプションがあるため、実際には個人的な好みです。しかし、無料のSourceTreeアプリケーションがGit Flow拡張と完全にプラグインしていることをお勧めします。アプリケーションへのGit Flow手法の実装について、こちらSourceTreeチュートリアルをご覧ください

Unity3Dはフォルダーを無視

最新バージョンのチェックアウトのために、Githubは OSの詳細なしでUnity.gitignoreファイル維持しました

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Unity3D設定

Unity 3D v4.3以降のバージョンの場合:

  1. (v4.5以降でこの手順をスキップ)でExternalオプションを有効にしますUnity → Preferences → Packages → Repository
  2. Editメニューを開き、次を選択しますProject Settings → Editor
    1. スイッチVersion Control ModeVisible Meta Files
    2. スイッチAsset Serialization ModeForce Text
  3. Fileメニューからシーンとプロジェクトを保存します。

既存のリポジトリをLFSに移行しますか?

ここでそれを行う方法の手順については、私のブログ投稿をチェックしてください。

追加構成

Unity3DプロジェクトでGitを使用する際に発生するいくつかの大きな問題の1つは、Gitがディレクトリを気にせず、それらからファイルを削除した後、空のディレクトリを喜んで残してしまうことです。Unity3Dはこれらのディレクトリに* .metaファイルを作成し、Gitコミットがこれらのメタファイルを追加および削除し続けると、チームメンバー間の少々の戦いを引き起こす可能性があります。

このGitマージ後フックを、/.git/hooks/Unity3Dプロジェクトが含まれているリポジトリーのフォルダーに追加します。Gitのプル/マージの後、削除されたファイルが確認され、そこに存在していたディレクトリが空かどうかが確認され、空の場合は削除されます。


2
gitワークフローについて言及することは良いことですが、おそらく私は、Unity 3Dに特に固有のワークフローについて尋ねている質問で明確にすべきです。ご存知かもしれませんが、Unityプロジェクトはバイナリファイルに大きく依存しています。これに対処するための特別な考慮事項はありますか?このトピックを調査したときに見つけたいくつかの推奨事項は、マージをできるだけ回避するワークフローを使用することでした。おそらくあなたはこの意見に同意しないかもしれませんが、私の質問は、一般的なワークフロー設定ではなく、unity3d固有の問題に対してより具体的です。
PressingOnAlways

3
大きなバイナリコンテンツの管理にはgit-annexを使用します。Windowsサポートは素晴らしいものではありませんが、改善されています。これは、大きなバイナリファイルのリビジョンを追跡する必要がない場合にのみ役立ちます。
Jerdak 2013

2
これに対する更新-私たちはあなたの設定を試してみましたが、それはかなりうまくいきましたが、私たちはアセットが自動的に同期されることを望みました。ここで、sugasyncを使用して、バイナリアセットフォルダを選択的に同期します。Dropboxはdropboxフォルダーのみを同期しますが、Sugar Syncを使用すると、ハードドライブの任意の場所にフォルダーを任意に同期できるため、非常に便利です。これらの大きなバイナリファイル用に1つのサブフォルダーを定義するために、Assetsのディレクトリ構造を少し変更する必要がありましたが、これまでのところ、それは本当にうまく機能しています。そのフォルダを.gitignoreするだけで、砂糖の同期で同期を維持できます。
PressingOnAlways

2
なぜ一緒に選ぶのHidden Meta Filesですか?
Slipp D. Thompson 2014

2
私のコピーアンドペーストのタイプミスを修正しました-はい、それは目に見えるメタファイルでなければなりません。
S.リッチモンド

60

Unity 4.3では、環境設定から外部オプションを有効にする必要もありましたが、Unity 4.5以降、そのオプションを削除したため、完全なセットアッププロセスは次のようになります。

  1. 切り替えVisible Meta FilesEditor → Project Settings → Editor → Version Control Mode
  2. 切り替えForce TextEditor → Project Settings → Editor → Asset Serialization Mode
  3. Fileメニューからシーンとプロジェクトを保存

また、私たちのチームはもう少し拡張された.gitignoreファイルを使用しています:

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

あなたがソース管理下に維持する必要がある唯一のフォルダがあることに注意してくださいAssetsProjectSettings

Unity Projectをソース管理下に置く方法の詳細については、この投稿を参照してください


これらの新しいオプションを含めるために上部で私の答えを編集する場合、より良いかもしれません。:)
S.リッチモンド

6
なぜ一緒に選ぶのHidden Meta Filesですか?
Slipp D. Thompson 2014

ポイント1は明らかに間違っています。Unity→Preferences→Packages→Repository
Agostino

1
docs.unity3d.com/Manual/…によると、それは目に見えるメタファイルでなければなりません
Markus

1
私のチームにとってはうまくいきます。どうもありがとうございました。
eifersucht 2015

34

GITとは

Gitは、Linus Torvaldsが2005年に開発したフリーでオープンソースの分散バージョン管理システム(SCM)です(Linux OSの創設者)。小さなプロジェクトから大規模なプロジェクトまで、すべてをスピードと効率で制御するために作成されました。Google、Facebook、Microsoftなどの大手企業はGITを毎日使用しています。

GITについて詳しく知りたい場合は、このクイックチュートリアルを確認してください

まず、Git環境がセットアップされていることを確認します。ローカル環境とGitリポジトリの両方をセットアップする必要があります(私はGithub.comを好みます)。

GITクライアントアプリケーションMac / Windows

GIT guiクライアントアプリケーションの場合、Github.comを使用することをお勧めします。

GitHubは、友人、同僚、クラスメート、完全な見知らぬ人とコードを共有する場所です。500万人を超える人々がGitHubを使用して素晴らしいものを一緒に構築しています。

Unity3dの設定

これらの設定を行う必要があります

編集→プロジェクト設定→エディタ→バージョン管理モードで表示メタファイルに切り替えます。

ここに画像の説明を入力してください

Unity→Preferences→Packages→RepositoryのExternalオプションを有効にします

ここに画像の説明を入力してください

[編集]→[プロジェクト設定]→[エディター]→[アセットシリアライゼーションモード]で[テキストを強制]に切り替えます。

ここに画像の説明を入力してください

ソース: 3Dゲームのソース管理でGitを使用する


6
+1この回答はすでに上記に記載されていますが、@ NabeelSaleemの回答は、彼が提供した画像とガイドを明確にするのに役立ちました:)ありがとう
aflatoon

3
Preferences > PackagesUnity 5.x Normalで見つかりませんか?TY
イヴ・ランゲ

5
@NabeelSaleemはい。実際、Unity 5.xでのこのステップは必要ありません。ty
Yves Lange

22

上記のすべてに追加するには、Unityでgit lfsを使用することも理想的です。発売以来使用しており、問題なく使用できました。

これ.gitattributes.gitignoreファイルの横に追加する必要があります

*.cs diff=csharp text
*.cginc text
*.shader text

*.mat merge=unityyamlmerge eol=lf
*.anim merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
*.physicsMaterial2D merge=unityyamlmerge eol=lf
*.physicsMaterial merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.meta merge=unityyamlmerge eol=lf
*.controller merge=unityyamlmerge eol=lf

*.a filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.aif filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.FBX filter=lfs diff=lfs merge=lfs -text
*.rns filter=lfs diff=lfs merge=lfs -text
*.reason filter=lfs diff=lfs merge=lfs -text
*.lxo filter=lfs diff=lfs merge=lfs -text

これが私のローリングファイルリストです。リストされていない追加のバイナリファイルを使用する場合は、それらを追加します。

yamlmergeを使用するように構成されたファイルもあります。これを設定する必要があります。あなたはそれについてここで読むことができます:http//docs.unity3d.com/Manual/SmartMerge.html


11

これで、Github to Unity拡張機能とのシームレスな統合が実現しました... https://unity.github.com/

Unity用の新しいGitHub拡張機能は、GitHubワークフローなどをUnityにもたらし、Git LFSとファイルロックを備えた大きなファイルのサポートを提供します。

執筆時点では、プロジェクトはアルファ版ですが、個人プロジェクトで引き続き使用できます。


これやってみましたか?
Nabeel K 2018

11

.gitignore興味のある方はもっと簡単に投稿できると思いました。

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings

7
繰り返しますが、これらの回答はすべて、このページではかなり古くなっています。何らかの理由でUnityでgitを使用する必要がある場合、github.com / github / gitignore / blob / master / Unity.gitignore
Fattie

小さく、シンプルで、すべてのバージョンと完全に互換性があります。プロジェクトの構造を最近変更したUnity 2017および2018(UnityPackageManager/およびPackages/)でも、このスクリプトが最適です。
Isaak Eriksson、

8

unity-3dソースコードのバージョン管理にgitを使用する際に覚えておくべき主なこと:

(A)Libraryフォルダーをチェックインしないでください。私は過去に何度もこの間違いを犯し、苦しんでいます!プロジェクト/ファイルをgitに追加する前に、ライブラリフォルダーを削除するか移動してください。

(B)「Visible Meta Files」を使用 -最新のUnityバージョン-5.3.4以降では、これはデフォルトで発生します。以前のバージョンの一部では、[編集]-> [プロジェクト設定]-> [バージョン管理]で設定を変更する必要があります。

(C)Unityの.gitignoreファイルを使用して、健全性が維持され、ファイルが不必要に追加されないようにします(android / tizenの場合)-リポジトリに追加されないようにAPKおよびTPKファイルを除外するルールを追加します。統一のための.gitignoreファイルを探してGoogleを利用するか、GitHubが提供するUnityのこのモデル.gitignoreを使用してくださいhttps : //github.com/github/gitignore/blob/master/Unity.gitignore

(D).gitignoreファイルが最初に追加されたファイルとしてリポジトリに追加されていることを確認してください。以前、私は個人的に.gitignoreファイルを追加できなかったためです。なぜこれが起こったのかを後から考えてみてください-しかし、今日私は.gitignoreファイルをコピーしてリポジトリを設定する最初のステップとして追加するだけです。

Unityプロジェクトをgitに対応させるには、次のようにします。

(1)プロジェクトフォルダに移動します

(2)git initと入力します。

(3).gitignoreファイルをコピーします。MacOSの場合:cp〜/ Downloads / .gitignore Windowsの場合:c:\ Users [yourusername] \ Downloads.gitignoreをコピーします。

(4)git add .gitignore

(5)git add *

これがお役に立てば幸いです...


6

Edit -> Project Settings -> Editor

バージョンコントロールをメタファイルに設定します。アセットのシリアル化を設定してテキストを強制します。

これがあなたの望んでいることだと思います。


1
そして、どのようにYAMLマージを設定しますか?
しんぞう2017


6

あなたは使用することができますUnityのためのGithubをユニティ拡張ユニティのUIにGitのワークフローをもたらします。

Github for Unityが拡張機能のバージョン1.0をリリースしました。

  • git-lfs(git大きなファイルのサポート)を使用して大きなアセットを適切に保存します
  • 他の誰もあなたのアセットコミットを上書きしないようにファイルロック
  • /へのプッシュとプル任意のリモートリポジトリ
  • Unityアセットストアからダウンロードすることもできます:https : //assetstore.unity.com/packages/tools/version-control/github-for-unity-118069

5

アセットProjectSettingsのみフォルダー gitバージョン管理下にある必要があります。

このようにgitignoreを作成できます。

[Ll]ibrary/
[Tt]emp/
[Oo]bj/

# Autogenerated VS/MD solution and project files
*.csproj
*.unityproj
*.sln
*.suo
*.userprefs

# Mac
.DS_Store
*.swp
*.swo

Thumbs.db
Thumbs.db.meta

.vs/

3

Unityは、独自のソースバージョン管理も提供します。unity5以前はunityAsset Serverでしたが、現在は廃止されています。unity collaborateと呼ばれる新しいSVN制御システムを起動します。ただし、UnityとSVNを使用する主な問題は、シーンのコミットとマージです。しかし、svn以外では、この種の競合を解決したり、シーンをマージしたりする方法が提供されています。あなたがどのSVNに精通しているかによります。MacでSmartSVNツールを使用しています。と窓のカメ。

ここに画像の説明を入力してください


1

Gitignoreのサブジェットを追加するだけです。推奨される方法は、gitプロジェクトのルートである場合、LibraryとTempのみを無視します。あなたが私のようなもので、リポジトリ全体ではなく、リポジトリの一部になるために単一のプロジェクトが必要な場合は、gitignoreの正しい文字列は次のようになります。

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild

0

過去にgitに不満を感じていた人からの非常にシンプルなワークフローを追加したかったのです。gitを使用するにはいくつかの方法がありますが、おそらく最も一般的なUnityは、GitHub Desktop、Git Bash、GitHub Unityです。

https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069

基本的に、それらはすべて同じことを行いますが、ユーザーの選択です。大容量ファイルのセットアップにgitを使用すると、1 GBの無料の大容量ファイルストレージとデータパックで利用できる追加ストレージを月額4 GBで50 GBにできます。これにより、100 MBを超えるファイルをリモートリポジトリにプッシュできます(実際のファイルをサーバーとあなたのリポジトリ内のポインタ)

https://git-lfs.github.com/

何らかの理由でlfsを設定したくない場合は、プロジェクトがあるディレクトリに「size:large」と入力して、Windowsで128 mbを超えるファイルをプロジェクトでスキャンできます。これは、大きなファイルを検索するのに便利ですが、100mbから128mbのファイルの一部は見逃される可能性があります。

ここに画像の説明を入力してください

git bashの一般的な形式は次のとおりです。

git add。(コミットするファイルを追加します)

git commit -m 'message'(ファイルをメッセージでコミットします。ファイルはまだPCにあり、リモートリポジトリにはありません。基本的に、新しいコミットとして「バージョン管理」されています)

git push(ファイルをリポジトリにプッシュ)

ユニティプロジェクトのgit bashの欠点は、100 MBを超えるファイルがある場合、プッシュするまでエラーが発生しないことです。次に、頭を前のコミットにリセットして、コミットを取り消す必要があります。特にgit bashを初めて使用する場合は、面倒です。

GitHubデスクトップの利点は、100 MBでファイルをコミットする前に、ポップアップエラーメッセージが表示されることです。次に、それらのファイルを圧縮するか、.gitignoreファイルに追加します。

.gitignoreファイルを使用するには、ローカルリポジトリのルートディレクトリに.gitignoreというファイルを作成します。省略したいファイルを1行ずつ追加するだけです。SharedAssetsおよびその他の非アセットフォルダーファイルは通常省略でき、エディターで自動的に再作成されます(パッケージを再インポートできるなど)。ワイルドカードを使用して、ファイルの種類を除外することもできます。

他の人がGitHubリポジトリを使用していて、クローンまたはプルしたい場合は、GitHubデスクトップまたはGit bashでもこれらのオプションを利用できます。

個人的にはインターフェースがあまり役に立たなかったため、エディターでGitHubを使用できるUnity GitHubパッケージについてはあまり触れませんでしたが、全体的には誰もがgitに慣れるのに役立つとは思いませんが、これは単なる好み。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.