Android Studio最速入門~効率的にコーディングするための使い方

第25回 バージョン管理 ─Git連携の使い方[前編]

この記事を読むのに必要な時間:およそ 4.5 分

リポジトリを最新の状態に保つ

いわゆるフェッチとプルの方法です。⁠そんなケースは稀ですが)リモートリポジトリを使わずローカルリポジトリのみで運用している場合は,この辺の説明は不要です。

フェッチ

リモートリポジトリの内容を確認します(ローカルリポジトリとのマージは行いません⁠⁠。リモートリポジトリの変更を確認だけしたい場合に実行しますが,メニューバーの「VCS → Git → Fetch」でしかフェッチを実行できません。あっても良さそうなんですが,"VCS Operations popup..."には "Fetch"が登録されていません。

「Changesツールウィンドウ / Logタブ」のツールバーにある「Refreshアイコンでもできそうに思えるのですが,こちらはフェッチではなくログの更新git log & git showになります。

フェッチを実行し,リモートリポジトリ側に変更があれば,図9のようにローカルとの違いを確認することができます。

図9 フェッチの結果,リモートの変更が確認できた例

図9 フェッチの結果,リモートの変更が確認できた例

アップデート(プル)

リモートリポジトリの変更を取り込みます。フェッチと異なり,アップデートはいくつか方法があります。Android StudioのVCS連係の流儀に沿えば総合コマンドの"Update Project..."を使う事をオススメします。

"Update Project..."を実行すると,図10のようなダイアログが表示されます。

図10 ⁠Update Project」ダイアログ

図10 「Update Project」ダイアログ

ここでは更新方法(Update Type)と更新前のローカル変更の待避方法(Clean working tree before update)を問い合わせてきます。それぞれの意味は表1表2の通りです。

表1 Update Typeの意味

指示名意味
Mergegit pull --no-rebase 相当を実行します。
Rebasegit pull --rebase 相当を実行します。
Branch Default.git/config[branch]セクションの設定に従います。

表2 Clean working tree before updateの意味

指示名意味
Using Stashgit stash でローカルの変更を一時待避します。
Using ShelveAndroid Studioが独自に持っている git stash 相当の一時待避機能(Shelve)を使ってローカルの変更を一時待避します(Shelveについては,後の回で紹介します⁠⁠。

Stash,Shelveのどちらを選択しても,⁠ローカルに変更があれば)アップデート前に一時待避を行い,アップデート後にその差し戻しを行います。そのため,アップデート前の状態によってはコンフリクトが起こり得ますので,その時は自力で解決してください(無難なのはローカルの変更が何もない状態でアップデートを実行することです⁠⁠。

風の噂に聞いたのですが,リモートリポジトリの変更取り込みをプル(fetch & merge)にするか,リベース(fetch & rebase)するかは,それぞれ強い主張があるようです。その点,この "Update Project..." は都度,どの方法にするか問い合わせてくるのでフェアで良いなと,個人的に思っています。

"Update Project..."を使わずに,直接プルまたはリベースを実行する場合は,それぞれ専用のコマンドを用います。

プルの場合は,メニューバーの「VCS → Git → Pull...」から行います。コマンドを実行すると図11のようなダイアログが表示されます。

図11 ⁠Pull Changes」ダイアログ

図11 「Pull Changes」ダイアログ

Gitに使い慣れた方ならば,画面下部のStrategyや各種オプションもお手のものあkと思いますが,筆者のようなGit弱者にとっては,先ほどの "Update Project..." のほうが使いやすくみえます(実際に使いやすいです⁠⁠。

リベースはメニューバーの「VCS → Git → Rebase...」で行います。

図12 ⁠Rebase branch」ダイアログ

図12 「Rebase branch」ダイアログ

図12「Rebase branch」ダイアログのオプション「Show Remote Branches」をONにしないと,リモートリポジトリを指定できませんので注意してください。その点がプルと比べて少々面倒臭いです。リベースは元々の用途があって,ついでにリモートリポジトリも対象にできるから,このようなインターフェイスになっているのかなと推測します。

リベースについては次回にもう少しだけ詳しい使い方を説明します。

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai