Git(ギット)の基本的な使い方。Gitの概念とGitHubリポジトリ作成。
Gitとは?
Gitとは分散型バージョン管理システムです。Gitと聞くとすぐにGitHubが頭に浮かぶかと思いますが、二つは明確に別物です。
GitはGit(ギット)という名前のバージョン管理ツールで、それをホスティング(GitHubが保有数るサーバーにGitというツールをインストールして使いやすい形でユーザに提供する)するのがGitHubです。
GitHubと同様のサービスは、BitBucket、GitLabなどがありますが、現時点ではGitHubがもっとも有名なようです。パブリックリポジトリであれば無料でアカウントが作成できるので、ぜひみなさんもアカウントを作ってみてください。
分散管理とは?
分散管理の反対の言葉は集中管理ですが、gitとは違うタイプのバージョン管理ツールにSubversion、CVSなどのツールがありますがこれらは基本的にリポジトリのミラーを自分の手元に持ってきて作業します。
イメージとしてはドロップボックスやグーグルドライブの同期ディレクトリのような形で、一つのマスター(開発者の中で共有された唯一のリポジトリ)に対して同時に変更を加えていきます。
SVNなどの中央管理型のリポジトリの場合は、完璧に変更がおわったタイミングでコミットをすることが多くなるのですが、Gitではローカルとリモートでリポジトリが別れていたり、簡単にブランチを切ったり、マージ(結合)できたりするので並行での開発が格段に楽になります。
Gitでは小さい単位でブランチを切っていくことができるので、細かい単位でのコードレビューなどにも向いておりWebアプリの開発では必須のツールになっています。
Gitの基本概念・用語
Gitには様々な概念や用語がありそれぞれを理解することがGitの理解への一番の近道なので先にざっと説明していきます。
一度では覚えきれないのでだんだんと使いながらやったり、頭でシミュレートしたりしながら覚えていきましょう。
リポジトリに関する概念
リポジトリの概念は図にするとわかりやすいので、描いてみました。シンプルな図ですが、全体を見てみると、一番自分の手元にあるワークスペースとローカルリポジトリ、リモートリポジトリの三つの概念(図形でいう四角の部分)があります。これらの関係性を先におさえておくことがgitの全体像をおさえるこつなので、先にこの図形を頭にいれておきましょう。
リモートリポジトリ
リモートリポジトリとは、GitHubやBitBucketnなどリモートのサーバ上でホスティングされているリポジトリになります。チームで開発する際にはこのリモートリポジトリがチームのマスタのソース郡になるのでこのリポジトリのプログラムを使って、本番のWebアプリケーションを動かしていきます。
ローカルリポジトリ
これはリモートリポジトリとは反対に自分のPC内にあるリポジトリで、Gitではこのリポジトリにコミットをした後に、リモートリポジトリにプッシュすることでチームのリポジトリに自分の修正や自分’の作成したブランチを反映していきます。
ワークスペース
このワークスペースが自分で直接編集を加えるスペースになります。ローカルのソースを変更するとワークスペースとローカルリポジトリとの間に差分が生まれるのでここで、変更を反映するのであればコミット(commit)、変更を取り消してローカルのリポジトリからソースを取得するのであればチェックアウト(checkout)を行います。
ファイルの状態
ここでのファイルの状態は、ローカルリポジトリとワークスペース間での話になります。
tracked( / untracked )
trackedとは追跡されたという意味です。反対に、untrackedは追跡されていないという意味で、ワークスペースには登録されていないがファイルとして存在する状態になります。自分の作業しているディレクトリに新しくフォルダやファイルを追加した場合にはこのuntrackedな状態になりまうs。
staged
ワークスペースに登録された状態ですが、ローカルのリポジトリにはまだ反映されていません。 新規のファイル(untrackedなファイル)をローカルリポジトリに反映するためには、git add でそれらのファイルをこのワークスペースに登録された状態(staged)にしなければなりません。
modified
すでにワークスペースに登録されていて、変更が加えられたファイルです。削除されたファイルやリネームされたファイルもこの状態になります。
操作の種類に関する概念など
リポジトリの概念はしっかりと抑えて欲しいですが、ここに関しては操作しながら覚えた方が早いのでざっと目を通していただけるだけで良いかとおもいます。
コミット(commit)
ローカルリポジトリに変更を反映させるためのコマンドです。新規のファイル( untracked ) なファイルはオプションをつけないとコミットできません。丁寧な手順としては、git add で一度trackedな状態にしてからコミットします。
チェックアウト(checkout)
リポジトリからファイルを取得してきたり、ブランチを取得してきたりする場合に使用します。
ブランチ(branch)
ブランチとは(枝)のことで、ソースに変更を加える際にマスターブランチを直接変更するとテストやレビューを通していないプログラムが製品に紛れ込んでしまうので、一旦ブランチを切ってそこに新しい修正を加えていきます。変更と動作確認が完了したらマスターブランチに変更を反映(マージ)することで修正をマスターブランチにとりこみます。
マスター (master)
マスターブランチのことです。リポジトリを作成したときに存在するブランチで基本的にこのブランチにあるソースを正としてバージョン管理を行なっていきます。
プッシュ(push)
ローカルリポジトリの変更をリモートリポジトリに反映させます。反映する際にはコミットされたファイルの差分を反映することもできますが、ローカルのブランチをリモートのブランチに反映させることもできます。
プル(pull)
リモートのリポジトリの内容をローカルのリポジトリに反映させます。
マージ(merge)
ブランチの変更をマージ先のブランチに反映する作業です。
Gitのインストール
今回は、Mac版のみ紹介します。
というかMacだと標準でインストールされていることも多いのでまずgitがインストールされていることを確認します。
$git --version
git version 2.14.3 (Apple Git-98)
このようにバージョンが表示されたらインストールはすんでいるのでインストールは不要です。
もし、インストールされていない場合は、
brew install git
でインストールしましょう。
基本の使い方 | GitHubのリポジトリを作成
gitを始める前に、GitHubのリポジトリを作成しておきましょう。
パブリックリポジトリなら無料でつくれるので、早めにつくっておきましょうリポジトリをつくって自分の成果物を置いておけば転職などの際にもリポジトリでアピールできるので一つはリポジトリを作っておくのをオススメします。
「皆が見れる状態でおいておくのはなんか・・・」
という人もいるかもしれませんが、大丈夫です!誰もみませんから!!gitの練習リポジトリなんかパブリックで置いている人であふれているのでそれがひとつ増えたくらいでまったく問題ありません。
リポジトリは自分のアカウントでログインした後に
「New Repository」というボタンからレポジトリをつくることができます。
画像のようにrepositoryの名前を決めたらそのままCreate Repositoryでリポジトリを作成しましょう。
基本の使い方 | ローカルにリポジトリを作成
Githubのリポジトリが作成されると次のページで次のようなコマンドが表示されると思いますがこれらのコマンドを自分のPCのターミナルで実行することでローカルのリポジトリをリモートリポジトリ(今回作成したリポジトリ)に反映させることができます。
echo "# git-sample" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/webnari/git-sample.git
git push -u origin master
リポジトリを作成したら上のコマンドを実行して、ローカルリポジトリとリモートリポジトリをリンクさせましょう。
コマンドを簡単に説明すると
これはREADME.mdというファイルを作成するコマンドです。これはgithubの文化の一つで、READMEというファイルをマークダウン形式でリポジトリに登録しておくとそのリポジトリがどんなリポジトリであるかを描いておくことができます。
例では # git-sampleとなっているますが、自分ですきに編集したファイルを登録しましょう。
echo "# git-sample" >> README.md
先ほど作成したファイルをワークスペースに登録しています。のちにこのファイルをコミットするので事前にaddしておきます。
git add README.md
次のコマンドでコミットします。-mオプションをつけると後に与えた文字をコミット時のコメントとしてとうろくすることができます。ここのコメントにはどんな変更内容かを簡潔にわかりやすく書くようにしましょう。
git commit -m "first commit"
つぎのコマンドでは、ローカルリポジトリにどのリモートリポジトリとリンクさせるかを設定します。ここでのコマンドの意味はoriginというリポジトリにhttps://github.com/webnari/git-sample.gitというurlのリポジトリを追加するという意味です。
git remote add origin https://github.com/webnari/git-sample.git
最後にローカルの変更を先ほど登録したリポジトリに登録して完了です。ここでのコマンドではoriginリポジトリにローカルのmasterブランチを反映しています。
git push -u origin master
まとめ
ここまででgitを扱うリポジトリの設定は終わりました。次回以降で基本的な操作をまとめていきます。Gitでは、masterブランチからブランチを作成、作成ブランチを編集、編集をコミットを反映、反映をマージというのが一連の流れになるのでそこで使うコマンドと考え方を次回の記事でまとめていきます。