これでもう怖くない、Git/GitHubにおけるリモートリポジトリの作成、確認、変更、更新時の基本5コマンドこっそり始めるGit/GitHub超入門(9)

本連載では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説しています。今回は、リモートリポジトリに関する基本コマンドとして、git remote -v、git remote add、git pus、git clone、git pullの使い方を紹介。

» 2017年01月26日 05時00分 公開
[平屋真吾クラスメソッド]

GitHubの「リモートリポジトリ」を触ってみよう

 本連載「こっそり始めるGit/GitHub超入門」では、バージョン管理システムGit」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説していきます。具体的な操作を交えながら解説していきますので、本連載を最後まで読み終える頃には、GitやGitHubの基本的な操作が身に付いた状態になっていると思います。

 前回の「2017年、GitHubを始めるために最低限知っておきたい各機能」ではGitHubの各機能の概要を解説しました。連載第9回目の本稿では、GitHub上に「リモートリポジトリ」を作成し、「リモートリポジトリ」に対する基本操作を試していきます。

 本稿で解説する作業を行うには「GitHubのアカウント作成」や「SSH設定」を事前に行っておく必要があります。これらの準備手順については連載第7回の「はじまりはいつもプルリク? GitリポジトリホスティングサービスGitHubとは」で解説しています。

リモートリポジトリを新規作成する

 初めに、リモートリポジトリを新規作成する手順を解説していきます。

 ローカルにあるファイルをリモートリポジトリに配置することによって、プロジェクトメンバー同士の共同作業を開始したり、異なる環境から最新のファイルを取得するための環境を整えたりすることができます。

図1 リモートリポジトリのセットアップ

ローカルリポジトリを作成する

 ローカルリポジトリを作成します。このリポジトリで管理するファイルは、後ほど作成するGitHub上の「リモートリポジトリ」に反映します。

 適当なディレクトリに移動します。そして今回の作業用のディレクトリを作成し、そこへ移動します。ここでは「hello-git-9」というディレクトリを作成しました。

$ cd /Users/hirayashingo/Documents/
$ mkdir hello-git-9
$ cd hello-git-9
$ pwd
/Users/hirayashingo/Documents/hello-git-9

 さらに、その中にリポジトリ用のディレクトリを作成し、そこへ移動します。ここでは「local」というディレクトリを作成しました。

$ mkdir local
$ cd local/
$ pwd
/Users/hirayashingo/Documents/hello-git-9/local

 Gitリポジトリを作成し、「README.md」ファイル(後述)を作成します。

$ git init
Initialized empty Git repository in /Users/hirayashingo/Documents/hello-git-9/local/.git/
$ echo "# hello-github" > README.md

 「README.md」ファイルをコミットします。

$ git add README.md
$ git commit -m "first commit"
[master (root-commit) 5fd9303] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

GitHubのGUIでリモートリポジトリを作成する

 GitHubにログインし、「Create a new ...」をクリックし、表示されるメニュー上の「New repository」をクリックします。

図2 メニュー上の「New repository」項目

 リポジトリ作成ページが表示されます。「Repository name」欄にリポジトリの名前を入力します。ここでは「hello-github」という名前を入力しました。

図3 リポジトリ作成ページ

 ページ中央にはリポジトリのタイプを選択するコントロールがあります。

 「Public」を選択すると公開リポジトリが作成されます。この場合、リポジトリの中身は誰でも見られるようになります。

 「Private」を選択すると非公開リポジトリを作成できます。非公開リポジトリを作成するには有料のプランに登録する必要があります。

 今回は公開リポジトリを作成します。「Repository name」以外の入力項目・選択項目は編集せず、「Create repository」をクリックします。

図4 リポジトリのタイプ選択

 リポジトリ作成が完了すると、リポジトリのページが表示されます。

 現在、リポジトリの中には何も入っていないため、「リポジトリ作成後によく行う操作の例」が表示されています。

図5 リポジトリ作成直後のリポジトリページ(HTTPS接続のための説明)

 SSHを使ってGitHub上にリポジトリに接続するので「SSH」をクリックします。

図6 リポジトリ作成直後のリポジトリページ(SSH接続のための説明)

 今回は、既にローカルにリポジトリが存在します。次の「リモートリポジトリを登録する」では、見出し「…or push an existing repository from the command line」の下に書かれているコマンドを使用していきます。

リモートリポジトリを登録する

 「ローカルリポジトリを作成する」で作成したリポジトリにGitHub上のリモートリポジトリを登録する作業を行います。

  • リモートリポジトリが登録済みかを確認――git remote -vコマンド

 まずは「git remote -v」コマンドを使用して、登録済みのリモートリポジトリを確認してみます。当然ですが、現時点では何も表示されません。

$ git remote -v
  • リモートリポジトリを登録――git remote addコマンド

 「git remote add <リモート名> <リポジトリURL>」コマンドを使用してリモートリポジトリを登録しましょう。「<リポジトリURL>に存在するリモートリポジトリ」が「<リモート名>という名前」で登録されます。

 GitHub上のリポジトリのURLは「git@github.com:<ユーザー名>/<リポジトリ名>.git」という形式になります。<ユーザー名>はユーザー名に置き換えてください。

$ git remote add origin git@github.com:username/hello-github.git
  • 再度、登録済みか確認

 再度「git remote -v」コマンドを使用すれば、リモートリポジトリが登録されたことを確認できます。

$ git remote -v
origin  git@github.com:username/hello-github.git (fetch)
origin  git@github.com:username/hello-github.git (push)

リモートリポジトリに反映する――git pushコマンド

 ローカルリポジトリの内容をリモートリポジトリに反映します。

 「git push <リモート名> <ブランチ名>」コマンドを使用します。<リモート名>にはリモートリポジトリ登録時に付けた名前を指定します。<ブランチ名>には反映先のブランチ名を指定します。

 以下のコマンドを実行すると、ローカルリポジトリの「master」ブランチの内容が、リモートリポジトリ「origin」の「master」ブランチに反映されます。

$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:username/hello-github.git
 * [new branch]      master -> master

 リポジトリのページへ戻り更新してみましょう。ローカルリポジトリの内容が反映されているはずです。

図7 リポジトリページ

README.mdファイルとは

 リポジトリのルートに「README.md」という名前のファイルを配置すると、図7のようにリポジトリページのファイル一覧の下にファイルの内容が表示されます。

 「README.md」ファイルを配置することによって、リポジトリに関する説明を来訪者に伝えることができます。例えば、ソフトウェアライブラリのリポジトリであれば、ソースコードをビルドする前に必要な環境構築手順や、クラスの使用例などの説明が記述されます。

 また、拡張子「.md」は「Markdown形式」の文書用の拡張子です。ファイルの内容をMarkdown形式で記述することによって、文章を構造化することができます。今回、「README.md」ファイルの内容は、「# hello-github」にしました。「# <文章>」という記述はHTML<h1>タグ相当の見出しとして扱われます。

 Markdown形式の記述は、イシューやプルリクエストのコメントでも使えます。GitHubで利用可能な記法は以下のページで解説されています。


既存のリモートリポジトリを取得する

 ここまでの作業の中で、ローカルリポジトリを元にリモートリポジトリを新規作成しました。次は、既存のリモートリポジトリをローカルに取り込む手順を解説します。

 「リモートリポジトリ上の既存プロジェクトのソースコードを取得する」「別のPCで行う作業のためにリモートリポジトリからソースコードを取得する」などのケースをイメージしてみてください。

 今回は、「リモートリポジトリを作成する」で作成したリモートリポジトリを「ローカルリポジトリを作成する」で扱ったディレクトリとは別のディレクトリに取り込みます。

図8 既存のリモートリポジトリを取得

リモートリポジトリのURLを確認する

 リモートリポジトリのURLはGitHubのリポジトリページ上の「Clone or Download」をクリックすると表示できます。

図9 リポジトリページでリポジトリURLを表示

リモートリポジトリを複製してローカルに取り込む――git cloneコマンド

 1つ上の階層に移動します。「hello-git-9」には「local」ディレクトリだけが存在する状態になっています。

$ pwd
/Users/hirayashingo/Documents/hello-git-9/local
$ cd ..
$ pwd
/Users/hirayashingo/Documents/hello-git-9
$ ls
local

 「git clone <リポジトリURL>」コマンドを使用してリモートリポジトリを複製してローカルに取り込みます。

$ git clone git@github.com:username/hello-github.git
Cloning into 'hello-github'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

 「hello-git-9」の中に「hello-github」ディレクトリが作成されました。

$ ls
hello-github    local

 「hello-github」ディレクトリの中はGit管理下になっていて、「ローカルリポジトリを作成する」で作成したファイルがあります。

$ cd hello-github/
$ pwd
/Users/hirayashingo/Documents/hello-git-9/hello-github
$ ls -a
.       ..      .git        README.md
$ cat README.md
# hello-github

 既存のリモートリポジトリを複製してローカルに取り込む操作は、これで完了です。次の「リモートリポジトリを更新する」では、リモートリポジトリを更新していく中で行う操作を解説します。

リモートリポジトリを変更・更新する

 最後に、リモートリポジトリを使用して共同作業を進めていく上で基本となる操作を解説します。

 ローカルで行った変更をリモートリポジトリに反映すれば、共同作業者が変更を確認できるようになります。リモートリポジトリの変更をローカルに取り込めば、共同作業者が行った変更をローカルで確認できるようになります。

図10 リモートリポジトリを更新

ファイルを変更・コミットし、リモートリポジトリに反映する

 「hello-github」ディレクトリ内の「README.md」ファイルを変更し、git addコマンドでステージ、git commit -mコマンドでコミットします。

$ pwd
/Users/hirayashingo/Documents/hello-git-9/hello-github
$ echo "GitHubの機能を試すためのリポジトリです。" >> README.md
$ cat README.md
# hello-github
GitHubの機能を試すためのリポジトリです。
$ git add README.md
$ git commit -m "リポジトリの説明を追加"
[master 8671af2] リポジトリの説明を追加
 1 file changed, 1 insertion(+)

 先ほど紹介したgit pushコマンドでリモートリポジトリへ反映します。

$ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 355 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:username/hello-github.git
   5fd9303..8671af2  master -> master

 リポジトリのページへ戻り更新してみましょう。「README.md」ファイルに対する変更が反映されているはずです。

図11 リポジトリページ

リモートリポジトリの更新をローカルに取り込む――git pullコマンド

 「local」ディレクトリに移動します。

$ pwd
/Users/hirayashingo/Documents/hello-git-9/hello-github
$ cd ..
$ cd local/
$ pwd
/Users/hirayashingo/Documents/hello-git-9/local

 「README.md」ファイルの内容は古いままです。

$ cat README.md
# hello-github

 「git pull <リモート名> <ブランチ名>」コマンドを使用して

リモートリポジトリの最新データを取り込みます。

$ git pull origin master
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:username/hello-github
 * branch            master     -> FETCH_HEAD
   5fd9303..8671af2  master     -> origin/master
Updating 5fd9303..8671af2
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)

 「README.md」ファイルの内容が更新されました。

$ cat README.md
# hello-github
GitHubの機能を試すためのリポジトリです。

本稿で紹介したGitのコマンド一覧

 本稿ではGitHub上に「リモートリポジトリ」を作成し、「リモートリポジトリ」に対する基本操作を試していきました。

 本記事で初めて登場したGitのコマンドは以下の通りです。

  • git remote -v:登録済みのリモートリポジトリの「リモート名」「リポジトリURL」を表示する
  • git remote add <リモート名> <リポジトリURL>:リモートリポジトリを登録する
  • git push <リモート名> <ブランチ名>:ローカルリポジトリの内容をリモートリポジトリに反映する
  • git clone <リポジトリURL>:<リポジトリURL>に存在するリモートリポジトリをローカルに複製する
  • git pull <リモート名> <ブランチ名>:リモートリポジトリの内容をローカルリポジトリに反映する

 次回の記事では「プルリクエスト」について解説する予定です。お楽しみに!

参考

  • Pro Git』(written by Scott Chacon and Ben Straub and published by Apress)
  • GitHub Help

著者紹介

平屋真吾

クラスメソッド株式会社 iPhoneアプリサービス事業部所属のプログラマーです。iOSアプリの開発がメインですが、デザインやAWSなども勉強中です。

ブログ:http://dev.classmethod.jp/author/hiraya-shingo/


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。