最初に
この記事はUE4にてアセット群を管理するためにGitLabを試す記事となります。間違いや更に良い方法があった場合にはそっとTwitter( @ろっさむ )やコメント、修正リクエストなどでお知らせ頂けるととても有難いです。
作業環境
記事内で使用する作業環境は以下の通りとなります。
- Unreal Engine:4.23.1
GitLabとは?
以下の記事が参考になります。
サブモジュールとは?
Aというリポジトリのサブディレクトリとして、Bという別のリポジトリを登録し、Bのコミットハッシュ値を使用してBの特定のコミットを参照する、といった仕組みです。
以下の記事が詳しく書かれています。
アセット管理でGitLabを使うメリット
まず初めに、「チーム開発するにおいてUE4の有料アセットをどこで管理するか?」という問題点があると思います。有料アセットをライセンス的な問題でパブリックリポジトリに置くのはちょっと…となるので、そういった場合には、5人以下の少人数チームであればPerforce、BitbucketやGitHubのプライベートリポジトリが選択肢にあがると思います。
今回はそれ以上の人数でアセットを共有する必要がある場合の、アセットの管理方法となります。先ほどあげたホスティングサービスなどは、5人以上でプライベートリポジトリのコラボレーターを登録しようとすると人数に応じて料金がかかってきます。インディーズゲーム開発ではできるだけコストを削減したいところ…。
そこで目についたのが、GtLabでした。GitLabだとプライベートリポジトリ作成無料、コラボレーターにも制限がない、Wiki自体も使いやすい、といったメリットがあります。現在、私たちの開発では、アセットの管理をGitLabのプライベートリポジトリで行い、GitHubのパブリックリポジトリでコード管理を行っています。
今回は、GitLabのアセット用プライベートリポジトリをSubmodule化してUE4エディタから操作できるようにします。
実際の手順
GitHubでプロジェクト用のパブリックリポジトリを作成する方法
こちらの方の記事を参考に作成してみてください。
UE4のプロジェクトを複数人で開発するためGitHubで管理する
作成した後にはプロジェクト下にあるContent
フォルダの中身をコピーして別の場所に保存してから、一旦削除しておいてください。
GitLabでプライベートリポジトリを作成する方法
以下の記事を参考に「Content」か、それがわかる任意の名前をつけたプライベートリポジトリを作成してください。
作成した前提で次の項目へ進みます。
GitLabでのプライベートリポジトリにアセットを移動させる
先ほど別で保存していたContent下のアセット群を、GitLabで作成したプライベートリポジトリに直接移動させます。移動させたら、アセット群をステージングしてコミット、プッシュしてください。
GitLabのプライベートリポジトリをサブモジュールにする
以降はターミナルでコマンドを実行することを想定しています。が、そこまで手順はありません。
まずは以下のコマンドで、カレントディレクトリをプロジェクト自体のフォルダ下へ変更します。
cd ProjectFolderName/ProjectName/
次に、GitLabでのプライベートリポジトリへのClone用リンクを取得します。今回はHTTPS側を選択しています。
以下のコマンドを実行します。Content
となっているところがフォルダ名となるので、お間違えの無いよう。
git submodule add https://gitlab.com/ProjectURL/content.git Content
しばらく待ちます......
もし間違えて、上記コマンドがやり直しとなった場合には、.gitmodules
と、.git/index
, .git/modules/ProjectName/(プライベートリポジトリ名)
の削除、.git/config
をテキストエディタで開いて以下の文を削除してください。
サブモジュール化の処理が終わったら、プロジェクトのパブリックリポジトリ側で.gitmodules
とProjectName/プライベートリポジトリ名
を追加変更として登録し、もしContent下のアセットが削除として差分が出ていたらそちらも登録してください。git add -A
が便利です。
これでサブモジュール化が完了しました。追加変更として登録したProjectName/プライベートリポジトリ名
にはSubproject commit xxxxxxx
と書いてあると思いますが、これはサブモジュール化したリポジトリのどのコミットまでを参照するか、という意味です。こちらはアセット用のプライベートリポジトリ側で変更のコミットがあった場合、プロジェクトのパブリックリポジトリ側でも、このコミットハッシュ値が更新されるため、同様にコミットする必要があります。
最後に
そこまで難しくはないSTEPでサブモジュール化することが可能でした。ただ、サブモジュール化は初めての方は惑う印象があるので、この手順が誰かの助けになれば幸いです。