Gitは分散型バージョン管理システムと呼ばれています。これは、リポジトリを複数持つことが出来るためであります。複数というのは、サーバー上とローカル環境でそれぞれリポジトリを持つことが出来るという事です。
チームで制作を行っていく際などは特にそうですが、それぞれのメンバーがローカル環境で作業をして、それぞれのリポジトリにあげ、それをサーバー上のリポジトリに反映させ共有するという形がとられます。
Gitは「分散型バージョン管理システム」と呼ばれています。これは、リポジトリを複数持つことができる仕組みだからです。この複数持てるというのは、サーバー上とローカル環境でそれぞれリポジトリを作成できるという意味です。
これまでのレッスンで使っていた「リポジトリ」は、主にローカル環境のものを指していました。
チームで制作を行っていく際などは特にそうですが、それぞれのメンバーがローカル環境で作業をします。そして、ローカル環境のリポジトリに保存したデータをサーバー上のリポジトリに反映させ、全員で共有するという形を取ります。
ローカル環境のリポジトリは「ローカルリポジトリ」、サーバー上のリポジトリは「リモートリポジトリ」と呼ばれます。
さらに、リモートリポジトリにデータを反映する操作は「push」といいます。
今回のレッスンでは、リモートリポジトリへのpushの方法について学んでいきましょう。
今回はリモートリポジトリを「Git Hub」というツールを使い作成していきます。
まず「Git Hub」アカウントの作成をしましょう。
表示内容に従い、登録していってください。
次に「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」の内容は以下コマンドを実行してご確認ください。
# id_rsa.pubを取得
(master) $ cat ~/.ssh/id_rsa.pub
全ての入力が完了したら「Add SSH key」というボタンをクリックしてください。
登録できていれば、下図のようにSSH Keysの表示が増えます。また、先ほど打ち込んだメールアドレスにメールが届きます。
念のため動作確認を行いましょう。以下のコマンドを実行してください。
(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」を押下してください。
Create a new repositoryという画面が開きます。
「Repository name」欄にリポジトリの名前を入力します。
この欄に入力する名前は、ローカルリポジトリと同じものにしましょう。今回だと「zooloppa」ですね。
「Description」はリポジトリの説明を入力する欄になります。必須ではありませんので今回は未入力とします。また、「Public」「Private」についてはリポジトリを公開するかという部分です。今回は「Public」とします。
そして右下の「create repository」をクリックすると、リモートリポジトリが作成されます。
では、作成したリモートリポジトリを登録していきましょう。
前セクションの作業後の画面は以下のようになっているかと思います。
まず、赤枠の「HTTP」「SSH」の欄で「SSH」を選択してください。
そして、下図の赤枠内のテキストをコピー。作業しているターミナルで、コマンドとして実行してください。
(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.
GitHub(リポジトリのトップ画面)をリロードすると、以下のようにファイルが表示されます。
また、他のブランチにプッシュしたい場合は「origin」の後を希望のブランチ名にすればOKです。
新たに「login」というブランチを作成しプッシュしてみましょう。
まずは、ブランチの作成と、わかりやすく「login.html」ファイルを追加します。
(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
では、リモートリポジトリにpushしてみましょう。
(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」というディレクトリを作成しましょう。
そして、新しいローカルリポジトリを作ります。
# 1つ上の階層に移動
$ cd ../
# クローン用ディレクトリ(clone-test)を作成し、移動
$ 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.
「clone-test」ディレクトリの中に、複製した「zoolppa」ディレクトリが出来ています。
移動してみましょう。
# 「clone-test」ディレクトリに取得した「zooloppa」に移動
(master) $ cd zooloppa
ブランチを確認してみましょう。
最後に「git branch -a」としていますが、これはリモートリポジトリ上も含めてのブランチ一覧を確認しています。
(master) $ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/login
remotes/origin/master
前セクションでプッシュした「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
<h1>ログイン</h1>
(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
Githubでloginブランチを見てみても、pushされていることが確認できます。
先程は複製を作成しましたが、今度はローカルリポジトリの内容を、最新のリポジトリの内容に更新する方法を学んでいきます。
先程の「clone-test」リポジトリから、元々作成していた「zooloppa」に戻ります。
(login) $ cd ../../
$ cd zooloppa
そして「login.html」を見てみましょう。
先程の変更が反映されていませんね。
では、反映させるために「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 [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。