CodeZine(コードジン)

特集ページ一覧

Gitでリモートリポジトリを操作する

Windowsユーザー向けGit入門(5)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/09/19 14:00

目次

リポジトリを複製する(クローン)

 前節では共有リポジトリの作成を解説しましたが、通常の開発では、すでにリポジトリが用意されている場合の方が多いと思います。そのような場合は、作業を開始するにあたって、共有リポジトリであるリモートリポジトからローカルリポジトリに複製(クローン)を行います。これは、SVNで言うところのチェックアウト操作に相当します。分散バージョン管理システムであるGitでは、作業開始時にSVNのように作業コピーを取得するわけではなく、リモートリポジトリを丸ごと複製するのです。

 cloneコマンドに共有リポジトリのURLを指定すると、リポジトリが複製されます(リスト3)。

リスト3 リポジトリの複製
$ git clone //magi/share/repos/sample.git
Cloning into 'sample'...
done.

 複製されたローカルリポジトリが、どのリモートリポジトリと関連付いているか確認するためには、remoteコマンドを実行します。複製直後には、必ず1つ「origin」という名前が見えるはずです。これは複製元のリポジトリに自動でつけられる名前です。さらに詳細な情報を表示するためには、remote show originと入力します

リスト4 リモートリポジトリの表示
$ cd sample
$ git remote
origin
$ git remote show origin
* remote origin
  Fetch URL: //magi/share/repos/sample.git
  Push  URL: //magi/share/repos/sample.git
  HEAD branch: master
  Remote branches:
    bugfix tracked
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

 複製したリポジトリは、前回までに説明したローカルリポジトリへの操作で、ファイルの追加/削除/修正/マージ/コミットなどを操作できます。

 さて、GUIでリポジトリを複製する場合は先ほど説明した図3において、クローン先のリポジトリにリモートリポジトリを指定し、リポジトリの種類に[個人リポジトリ]をチェックすれば複製できます。

修正を反映する(プッシュ)

 ローカルリポジトリでの修正内容を共有リポジトリに反映するためには、プッシュ操作が必要です。反映を行いたい修正は、あらかじめローカルリポジトリへコミットしておく必要があります。例えば、何らかのファイルを修正しコミットした状態をstatusコマンドで確認すると、ローカルリポジトリ側が1コミット進んでいることが確認できます(リスト5)。

リスト5 コミット直後のステータス
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean

 このコミット内容を共有リポジトリに反映するには、pushコマンドを利用します。引数にはリモートリポジトリ名とブランチ名を指定します。

リスト6 リモートリポジトルへのプッシュ操作
$ git push origin master
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 392 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
To //MAGI/share/repos/sample.git
   00e579c..f97757c  master -> master

 上記引数の意味はoriginという名のリモートリポジトリ(最初に複製したリポジトリ)のmasterブランチに対して反映を行うという意味です。共有リポジトリ側に修正が入っていなければ、プッシュ操作は正常に完了するでしょう。

 プッシュ操作をGUIから確認してみます。図4は、ローカルリポジトリへ修正をコミットした直後のGitブラウザです。masterブランチが、origin/materブランチより先に進んでいることが確認できます。origin/masterブランチとは、リモートリポジトリとローカルリポジトリを紐付ける特殊なブランチで、追跡ブランチと呼ばれます。これは、複製したときに自動的に作成されるリモートリポジトリの内容を保持しているブランチだと考えてださい。とすると、複製した時点から1コミット進んでいるという意味が理解できるかと思います。

 プッシュ操作は、上矢印のボタンもしくは、[Gitコマンド]-[Push]を選択します。プッシュ確認ダイアログが表示されますが、そのまま[Push]ボタンをクリックすれば操作完了です。

図4:プッシュ操作
図4:プッシュ操作

 masterブランチと、追跡ブランチorigin/masterが同一コミットを指していることが確認できるでしょう(図4)。

修正を取り込む(プル)

 リモートリポジトリ側での修正内容を取り込むには、フェッチまたはプル操作を行います。フェッチ操作は、リモートリポジトリの修正内容をローカルリポジトリに取り込みますが、作業ディレクトリには影響を与えません。修正内容を作業ディレクトリに取り込むには別途マージ操作を行う必要があります。一方プル操作はフェッチとマージ操作を同時に行います。

図5:プッシュとフェッチ、マージの概念図
図5:プッシュとフェッチ、マージの概念図

 プル操作を行うには、pullコマンドを利用します。続いてリモートリポジトリ名とブランチ名を指定します(リスト7)。競合する修正などなければ問題なくとりこまれるでしょう。出力結果によりファストフォワードによってProgram.csに修正がマージされたのが確認できます。

リスト7 リポジトリへの取り込み
$ git pull origin master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From //MAGI/share/repos/sample
 * branch            master     -> FETCH_HEAD
Updating b73b13e..f525efd
Fast-forward
 Program.cs | 5 +++++
 1 file changed, 5 insertions(+)

 GUIから操作する場合は、Gitブラウザの下矢印ボタンから[Pull(リモートから取得)]を選択します。プル操作のダイアログが表示されるため、マージオプションに[現在のブランチと取得したブランチをマージする]にチェックを入れて、[Pull]ボタンをクリックすれば取り込まれます(図6)。

図6:プル操作
図6:プル操作

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windowsユーザー向けGit入門

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5