Corredor

ウェブ、プログラミングの勉強メモ。

Git と GitHub を始める:リポジトリの作成と初めてのコミット

書籍「GitHub 実践入門」の「3.2 実際に使ってみよう」を参考に、リポジトリを作る。ここでは、ドットインストールを見ながら書いた Ruby スクリプトファイルを GitHub にコミットしてみる。

GitHub 上でリポジトリを作成する

GitHub の画面右上の「+」印から「Create a new repository」に進み、適当なリポジトリ名を付ける。

「Initialize this repository with a README」は、チェックを入れると README.md というファイルを置いた状態でリポジトリが作られる。このファイルがあると、GitHub でリポジトリを開いたときにファイル一覧の下に Markdown 形式で表示してくれる。リポジトリの説明文とかを書くために置いておくと便利なのでチェックを付けるのをオススメ。

今回はお勉強のため、「Add .gitignore: None」「Add a license: None」のまま、「Create repository」ボタンを押す。

僕は今回、ドットインストールの「Ruby 入門」を見ながら書いた Ruby スクリプトを置いていきたいので、リポジトリ名は「DotInstallRuby」とした。すると以下のような URL が生成され、リポジトリが作成される。

git clone で GitHub 上のリポジトリをローカルに複製する

まずは GitBash より、cd コマンドでリポジトリを置くフォルダに移動する。パスの区切りは Windows のバックスラッシュではダメで、スラッシュで入力する。

以下は D:\Dev\ フォルダに移動するサンプル。

$ cd D:/Dev/

そうそう、$ というのはコンソールに表示されてる記号で、コマンドを入力した行を表現するために付けている。$ がない行は入力したコマンドに対する結果がターミナルに表示されているってこと。超初心者向けザックリ解説おわり。

そしたら上記の「DotInstallRuby」リポジトリのページから「HTTPS ▼」の右側に書かれている「HTTPS Clone URL」をコピーして、以下のように git clone コマンドを打つ。

$ git clone https://github.com/Neos21GitHub/DotInstallRuby.git

(とコマンドを打つと、以下のように経過や結果がターミナルに出力される)

Cloning into 'DotInstallRuby'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

これで D:\Dev\ フォルダ配下に「DotInstallRuby」フォルダが作成され、GitHub のリポジトリをローカルに複製 (Clone) できた。

このフォルダに cd で移動すると、プロンプト部分のパスの後に (master) とブランチ名が表示される。

.gitignore で同期対象外ファイルを設定する

リポジトリを複製した「DotInstallRuby」フォルダに、作っていたソース「Lesson1.rb」と、メモ書きをしていたテキストファイル「Memo.txt」を配置する。

コミット等の際に、「Lesson1.rb」は同期させたいが、「Memo.txt」は同期させたくないので、「.gitignore」という設定ファイルを作って、同期させたくないファイルを指定する。

touch コマンドはタイムスタンプを変更するコマンドだが、存在しないファイル名を指定すると0バイトのファイルが作れるので、これで空のファイルを生成する。

$ touch .gitignore

作成した .gitignore をテキストエディタで開いて、以下のように書いて保存。

# Memo.txt は無視する (この行はコメントアウト)
Memo.txt

その後、git status コマンドでフォルダ内に追加されたファイルを確認する。

/d/Dev/dotinstallruby (master)
$ git status

On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)

.gitignore
Lesson1.rb

nothing added to commit but untracked files present (use "git add" to track)

git add してないファイルが2つあるよー、と出ているが、同フォルダに置いてあるはずの「Memo.txt」は表示されておらず、ちゃんと無視されていることが分かる。

git status は状況確認のためによく使う。今このリポジトリがどういう状態なのかを見るには git status である。

コミットしていく

Git のコミットに関する考え方は SVN などとは少し違い、git add コマンドでコミットする対象ファイルを追加し、それから git commit コマンドで初めてコミットする、という手順を取る。

まずは .gitignore を追加し、コミットしてみる。

$ git add .gitignore

$ git commit -m "First Commit. Add .gitignore file."

[master 0c000f0] First Commit. Add .gitignore file.
1 file changed, 4 insertions(+)
create mode 100644 .gitignore

git commit"First Commit. Add .gitignore file." はコミットコメント。好きに打っていい。日本語を入れても大丈夫だけど、なんとなく英語でカッコつけたいお年頃でしたので…。

そうそう、Git のコミットコメントは、

  • 1行目の文末にピリオドを打たない
  • 2行目は空白にする
  • 3行目から詳細を書く

という暗黙のルールがある。破っても別になんともないけど、とりあえず従っておきたい (上記の例ではこれを知らずにピリオド付けちゃってる ;()。

コミットされたかどうかは git log で確認できる。

$ git log

commit 0c000f11f880b3b7fe2d40bca1c73ed38eef7be0
Author: Neos21 <mail@mail.com>
Date: Wed Jan 13 23:05:54 2016 +0900

First Commit. Add .gitignore file.

commit 91a00000b7fbed13d81db0994b5b0649765d1e4f
Author: Neos21 <mail@mail.com>
Date: Wed Jan 13 22:41:54 2016 +0900

Initial commit

確かにコミットされている。なお、「Initial commit」の方は GitHub でリポジトリ作成時に自動的に付けられたコミット。

次に、Lesson1.rb も Add して Commit してみる。

$ git add Lesson1.rb

$ git commit -m "初の Ruby コードです。"

ちなみに、ここまでバカ正直に git add の後ろにファイル名を書いてきたが、git add . とすると、その時そのリポジトリ上で差分がある全てのファイルを Add できる。

なお、ファイルの新規追加の時も、既存ファイルの内容を更新した時も、git add である。

GitHub に差分を送信する

git push で、GitHub にリポジトリにこのコミット内容、すなわち差分を送信できる。

$ git push

warning: push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

なんか注意書きが色々出てくるが、ココで「Open SSH」とかいうダイアログが出てきて、GitHub のユーザ名とパスワードを聞かれる。素直に入力。

するとコンソールにこんな表示が…

Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 969 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/Neos21GitHub/DotInstallRuby.git
92a0000..90c9b00 master -> master

どうやらできたらしい。

GitHub 上でも表示を確認。ローカルの変更が反映されている。やったー!

以上でリポジトリの作り方と初めてのコミットまでは終わり。

まとめ

  1. GitHub でリポジトリを新規作成
  2. git clone (Clone URL) でローカルにリポジトリを複製
  3. (ファイルを追加したり更新したり)
  4. git status でリポジトリ内の差分状況などを確認
  5. git add (ファイル名) でファイルをコミット対象に設定
  6. git commit -m "(コメント)" でコミットする
  7. git log でコミットの履歴を確認
  8. git push で GitHub に差分を送信する

今回はブランチを分けてもいないし、「こういう場合はどうしたら?」といったことは全部無視、各コマンドのオプションも使いこなしていないので、まだまだ初歩も初歩。でもとりあえずここまでで、GitHub にソースを置くための基本形を学ぶことができた。

ところで、GitBash のデフォルトのフォントは Lucida Console とかいうヤツになってて、日本語がちっちゃくなっちゃうので、MeiryoKe_Gothic にしてみた。良い感じ。