「Gitが何なのかよく分からない」
「業務でGit使っているけどよく詰る」
「なんかいろいろ英語でやるよーだけどわかんないから読んでない」
「実際のコードに触れてみたもののよく分からず使うのをやめてしまった……」
といった人向けに、Git/GitHubの基本的な概念と使い方を、なるべくわかりやすく説明します。この記事を読むことで、
- かんたんなGitの使い方ができる
- 複数人での協調作業ができる
- わからないことがあったときにgoogleで「どんな単語で調べていいのか」がわかる
このようになるといいですね。
目次
Git/GitHubとは
Git(ギット)とは、ソースコードのバージョン管理をするための仕組みの一つです。OS Linuxのソースコードを管理するために開発されました。
現在、ソースコード管理はGitが第1選択肢となっているため、Webエンジニアなら使えて当然とされる技術です。
Gitと聞くとすぐにGitHub(ギットハブ)が頭に浮かぶかと思いますが、二つは明確に別物です。Gitをホスティング(GitHubが保有するサーバにGitというツールをインストールして使いやすい形でユーザに提供する)するのがGitHubです。
GitHub上にソースコードをホスティングすることで他の開発者と一緒にコードのレビューを行ったり、プロジェクトの管理をしながら、ソフトウェアの開発を行うことができます。
チーム開発には欠かせないGitは、HTML・CSS・JavaScriptなどのコードを管理するためのツールで、世界的に定評があります。
極端な話、Gitを使えるようになったからと言って、デザインが上手くなったり、すごいJavaScriptが書けたりするわけではありません。デザインやプログラミングのテクニックとは、あまり関係がないスキルなのです。
ただし、もしあなたが何かコードを書く仕事に携わるのであれば、どんなデザインやプログラミングのスキルよりも先に、Gitを使えないと仕事に参加できない可能性があります。
そればかりか、Gitを使いこなすことで本業のコーディング効率を大幅にアップさせることができるんです!
バージョン管理をしないときのデメリット
どのファイルにどのような変更が行われているか、ファイルの中身を確認しないとわかりません、
基本的には同じファイルを同時に編集できません。
意図しない上書きで、編集内容が消えてしまうこともあります。
ファイル名を日付で管理するといった経験はありませんか?
バージョン管理を行うときのメリット
ソースコードの変更履歴を残して、誰がいつ、どのファイルのどの場所を編集したか簡単に管理できます。
学習サイトのご紹介
「サルでもわかるGit入門」は、Gitをつかってバージョン管理ができるようになるための学習サイトです。名前のとおり分かりやすく節目してある入門編から逆引き編まで準備されています。
Gitの特徴
- 最近はGitが特に普及が進んでいる。
(バージョン管理システムはGitの他にもSubversionやMercurialなどいくつかある) - ローカルリポジトリと、リモートリポジトリをもつ
- 分散型
リポジトリとは
ファイルを管理するデータベースをリポジトリと言います。
ローカルリポジトリとリモートリポジトリ
ローカルリポジトリとは (Git)
- 各開発担当者それぞれがローカル環境に保持するリポジトリ
リモートリポジトリとは (GitHub)
- すべての開発担当者で変更内容を共有する
分散型
バージョン管理システムのうちSubversionやSVNなどの集中型のリポジトリの場合は、完璧に変更がおわったタイミングでコミットをすることが多くなるのですが、分散型のGitではローカルとリモートでリポジトリが別れていたり、簡単にブランチを切ったり、マージ(結合)できたりするので並行での開発が格段に楽になります。
このように開発者Aと開発者Bそれぞれで、ローカルリポジトリ(パソコン)をもっています。各開発担当者はローカルリポジトリへ変更内容を登録します。
これをcommitといいます。
サーバー上にあるリモートリポジトリ(GitHub)へ変更内容を送信します。これをpushといいます。
リモートリポジトリ他の開発担当者の変更内容を取得したいときは、サーバー上にあるリモートリポジトリを受信します(ダウンロード)、これをpullといいます。
基本的な操作の流れと用語
流れ
作業ツリー、作業ディレクトリ |
↓ git add ステージする、インデックスする
ステージングエリア、インデックス |
↓ commit コミットする
ローカルリポジトリ |
↓ push プッシュする
リモートリポジトリ |
-
プログラムを変更
作業ディレクトリでソースを変更後ステージします -
変更をまとめる
何度かソース変更を繰り返します -
変更を記録する
コミットしてGitが管理しているローカルリポジトリに変更を反映させます(commit) -
変更を共有する
プッシュしてローカルリポジトリの変更をリモートリポジトリに反映させます(push) -
変更内容を受信
リモートリポジトリにある他の開発担当者の変更内容を取得したい時はサーバ上にあるリモートリポジトリの変更内容を受信(pull)
用語
リポジトリに関する概念
- ワーキングツリーとは・・・最新のファイルの状態
- ステージとは ・・・コミットするためのファイルの状態
- ローカルリポジトリ・・・ファイルの変更履歴を手元で管理
- リモートリポジトリ・・・ファイルの変更履歴をPJメンバー全員で管理
ファイルの状態
- tracked( / untracked )
trackedとは追跡されたという意味です。反対に、untrackedは追跡されていないという意味で、ワークスペースには登録されていないがファイルとして存在する状態になります。自分の作業しているディレクトリに新しくフォルダやファイルを追加した場合にはこのuntrackedな状態になります - staged
ワークスペースに登録された状態ですが、ローカルのリポジトリにはまだ反映されていません。
新規のファイル(untrackedなファイル)をローカルリポジトリに反映するためには、git add でそれらのファイルをこのワークスペースに登録された状態(staged)にしなければなりません - modified
すでにワークスペースに登録されていて、変更が加えられたファイルです。削除されたファイルやリネームされたファイルもこの状態になります
操作の種類に関する概念など
- add:「ワーキングツリー →ステージ(インデックス)」への反映
- commit:「ステージ → ローカルリポジトリ」への反映
- push:「ローカルリポジトリ → リモートリポジトリ」への反映
- pull: 「リモートリポジトリ → ローカルリポジトリ」への反映
- merge: ブランチの変更をマージ先のブランチに反映する作業です
- checkout: リポジトリからファイルを取得してきたり、ブランチを取得してきたりする場合に使用します
- branch:
ブランチとは(枝)のことで、ソースに変更を加える際にマスターブランチを直接変更するとテストやレビューを通していないプログラムが製品に紛れ込んでしまうので、一旦ブランチを切ってそこに新しい修正を加えていきます。変更と動作確認が完了したらマスターブランチに変更を反映(マージ)することで修正をマスターブランチにとりこみます。 - master:
マスターブランチのことです。リポジトリを作成したときに存在するブランチで基本的にこのブランチにあるソースを正としてバージョン管理を行なっていきます。
Gitの使い方
Gitの環境構築・初期設定
Gitのインストール
今回は、Mac版のみ紹介します。
(Windowsの方は説明の詳しいこちらをご覧ください)
というかMacだと標準でインストールされていることも多いのでまずgitがインストールされていることをターミナルにコマンド入力して確認します。
(次の「Gitのバージョンを確認」でバージョンが表示されたらインストールはすんでいるのでインストールは不要)
もし、インストールされていない場合は、
brew install git
でインストールしましょう。
Gitのバージョンを確認
それではGitのバージョンを確認してみましょう
$ git --version
として enter キーを押してください
Gitのバージョンが表示されました
git version 2.17.2 Apple Git-113)
ここではGitとバージョン2.17.2にて動作確認をしています
Gitの初期設定
次に初期設定を行いますGitで利用をする名前を設定します
英字で登録します
学習に利用するGitHubの無料プランのリモートリポジトリはインターネットに公開されるので気にされる方は個人を特定できる情報を入れないほうが良いと思います
$ git config --global user.name "username"
enter キーを押します 次に各自のメールアドレスを設定します
$ git config --global user.email "example@example.com"
入力したら enter キーを押します
Gitで利用するテキストエディタの設定
次にgitで使用するテキストエディタを設定します
デフォルトではnanoというテキストエディタを使用する設定になっているのですが少なくとも日本ではマイナーな存在なので vim(ヴィム)というよく使われるテキストエディタを使うように設定します (VS Code等にすることも可能)
$ git config --global core.editor 'vim -c "set fenc=utf-8"'
ここで日本は文字化けしないように文字コードとして utf 8を指定しています
このコマンドで、~/.gitconfig に設定が書かれます。
に設定が書かれています それでは設定を確認してみましょう
$ less ~/.gitconfig
lessは テキストファイルの内容を閲覧するためのコマンドです
テキストエディタの設定と名前の設定と eメールの設定が書かれています。アルファベットのqキーをおしてless を終了します
Git学習用のディレクトリの作成
次にGitの学習用にディレクトリの作成を行いますターミナルで 今 ~/enviroment ディレクトリにいることを確認します。
この表示になっていない方は
$ cd ~/enviroment
としてエンターキーをおします。
git_repositoriesといういうリポジトリを作成します
$ mkdir git_repositories
エンターキーをおします
作成したディレクトリの中に移動します
$ cd git_repositories
エンターキーをおします。
このディレクトリgit_repositoriesにローカルリポジトリを作成して学習していきます。
作成したディレクトリをイニシャライズ
$ git init
エンターキーをおします。
作成したディレクトリをリポジトリに変換(.git フォルダが作成される)
SourceTreeについて
Gitの操作では、今まで説明したような「ターミナル」を利用したコマンドライン以外にエクスプローラー形式のGUIの「Source Tree」というツールがあります。
SourceTreeを利用することで、Git リポジトリの操作が簡単になるので、コードを書くことに集中できます。シンプルな Git GUI を用いてリポジトリを視覚化し管理できるようになります。
GitHubの使い方
はじめてのGitHub
GitHub のアカウント登録
GitHubから登録。
- ユーザー名
- メールアドレス
- パスワード
を入力。
利用規約とプライバシーポリシーを確認してから、
Sign up for GitHubボタンをクリック
プラン選択
ここでは freeプラン(無料で使えるプラン)を選択します。
※あとで、有料プランに変更することも可能です。
GitHub のレポジトリ作成
右上の + をクリックして、「New repository」を選択。「Repository name」を入力して「Create repository」をクリックして作成。
基本の使い方 | ローカルにリポジトリを作成
Githubのリポジトリが作成されると、次のようなコマンドを自分のPCのターミナルで実行することで最初に説明した「流れ」ようにローカルリポジトリをリモートリポジトリに反映させることができます。
echo "# git-sample" >> README.md
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/xxx/yyy.git
git push -u origin master
コマンドを簡単に説明しますと
echo "# git-sample" >> README.md
これはREADME.mdというファイルを作成するコマンドです。例では # git-sampleとなっているますが、自分ですきに編集したファイルを登録しましょう。
git add README.md
先ほど作成したファイルをワークスペースに登録しています。のちにこのファイルをコミットするので事前にaddしておきます。
git commit -m "first commit"
次のコマンドでコミットします。-mオプションをつけると後に与えた文字をコミット時のコメント(“first commit”)として登録することができます。ここのコメントにはどんな変更内容かを簡潔にわかりやすく書くようにしましょう。
git remote add origin https://github.com/xxx/xxx.git
共有リポジトリを登録。
https://github.com/xxx/xxx.git に「origin」というあだ名をつけるようなイメージ。
origin は共有リポジトリのこと。レポジトリの場所(URL)の別名。
git push -u origin master
最後にローカルの変更を先ほど登録したリポジトリに登録して完了です。ここでのコマンドではoriginリポジトリにローカルのmasterブランチを反映しています。
まとめ
GitHubを使うと、プロジェクトでの開発が非常にスムーズになります。
最初のうちはリポジトリが複数あったり、ローカルのリポジトリが今どういうステータスなのかとかがわかりづらいですが、何度も繰り返すうちに徐々に慣れてくるはずです。
エンジニアになる前にある程度Gitを知っておくといざ現場に入った時にスムーズにスタートを切れるのであらかじめ勉強しておくことをオススメしておきます。