PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

SVN ゲームエンジンのプロジェクトを管理しよう

環境

Windows10
TortoiseSVN 1.9.6
Unity 2017.1.0f3
Unreal Engine 4.19.0


概要

VCSを仕事でも趣味でも使っていなくて、興味はあるけどどうしたらいいか分からない。
そんな人向けのローカルでのバージョン管理の続きです。

前回
papersloth.hatenablog.com


Unityプロジェクトを管理してみる

今回はリポジトリの作成、チェックアウトまで済んだところから始めます。
チェックアウトしたフォルダ内にUnityプロジェクトを作成しましょう。

前回同様に先ずは追加から。
f:id:PaperSloth:20180321151701p:plain

最初にプロジェクトを作成した段階だと
Asset以下とProjectSettingsを追加しましょう。
f:id:PaperSloth:20180321151912p:plain

さて、Unityで管理するデータですが全てを管理する必要はありません。
そこで、前回紹介できなかった無視リストの活用をしてみましょう。

無視リストの活用

先ずはLibraryフォルダ以下のデータをバージョン管理から除外します。
無視リストに追加されたデータは今後追加、コミットをする際の選択肢から除外されて管理がしやすくなります。

無視リストへの追加は下図のように2種類あります。
Library
Library (recursively) または Library (再帰的)

この2つの違いですが、再帰的を選択すると
このフォルダだけでなく、すべてのサブフォルダも同様に無視されます。
この機能はSVN1.8以上が必要になります。

今回は通常のLibraryを無視リストへの追加を選択します。
f:id:PaperSloth:20180321152109p:plain

するとLibraryフォルダから ? マークが消えました。
これでバージョン管理外のデータとして扱う事ができます。
f:id:PaperSloth:20180321152702p:plain

同様にTempフォルダも管理する必要が無いため、無視リストに追加してしまいましょう。

あとは必要なデータだけをコミットして完了です。
f:id:PaperSloth:20180321152849p:plain

Diffツールの活用

この時無視リストに追加したデータは(ProjectName)フォルダに記入されています。
コミット画面にある(ProjectName)ここではNewUnityProjectフォルダをダブルクリックしてみましょう。
するとTortoiseMergeというツールが立ち上がります。
左画面が変更前のデータ、右画面が変更後(今回変更した)データになります。
Library, Tempが追加されていることが確認できますね。
f:id:PaperSloth:20180321153437p:plain

今回は無視リストと差分の見方について紹介しました。
もう少し作業を続けてみましょう。
続いてPlayerControllerのスクリプトを追加しました。
f:id:PaperSloth:20180321154125p:plain

これでコミットしようとすると色々とデータが増えていますね。
今回は.vsとobjが必要ないのでまた無視リストに追加します。
無視リストへの追加はコミットのメニューからも行えます。
しかし、メニューが4種類になっていますね。
"*"を選択してしまうと
プロジェクト以下のバージョン管理したいデータも無視リストに加えてしまいます。
ここでは.vsを選択します。
f:id:PaperSloth:20180321154416p:plain

同様にobjも無視リストに加えましょう。
これで随分とスッキリしましたね。
さて、状態のところがバージョン管理外となっているので、これらも追加をしてやる必要がありますね。
f:id:PaperSloth:20180321154745p:plain

ですが、追加を行わなくても下図のように選択してコミットを行うことで追加とコミットをまとめて行ってくれます。
f:id:PaperSloth:20180321154932p:plain
f:id:PaperSloth:20180321155106p:plain

続いて先程さらっと流してしまった差分の見方についてもう一度おさらいをしましょう。
PlayerContollerを先程作成してコミットしましたね。
あのクラスに少しを変更を加えて差分を確認してみましょう。
f:id:PaperSloth:20180321155410p:plain

先程コミットしたので、状態がバージョン管理外から変更になっていますね。
PlayerContollerをダブルクリックしてTortoiseMergeを開いてみましょう。
左側が変更前の元データで右側が変更後の現在のデータでしたね。
削除した行はグレーで表示され、変更された箇所は黄色で表示されていることが確認できます。
f:id:PaperSloth:20180321155547p:plain

変更の取り消し

続いて変更の取り消しについて紹介します。
バージョン管理を使う理由の1つですね。
先程差分の確認方法について確認しましたね。

ですが、作業前のデータに戻したいという場合もあるでしょう。
そういった場合は下記のように変更の取り消しから変更を元のデータに戻すことができます。
f:id:PaperSloth:20180321160308p:plain
f:id:PaperSloth:20180321160351p:plain

Logの確認方法

時には過去の変更履歴を確認したいこともあるでしょう。
そういった場合はログを表示から確認することができます。
f:id:PaperSloth:20180321160728p:plain
f:id:PaperSloth:20180321160920p:plain

特定リビジョンに戻る

ログから戻りたいリビジョンを選択することでそのリビジョン状態へと戻すことが出来ます。
f:id:PaperSloth:20180321161214p:plain


UE4プロジェクトを管理してみる

基本操作等はUnityと同様ですので、一旦上のUnityの内容に目を通している前提で進めます。

Unity同様にリポジトリの作成、チェックアウトまで済んだところから始めます。
チェックアウトしたフォルダ内にUE4プロジェクトを作成しましょう。
今回はC++の空のプロジェクトで行います。
f:id:PaperSloth:20180321161947p:plain

Unityの時と同様に先ずはプロジェクトを追加します。
f:id:PaperSloth:20180321162359p:plain

無視リストの活用

UE4では.vs, Binaries, Intermadiate, Saved, sln, VC.db, .opendbはバージョン管理の必要がありません。
これはPluginでも同様です。
逆を言ってしまえばConfig, Content, Source, uproject, upluginだけ管理すればいいわけですね。
f:id:PaperSloth:20180321162725p:plain

(ProjectName)フォルダの差分を確認して、無視リストが更新されていることを確認しましょう。
sln, db等はそのファイルだけでなく拡張子ごとまるまる無視リストに追加しています。
f:id:PaperSloth:20180321163048p:plain

また、ContentフォルダのCollections. Developersフォルダも不要であれば無視リストに追加しましょう。
f:id:PaperSloth:20180321163729p:plain

UE4で管理するデータはこれだけになりました。
最初に比べて随分とシンプルになりましたね!
f:id:PaperSloth:20180321163859p:plain

UE4との連携

UE4ではPluginとしてSVNとの連携がサポートされているため、こちらも活用しましょう。
今度はUE4側での操作となります。
Connect to Source Controlを選択しましょう。
f:id:PaperSloth:20180321164204p:plain

すると下図のようなWindowが開くので
ProviderをSubversion
Repository, UserNameを指定しましょう。
f:id:PaperSloth:20180321164415p:plain

接続がうまく行けばSource Controlアイコンが緑になり、下図のような情報が出てきます。
f:id:PaperSloth:20180321164624p:plain


まとめ

UnityとUE4の実際のバージョン管理を交えつつ紹介させていただきました。
まだまだ紹介しきれていない機能があるんですが
とりあえず個人で簡単にバージョン管理を行う場合や練習としてはこれで必要十分だと思います。

バージョン管理したことがないという人は是非ともこの機会に挑戦してみてください。

また、+や?などのアイコンがファイル上に出ないということがあると思います。
これはDropboxやOneDriveなどのIconOverlayの優先度の問題で結構対処が面倒な問題です。
レジストリを書き換えたりしないといけないこともあります。
subversion icon overlays not showing
でググってみてください。