Git

Gitとは - Git(ぎっと)はプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システム
GPLライセンスの下で公開され自己責任の下で誰もがGitを使用することができます


Gitの使い方資料



GitHub

GitHub(ギットハブ)はソースコード管理用の分散型バージョン管理システムを使ったホスティングサービス
無料で利用できてネット内にバージョン管理したファイル置き場を作れる。その他ソーシャル的な機能も沢山あるらしい
複数の人と共同作業したり、複数のPCで異なった場所で作業する際に便利です


<本家>


SourceTreeとBitbucketを使ったプライベートGit構築

非公開のGitリポジトリを所有したい場合に良い方法である
<2013/09/27現在>

1.
Bitbucketでアカウントを作成。作成が終わったらSourecTreeのWindows版をインストール
インストーラーで初期設定の入力が求められるが基本ディフォルト設定で進めていく(Gitのインストールを求められたらインストールする事)
ある程度設定が進むとアカウントの入力を求められるのでBitBucketのアカウントを入力

2.
Bitbucketのサイト側で新しくリポジトリを作る、各種設定は以下参照(SourceTreeでも作れるが、うまく動かない…下記を推奨)

  • 名前/Name:
リポジトリの名前(収納するフォルダの名前と思ってOK。日本語はNG)
  • 説明/Description:
リポジトリに対する説明文を書く。日本語OK
  • アクセスレベル/Accesslevel:
非公開にしたければプライベートに
  • forking:
????(とりあえずディフォルト状態でOK)
  • リポジトリタイプ/Repositorytype:
ここが重要。SourceTreeはディフォルトでGitを利用するので、そのように設定する
  • プロジェクト管理/Project management:
好みで課題管理やwikiが追加できる
  • プログラミング言語/Language:
UnityScriptを選択

以上の設定でリポジトリを作成する

3.
SourceTreeアプリケーションを起動。無事起動画面が立ち上がったら左上のClone/Newアイコンをクリック
Clone/Add/CreateRepository ウインドウが表示されるので初期のCloneRepositoryタブのまま、右上の地球儀のアイコンをクリック
EditAccountsが自分のBitbucketのアカウントであることを確認
アカウントが正常に認識されているならば、先ほどBitbucketのサイト側で作ったリポジトリ名が表示される
リポジトリ名を選択した状態で右下のOKをクリック。設定が入力されたCloneRepositoryタブに戻ってくる
ここで2行目のRepositoryType:に注目。「This is a Git repository」と表示されていたら接続を認識している
(ここに赤字で何か表示されていたらリポジトリが正常に認識されていません。アカウントが正しいか確認もしくはサイトの設定を見直して修正してください)
DestinationPath:にローカルのフォルダへのパスが表示されている。ここに保存したファイルがGitされる。必要なら名前を変ても良い
設定に納得したら右下のCloneをクリック

4.
ここまで無事に設定できていればSourceTreeの左側にリポジトリ名が表示されています
このリポジトリ名の上でマウスを右クリック。メニューからShow in Explorerでローカルの作業フォルダが開く
ここにテスト用のファイルを作って置こう。unityなら作ったプロジェクトをここに配置する

5.
unityを起動して、とりあえずデスクトップにプロジェクトを作成します(今は作業フォルダ内に作らないでください)
ユニティで適当なシーンを作成。セーブする前にメインメニューからEdit->ProjectSettings->Editorを実行して
インスペクタに表示されたVersionControlをMetaFilesに、AssetSerializationをForceTextに変更します
これでテキストベースのフォーマットでバージョン管理有のユニティのデーターが扱われるようになりGitでの変更箇所を視認できるようになる
そしてシーンをセーブして。unityを一端閉じます。これでunity関連のすべてのファイルがセーブされました

6.
unityの作業上、テンポラリファイル的なものが生成されます。これらはリポジトリに保存する必要が無いので
Gitの.gitignore機能を設定してリポジトリのファイル群から排除します

ここでSourceTreeの右上の歯車の形をしたSettingsアイコンをクリック。リポジトリのセッティングが表示されるのでOKをクリックします
すると.gitignoreというファイルが作業フォルダ内に作成されます。これをメモ帳などで開いて以下のテキストを追加します

<資料>

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

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

7.
一端このファイル.gitignoreをリポジトリに送ってしまいます。Commitをクリック。Commit modeをSelected filesにして右下のCommitをクリック
次にpushします。これで.gitignore機能が有効になりました。ローカルのHDDの作業フォルダに先ほど作ったユニティのプロジェクトをコピーします

8.
コピーが終わったらSourceTree側でファイル構成の変更が認識されている筈です。コミットしてSelected filesで差分を取得。コミットを実行します
そしてコミット後、プッシュします。BitbucketサイトのGit機能で必要なファイルが仕分けられクラウド領域にファイルがコピーされます
今後はローカルのHDDの作業フォルダで作業してSourceTreeを介してBitbucketとGitします

どんなGit作業もネットワークを介してファイルのコピー等が行われます。変更はすぐに反映されないので数秒は余裕を見てください
大抵、青いバーが表示されていると正常に機能しています。何か作業上で赤字のメッセージが表示されたり数分待たされたりするのは
さすがにおかしいので、その時は設定を見直します

<おまけ>
bitbucket用のunityロゴ。バケツは画像検索から拾って適当に作ったのでどうぞみたいな…(怒られないよね?)
logoBitBucketUnity.png


注意:新しくunityでプロジェクトを作った際、必ずやること!


バージョンコントロールのオンオフはunityツール本体に記憶されません。プロジェクト単位で記憶されます
その為、新規にプロジェクトを作成した際は忘れず、バージョンコントロールの設定をします

Edit -> Projects Settings -> Editor を実行し
Version Contorol の mode を MetaFiles に
Asset Serialization の mode を ForceText にします

versionSet.jpg

SourceTree


コマンドラインが苦手なGit初心者でも容易にバージョン管理ができるGitローカルクライアント

SourceTreeSamp1.jpg

SourceTreeSamp2.jpg


機能


注意点:
巨大なUnityのプロジェクトファイルではファイルの中に10MB以上の画像ファイルなどが混じっている時があります。この場合、一度にまとめてデーターを送ってもタイムアウトでPushがリジェクトされる時があります。その場合は、それらのファイルをSelectedFilesの中からチェックを外してまず軽いデーターから渡して、何分割かに分けてPushすると巨大なプロジェクトもリモートリポジトリに送れます

  • Commit
インデックスの状態を記録する。「commit」により、その時点までの変更がローカルリポジトリ
に履歴保存される。Commit mode: でStaged Changes から Selected filesに変更すると
履歴更新するファイルが選択された状態になる。これでコミットするとローカルリポジトリに保存され更新
Pushするまではネットワーク上のリモートリポジトリには保存されていないので注意。コメントは複数行書ける

option:
・amend latest commit
直前のコミット漏れしたファイルを後から追加。直前のコミットコメントを修正出来る

  • Push
ネットワーク上のリモートリポジトリに履歴保存する

  • Pull
リモートリポジトリの内容を取得する。リモートリポジトリから最新の変更履歴をダウンロードしてきてローカルリポジトリを更新する
内部的に行われている事はFetch+Merge

  • Clone
クローンを実行するとネットワーク上のリモートリポジトリの内容をまるまるダウンロード
(変更履歴も複製される)してきて別のマシンにローカルリポジトリとして作成できる

  • Checkout
作業するブランチを切り替える。切り替えたいブランチを選択した状態でOKにすると切替完了
新しいブランチを作るにはCheckoutNewBranchタブの機能を使う

  • Branch
現在のワークツリーから新しいブランチを作る
選択したブランチを削除するなど

  • Merge
ローカルリポジトリと他のブランチをマージする。マージしたいブランチ、ノードを選択した状態でOKするとマージ完了
競合が発生していた場合は!マークのアイコンが表示される。競合のあった箇所テキストファイルにはGitが
差分を挿入しています。StagedChangesタブ内の!アイコン付きのファイルをダブルクリックして該当ファイルを開く事も可能
必要があれば修正後、コミットすると良い(このままコミットも可能)
(SourceTreeを利用している際はディフォルトで「non fast-forwardマージ」になる)

  • Fetch
リモートリポジトリの最新履歴情報取得だけを行う。ワークツリー内は更新されない!
必要であればPullもしくはMergeで細かく指定して最新履歴を取り込んでも良いし、もしくはブランチを作成して作業を分けることもできる

  • Remove
選択した過去のコミットを「打ち消す」コンソールコマンド「revert」と同様の機能

  • Terminal
コンソールコマンドでGitの複雑な編集機能を利用する事ができる

  • stash
ファイルの変更内容を一時的に記録しておく

  • Tag
タグをつける。コミットのメッセージだけでは情報不足の時に使う


tips


  • 素早く他のブランチへCheckoutするには
Branchesタブ内の該当ブランチをダブルクリックで切り替えられる
(この時、当然ワークツリーもそのブランチの状態になるので注意!)

  • 作業を過去に戻す
作業を過去に戻したい場合はCheckoutで過去のノードを辿り希望のノードを選択する。場合によりデタッチされる
(HEADだけが生成される)一時的にワークツリー内はその時の状態を反映しているので確認後、もしその場所から
作業したいならブランチを作ると良い。その場合、そこから分岐したブランチとして扱われるので基本的に非破壊
で作業が出来る

  • 履歴確認はタブを変えた際に行われる


用語


  • ワークツリー
実際に作業をしているディレクトリ

  • インデックス
コミットした際、ワークツリー → インデックス → リポジトリ を経過する
インデックスでは.gitignore等のインデックス情報が利用されリポジトリに記録される

  • ローカルリポジトリ
自分のHDD内にあるリポジトリ

  • リモートリポジトリ
ネットワーク上にあるリポジトリ

  • コミット位置
・origin/master
リモートリポジトリ「origin」のブランチ「master」の位置を表しています
・origin/HEAD
リモートリポジトリ「origin」をクローンした時にダウンロードされるコミットの位置を表しています
通常「origin/master」と同じ位置を指します
・master
ローカルリポジトリのブランチ「master」の位置を表しています

  • ブランチ
枝。履歴の流れを分岐して記録していくためのものです。分岐したブランチは他のブランチの影響を受けないため
同じリポジトリ中で複数の変更を同時に進めていくことができます

  • タグ
コミットをわかりやすく区別するために付ける注釈
SourceTreeでCommit message:で入力できるものとは別

要約


  • 基本
まずワークツリー内で作業する前に最初に「Pull」する癖を付けよう
最初にPullすればリモートリポジトリと同期できる
それから作業すれば無用なコンフリクトを避けられる

  • コンフリクト時の解決
コンフリクトが発生してPush等がリジェクトされた場合は以下のように作業する
まずPullしてリモートリポジトリから最新の変更履歴を取得。テキスト形式のファイルなら
Gitが自動的に現在のローカルリポジトリの競合ファイルとマージするので必要な編集を加え
コミットしてからpullします

  • master
リポジトリに最初のコミットを行うと、Gitはmasterという名前のブランチを作成します。
そのため、以後のコミットはブランチを切り替えるまでmasterブランチに追加されていきます

  • HEAD
現在使用しているブランチの先頭を表す名前

  • 最終更新:2013-10-09 14:11:13

このWIKIを編集するにはパスワード入力が必要です

認証パスワード