リモートリポジトリの使い方とは

Gitは分散型バージョン管理システムと呼ばれています。これは、リポジトリを複数持つことが出来るためであります。複数というのは、サーバー上とローカル環境でそれぞれリポジトリを持つことが出来るという事です。

吉田先生

チームで制作を行っていく際などは特にそうですが、それぞれのメンバーがローカル環境で作業をして、それぞれのリポジトリにあげ、それをサーバー上のリポジトリに反映させ共有するという形がとられます。


ローカルリポジトリとリモートリポジトリ

Gitは分散型バージョン管理システムと呼ばれています。これは、リポジトリを複数持つことが出来るためであります。複数というのは、サーバー上とローカル環境でそれぞれリポジトリを持つことが出来るという事です。

今までのレッスンでのリポジトリとは、ローカル環境でのリポジトリを指していました。チームで制作を行っていく際などは特にそうですが、それぞれのメンバーがローカル環境で作業をして、それぞれのリポジトリにあげ、それをサーバー上のリポジトリに反映させ共有するという形がとられます。

このローカル環境のリポジトリを「ローカルリポジトリ」、サーバー上のリポジトリを「リモートリポジトリ」と呼びます。また、リモートリポジトリへの反映を「push」といいます。今回のレッスンでは、リモートリポジトリへpushの仕方を学んでいきましょう。

Git Hub

今回はリモートリポジトリを「Git Hub」というツールを使い作成していきます。まず「Git Hub」アカウントの作成をしましょう。

https://github.co.jp/

表示内容に従い、登録していってください。次に「SSH Key」の設定を行います。まず「ssh-keygen -t rsa -C "your@mail.address"」コマンドを実行してください。このコマンドは基本的に1度行うだけで次回からは必要ありません。

「"your@mail.address"」の部分はご自分のメールアドレスをご入力ください。

(master) $ ssh-keygen -t rsa -C "your@mail.address"
Generating public/private rsa key pair.
Enter file in which to save the key (/xxx/xxx/.ssh/id_rsa):  #Enterを押下
/xxx/xxx/.ssh/id_rsa already exists.
Overwrite (y/n)? y   #「y」と打ちEnterを押下
Enter passphrase (empty for no passphrase):   #パスフレーズを入力
Enter same passphrase again:  #パスフレーズを再入力
Your identification has been saved in /xxx/xxx/.ssh/id_rsa.
Your public key has been saved in /xxx/xxx/.ssh/id_rsa.pub.
~以下略

次に「Git Hub」のサイトに移動します。そして、自分のアカウントボタンを押下し「Settings」→「SSH and GPG keys」と進んでいきます。すると以下のような画面に移りますので、赤枠内の「New SSH key」をクリックします。

そして「Title」欄には適当な名前を入れてください。「Key」欄には「id_rsa.pub」の内容をコピペします。「id_rsa.pub」の内容は以下コマンドを実行してご確認ください。

(master) $ cat ~/.ssh/id_rsa.pub

全ての入力が完了したら「Add SSH key」というボタンをクリックしてください。登録できていれば、先ほど打ち込んだメールアドレスにメールが届きます。念のため動作確認を行いましょう。以下のコマンドを実行してください。

(master) $ ssh -T git@github.com
Warning: Permanently added 'github.com,~' (RSA) to the list of known hosts.
Enter passphrase for key '/xxx/xxx/.ssh/id_rsa':   #パスフレーズを入力
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

「Hi username!~」となればOKです。

リモートリポジトリの作成

ではリモートリポジトリを「Git Hub」で作成していきましょう。「New repository」を押下してください。

入力欄が表示されたら、まず「Repository name」欄にリポジトリの名前を入力します。この欄に入力する名前は、ローカルリポジトリと同じものにしましょう。

今回だと「zooloppa」ですね。「Description」はリポジトリの説明を入力する欄になります。必須ではありませんので今回は未入力とします。また、「Public」「Private」についてはリポジトリを公開するかという部分です。今回は「Public」とします。そして「create repository」をクリックします。

リモートリポジトリを設定

では、作成したリモートリポジトリを登録していきましょう。前セクションの作業後の画面は以下のようになっているかと思います。まず、1つ目の赤枠の「HTTP」「SSH」の欄で「SSH」を選択してください。

そして、2つ目の赤枠内のテキストをコピーしてコマンドとして実行してください。

(master) $ git remote add origin git@github.com:username/zooloppa.git

これで、ローカルリポジトリのリモートリポジトリとして、設定する事が出来ました。

リモートリポジトリへ反映

続いて、ローカルリポジトリの内容をリモートリポジトリへ反映させていきましょう。反映させるためのコマンドは「git push」というコマンドです。

今回は最初のプッシュなので「git push -u origin master」というコマンドで実行します。この「origin」とはリモートリポジトリを指します。ですので、リモートリポジトリの「master」ブランチにプッシュするというような意味になります。

(master) $ git push -u origin master
Counting objects: 22, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (22/22), 1.91 KiB | 650.00 KiB/s, done.
Total 22 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To github.com:username/zooloppa.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

また、他のブランチにプッシュしたい場合は「origin」の後を「master」ではなく希望のブランチ名にすればOKです。では、新たに「login」というブランチを作成しプッシュしてみましょう。

(master) $ git checkout -b login
Switched to a new branch 'login'
(login) $ touch login.html
(login) $ git add login.html
(login) $ git commit -m "Create login"
[login 849293a] Create login
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 login.html
(login) $ git push -u origin login
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 238 bytes | 238.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:username/zooloppat.git
 * [new branch]      login -> login
Branch login set up to track remote branch login from origin.

これで、リモートリポジトリにも「login」ブランチが反映されました。

リポジトリの取得

ここまででは、リモートリポジトリへのプッシュについて学んできました。このセクションでは逆に、リモートリポジトリから取得する方法について学んでいきましょう。取得にはいくつかの種類があります。

まずは「clone」という、リモートリポジトリをまるまる複製したものを取得する方法です。一般的にはクローンは1度だけ行われるものです。

そして「pull」という、リモートリポジトリ上での新たな変更をローカルに取得し、ローカルのリポジトリを更新するものです。チームで作業を行っている際などには、こまめに「pull」を行い、更新された情報を自分のローカル環境に取り込み、最新の状態にしておく事が必要です。

クローン

では、クローンについて学んでいきましょう。クローンを取得する為、現在の「zooloppa」ディレクトリとは別に「clone-test」というディレクトリを作成しましょう。そして、新しいローカルリポジトリを作ります。

$ cd ../  #1つ上の階層に移動
$ mkdir clone-test
$ cd clone-test #作成したクローン用ディレクトリに移動
$ git init #新たなローカルリポジトリを作成
Initialized empty Git repository in /home/ubuntu/workspace/clone-test/.git/

では、クローン取得を行います。クローン取得の為のコマンドは「git clone」です。このコマンドの後ろに、リモートリポジトリを登録した際の「git@github.com:username/zooloppa.git」をつけます。

$ git clone git@github.com:username/zooloppa.git
Cloning into 'zooloppa'...
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 22 (delta 4), reused 22 (delta 4), pack-reused 0
Receiving objects: 100% (22/22), done.
Resolving deltas: 100% (4/4), done.

では、複製した「zoolppa」ディレクトリに移動してみましょう。

(master) $ cd zooloppa    #「clone-test」ディレクトリに取得した「zooloppa」に移動
(master) $ git branch -a  #ブランチの確認
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/login
  remotes/origin/master

最後に「git branch -a」としていますが、これはリモートリポジトリ上も含めてのブランチ一覧を確認しています。前セクションでプッシュした「login」ブランチが確認できますね。これで、クローンが出来ました。

では、ローカルのみのブランチを確認してみましょう。

(master) $ git branch
* master

ローカル環境には「login」ブランチがありません。リモートリポジトリのブランチをローカル環境に取り込むには、「git checkout -b」コマンドを実行します。そしてこのコマンドの後ろに取り込みたいブランチ名を記述します。

今回の場合「login origin/login」となります。これはリモートリポジトリの「login」ブランチを元にローカル環境に「login」ブランチを作成しているということになります。ではやってみましょう。

(master) $ git checkout -b login origin/login
Branch login set up to track remote branch login from origin.
Switched to a new branch 'login'

これでローカル環境にも「login」ブランチが作成されました。では、「login.html」に以下のタグを加えコミットとプッシュをしていきましょう。

login.html

<code class="language-html">&lt;h1>ログイン&lt;/h1></code>
(login) $ git commit -am "Add h1 to login"
[login 7c29eed] Add h1 to login
 1 file changed, 1 insertion(+)

(login) $ git push
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:username/zooloppa.git
   cec5984..7c29eed  login -> login

最新のリポジトリの内容に更新する

先程は複製を作成しましたが、今度はローカルリポジトリの内容を、最新のリポジトリの内容に更新する方法を学んでいきます。ではまず、先程の「clone-test」リポジトリから「zooloppa」に移動して、「login.html」を見てみましょう。

(login) $ cd ../../
$ cd zooloppa

先程の変更が反映されていませんね。では、反映させるために「git pull」コマンドを使い、更新してみましょう。今回、更新させたいのは「login」ブランチですね。ですので「origin login」と指定します。

(login) $ git pull origin login
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 5 (delta 2), reused 4 (delta 1), pack-reused 0
Unpacking objects: 100% (5/5), done.
From github.com:username/zooloppa
 * branch            login      -> FETCH_HEAD
   849293a..7c29eed  login      -> origin/login
Updating 849293a..7c29eed
Fast-forward
 login.html | 1 +
 1 file changed, 1 insertion(+)

これで更新されました。チームで作業する際にはこのように、共有して進めていく形になります。

まとめ

リモートリポジトリとはサーバー上のリポジトリの事を指します。ローカルリポジトリとはローカル環境のリポジトリの事です。

ローカルリポジトリの内容をリモートリポジトリに反映させる為には「git push」コマンドを実行します。リモートリポジトリをローカル環境に複製するには「git clone」を実行します。

リモートリポジトリの変更をローカル環境に反映させるには「git pull」を実行しましょう。

無料ビデオ講座のお知らせ

Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る

×