Help us understand the problem. What is going on with this article?

Windows/macOS/Git/Unity Collaborateを併用する

  • Git 2.24
  • Unity 2019.2.19f1

この記事の目的

  • Unityを使った協業について、プログラマ側はGit デザイナ側は Unity Collaborate を利用していくスタイルを実現する為の環境設定について述べる

tl; dr

  • Unity Collaborate を master として扱う
  • テキスト系のアセットは基本的に全部 lf(Unix式) を改行コードとする
  • デザイナ側は特に何もする必要はない
  • Windows 側の プログラマは git config --local core.autocrlf input
  • macOS 側は特に何もする必要はない

背景

 Git はとても便利で優秀なツールなのですが、知らない人にとっては地獄です。学べば解決する話ですが、学習が容易ではない人を雑に否定することもできません。そこで、デザイナには Unity Collaborate を使ってもらうこととしました。

 しかし Unity Collaborate は Git ではなく、それぞれが相互に運用できるように作られていません。そこで、どうすればそれぞれ仲良くできるのか試行錯誤した結果をここに記します。

小技の紹介

.collabignore

 Unity Collaborate で、管理しないファイルを指定する方法です。

 プロジェクトのルートフォルダにのみ存在できることに気をつけてください。ルートフォルダというのは Assets フォルダの直下ではなく Assets フォルダが置いてあるフォルダです。

 この運用モデルの場合、デザイナ側に不必要なもの(そして、ただ存在するだけでUnity Editorの動きが悪くなるもの)をこれで指定することができます。

.gitignore

 Gitで管理しないファイルを指定する方法です。有名すぎるので説明を省略します。

.gitattributes

 Git の側で、どのファイルをテキストとして扱うのかを明示的に設定するファイルです。とりあえずはこう書いておけば間違いないです。

*.cs        text

Windows において、テキスト系のファイルを取得するときに改行コードを自動変換せず、コミット時に cr+lf を lf として解釈させる

git config --local core.autocrlf input

 この指定です。input は、チェックアウトするときはそのまま、コミットする際に改行コードの変換を行う指定を意味します。

 true にすると、チェックアウトするときに lf -> cr+lf を行い、コミットするときに cr+lf を lf としてファイルを格納します。

 false にすると、チェックアウトにもコミットにも一切の変換を行いません。

運用について

  • デザイナは Unity Collaborate のみを使う
    • デザイナごとに、作業するフォルダを明確に分けておくと衝突しないので良い。また、プログラマともフォルダが明確に分かれていると良い。
  • プログラマは Git のみを使う
    • いつも通りの運用です。
  • Unity Collaborate と Git を両方を使い、両方の変更をまとめていく管理者をプログラマ側にひとり用意する
    • この人が頑張ります
    • 運用方針としては Unity Collaborate = Git の master となるように頑張ります。
      • master じゃなくても master 的なものを目指します(便宜的に本文書では master と呼びます)
      • 単純に言うと Unity Collaborate の最新を Restore したときに、それと master の最新が一致する状態を目指します。
      • 同様に Git から最新の master を持ってきたときに、それが最新の Unity Collaborate の状態となることを目指します。

Unity Collaborate と Git をまとめる手順

 手順と言うほどのことではありませんが、書き出すとこうなります

  1. master ブランチにする。
  2. Unity Collaborate 側(デザイナ側)の変更があったら、それを Update してこちらに引っ張ってくる
  3. この Update で得られたものを Git 側に commit する
  4. Git 側で共有したい変更を master に merge する
  5. merge した内容を modified として Unity Collaborate 側へ publish する

 このときに、このまとめ作業を行うマシンが Windows だと(macOS を使っているプログラマが混在していて autocrlf の設定が true だと)master の最新を checkout したときに、改行コードが自動的に変換されてしまい Unity Collaborate の最新と異なってしまうハマりに遭遇し、地獄になるわけです。

結論

  • みんな Git を使えるようになって欲しい
  • Git は色々設定項目があるので、最悪でも Git 側の色々設定を変更することによって無理矢理解決できることがぼちぼちある
  • 歴史的経緯とはいえ、改行コードが異なっているの本当につらい。次の次の世代くらいには解決していて欲しい
  • Unity Collaborate はシンプルですが、それゆえにものすごく強力で便利なものでもあるので Git などの外部管理にこだわらずに採用できるか考えてみると良いかもしれません
  • Unity Collaborate ももっとオプションとか機能とか増やして欲しい…… Cloud Build に連携しなくていいので、もっとローカルなエリアで動いてくれたら嬉しい……
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした