必見の記事

今さら聞けないXcodeのバージョン管理 Gitの基本的な使い方からGitHubへソースコードを公開するまで

2013.10.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今さらですがXcodeでGitを使ったバージョン管理の仕方をいろいろ調べたので調査結果をまとめたいと思います。調査した環境は以下になります。

  • Mac OS X 10.8 Mountain Lion
  • Xcode 5.0

XcodeでのGitの使い方の記事なので、Gitって何?もしくは バージョン管理って何?という方は以下の記事を見た後でご覧ください。

ガチで5分で分かる分散型バージョン管理システムGit

目次

ローカルリポジトリ

準備:ローカルリポジトリの作成

まずはバージョン管理するプロジェクトを作成しましょう。今回、テンプレートは Command Line Tool を使っています。最後にGitのローカルリポジトリを作成するかどうかを聞かれるのでチェックを入れておいてください。

xcode_git_11


プロジェクトが作成できたら main.m を変更していきましょう。最初から「Hello、 World!」をログに出力するソースがありますので、「こんにちは、世界!」にして保存します。すると以下のようにファイルに「M」というマークが付きます。追加の場合は「A」になります。

xcode_git_12


バージョンエディタに切り替えると修正点を確認できます。バージョンエディタへの切り替えは右上のボタンで行います。

xcode_git_37

コミットする

修正した箇所をローカルリポジトリにコミットしましょう。コンテキストメニューからコミットすることができます。

xcode_git_14


変更点を確認して問題なければコメントを入れてコミットします。

xcode_git_15

部分的にコミットしないこともできます。

xcode_git_41

ソースコードの変更を破棄する

ファイルの一部分を戻したい場合

バージョンエディタを開いて下さい。ローカルリポジトリとの差分が表示されます。戻したい箇所でDiscard Changeを選択すると戻せます。

xcode_git_19

ファイルごと戻したい場合

戻したいファイルを右クリックしてコンテキストメニューのDiscard Changesを選択します。

xcode_git_33

変更したファイルすべて戻したい場合

Source ControlメニューからDiscard All Changes...をクリックするとプロジェクト内の変更したファイルすべて元に戻ります。

変更履歴を確認する

バージョンエディタをログモードに切り替えると変更履歴を確認できます。

xcode_git_34


ちょっと分かりづらいのですがShow 1 modified fileという箇所をクリックすると1つ前のバージョンとの差分を見ることができます。

xcode_git_32


xcode_git_36

以前のバージョンとの差分を確認する

ローカルのソースコードと以前のバージョンとの差分を見たい場合があるかもしれません。そのような場合はまずバージョンエディタを開いて矢印のボタンを押します。

xcode_git_38


以下のようにタイムラインが表示されるので右側のスライダーを戻したいバージョンに合わせます。

xcode_git_18


部分的にですが以前のバージョンの状態に戻すこともできます。タイムライン上で右側を戻したいバージョン、左側をローカルにしてからタイムラインを閉じ、Discard Changeして戻します。

リモートリポジトリ

次はリモートレポジトリを使ってみたいと思います。リモートレポジトリはGitHubを使いたいと思います。 GitHubを使うにはアカウントが必要なので持ってない方は以下のサイトで作って下さい。

GitHub · Build software better, together.

準備:リモートリポジトリの作成

リモートリポジトリの作成はXcodeからはできないので今回はGitHubのクライアントツールを使います。GitHubのクライアントツールを使うと公開鍵ペアの作成とGitHubへの公開鍵の登録を自動でやってくれるので便利です。リポジトリの作成も簡単にできます。以下のサイトからダウンロードして下さい。

GitHub for Mac

xcode_github_4


インストール後、起動するとGitHubのアカウント情報を求められるので入力します。その後、ローカルリポジトリを探してくれるので、リモートリポジトリを作成したいプロジェクトにチェックを入れてDoneボタンを押します。

xcode_github_1


ローカルリポジトリの一覧が表示されるので先に進みます。一覧に追加したい場合はプロジェクトフォルダをドラッグ&ドロップすると追加できます。

xcode_github_2


Push to GitHubのボタンを押下するとリモートリポジトリが作成されます。

xcode_github_3


上記以外の方法としては先にGitHubでリモートリポジトリを作成してから登録することも可能です。Source ControlメニューからConfigureをクリックします。

xcode_git_45

以下のようなウインドウが表示されるのでボタンでリモートリポジトリを追加できます。GitHubのクライアントツールを使わない場合は自分で公開鍵ペアを作成して公開鍵をGitHubに登録する必要があります。

xcode_git_46

リモートリポジトリを複製する(Clone)

リモートレポジトリからローカルリポジトリを作成します。Source ControlメニューからCheck Out...を選択してください。以下のようなウインドウが表示されます。

xcode_git_25


GitHubのサイトでURLを参照できるのでコピペしてNextボタンを押して下さい。HTTPS、SSH どちらでもCloneできました。


リモートリポジトリを更新する(Push)

リモートレポジトリを更新します。Source ControlメニューからPush...を選択してください。

xcode_git_21


ブランチを選択してPushボタンを押します。

xcode_git_22


ローカルリポジトリにコミットする際に一緒にPushすることもできます。以下の画面で左下のチェックボックスにチェックを入れます。

xcode_git_31

リモートリポジトリから変更を取り込む(Pull)

リモートレポジトリの変更を取り込みます。Pullするとソースコードだけでなく変更履歴も取り込まれます。Source ControlメニューからPull...を選択してください。

xcode_git_23

Pullしたソースコードはローカルリポジトリに自動でコミットされるのでどこが変更されたか確認したい場合はローカルリポジトリの変更履歴を確認してください。

リモートリポジトリとの競合を解決する

自分が修正したソースコードをPushしようとした際に他の人がすでに更新済みの場合、競合が発生します。

xcode_git_29


この場合、前にPushした人の更新がなくならないよう自分の変更したソースコードにマージする必要があるのでリモートリポジトリからPullして下さい。他の人が変更した箇所がローカルで更新した箇所と違う箇所の場合は自動でマージされますが、同じ箇所の場合、以下のような画面になり手動で解決する必要があります。下に4つボタンがありますが、どれか選択するとPullすることができるようになります。

xcode_git_44


4つのボタンの意味は簡単に説明すると左から以下のような意味になります。

  • ローカルのソースコードの後にリモートのソースコードを差し込む
  • ローカルのソースコードのままにする
  • ローカルのソースコードをリモートのソースコードに置き換える
  • ローカルのソースコードの前にリモートのソースコードを差し込む

その他メモ

他に色々調べて知ったことです。

Xcodeで使えないGitの機能は?

Gitに関して私はあまり詳しくないのですが、知ってる機能でXcodeで(多分)使えないものを挙げていきます。 この機能を使いたい場合はコンソールを使うことになります。

  • リモートリポジトリの作成
  • ファイルを指定してバージョン管理の対象から外す
  • reset 指定したリビジョン以降のコミットをすべてなかったことにします。変更履歴は残りません。
  • revert 指定したリビジョンのコミットを破棄します。変更履歴が残ります。

更新者の名前ってどこから取ってきてるの?

変更履歴に更新者の名前が出ています。これはどこからとってきた値なのでしょうか?ちょっと色々弄ってみた感じではMacのログインアカウントっぽいです。アカウントを変えたら更新者の名前も変わりました。ソースファイルを生成すると一番上に Created by 名前 というコメントが表示されていますがここと同じではないかと思います。

スナップショットに関して

バージョン管理システムではありませんが、Xcodeではソースコードのスナップショットをとることができます。FileメニューのCreate Snapshot...をクリックすると以下のような画面が表示されます。

xcode_git_43


取得したスナップショットはオーガナイザから確認することができます。

xcode_git_42

まとめ

最初、分散型のバージョン管理システムは面倒というイメージがあったのですがやってみたら意外と簡単でした。今回紹介した機能は基本的なものに絞ってますが、実際の開発ではブランチを使うこともあるとは思いますので次の機会ではその辺りを書いていきたいと思います。最後に現在、弊社のブログではiOS 7の特集をやってますので興味がある方はこちらもぜひご覧ください。

iOS 7特集ページはこちら