実践Git/GitHub講座
みゆっき(@toriimiyukki)
猫にはわからない
Git/GitHubについて知る
バージョン管理システムとは
➡ バージョン管理システム(バージョンかんりシステム)とは
➡ コンピュータ上で作成、編集されるファイルの変更履歴を管理するための
システム。特にソフトウェア開発においてソースコードの管理に用いられ
ることが多い。
3
主なバージョン管理システム
CVS - 集中型。C言語で実装。
Git - 分散型。Linuxのコード管理のために作られた。C言語、Perlなどで実装。
Mercurial - 分散型。Python、C言語で実装。
Subversion - 集中型。CVSの改良版という位置づけ。C言語で実装。
バージョン管理システムの種類
4
➡ ローカル型
➡ ローカルのファイルやディレクトリをリ
ネームして管理 資料.pdf.20150621
資料.pdf
資料.pdf.back
リポジトリ
作業コピー 作業コピー
➡ 集中型
➡ リポジトリをサーバで管理し、ユーザーは
作業コピー(仮のディレクトリ)を管理
➡ 分散型
➡ サーバはリポジトリを管理し、ユーザーも
ローカルにリポジトリを管理 リポジトリ
リポジトリ リポジトリ
GitとGitHub
➡ Git
➡ 分散型のバージョン管理システム
5
➡  
➡ 分散型のリモートリポジトリを担っ
てくれるサービス
➡ Pull Requestと呼ばれる、コードを
レビューしながらマージできる機能
があり、OSS界隈でよく利用される
リポジトリ
リポジトリ リポジトリ
Gitのいいところ
➡ 分散型
➡ リポジトリは全ての履歴を含んでいるため、オフラインでもコミットが可能
6
➡ 高速
➡ コミットごとにスナップショットがあり、変更のないファイルはリンクを持つ
➡ きれいな歴史
➡ 複数のコミットを1つにしたり、コミットを修正することが容易にできる
A B C
GitとGitHubで何ができるか
➡ Ruby on Railsなど多くのOSSがGithub上で開発されている
➡ 開発だけでなく、機能追加の議論などもIssueを通して行われている
7
オープンソースソフトウェアの開発
社内でのプロジェクト管理に使用
➡ Yahoo! Japan, Cookpad, CyberAgent, ドワンゴなど日本でも多くの企業で使われている
ドキュメントやチュートリアルの公開
➡ 各種マニュアルやチュートリアルの公開でも使われる
➡ ドイツの法律はGitHubで管理されている
業務委託や採用時の判断に利用
➡ プログラマの力量を測るためにGitHub上のコードを見る採用が増えている
Git/GitHubの用語
ブランチ
ブランチ
Gitの用語
9
コミット
A B C
B マージ
マージコミット
➡ Pull Request
➡ ブランチをマージするために立てるリクエスト
➡ OSSでは、PRを立てたあとコミッタなどのレビューを受けてからマージする
GitHubの用語
10
➡ LGTM
➡ Looks good to me
➡ Pull Requstがマージしても大丈夫なときのOKサイン
➡ Octcat
➡ GitHubの公式キャラクター
➡ かわいい
Gitの基本的な使い方
Gitの基本的な使い方
12
$untracked
コミット
tracked
unstaged
staged
Gitの基本的な使い方
13
$ vi index.html private.htmluntracked
index.html
private.html
コミット
tracked
unstaged
staged
Gitの基本的な使い方
14
$ vi index.html private.html
$ git add index.html
untracked private.html
コミット
tracked
unstaged
staged
index.html
Gitの基本的な使い方
15
$ vi index.html private.html
$ git add index.html
$ git commit -m “トップページ追加”
untracked private.html
Aコミット
tracked
unstaged
staged
index.html
Gitの基本的な使い方
16
$ vi index.html private.html
$ git add index.html
$ git commit -m “トップページ追加”
$ vi index.html
untracked
A
private.html
コミット
tracked
unstaged
staged
index.html
Gitの基本的な使い方
17
$ vi index.html private.html
$ git add index.html
$ git commit -m “トップページ追加”
$ vi index.html
$ git add index.html
untracked
A
private.html
コミット
tracked
unstaged
staged
index.html
Gitの基本的な使い方
18
$ vi index.html private.html
$ git add index.html
$ git commit -m “トップページ追加”
$ vi index.html
$ git add index.html
$ git commit -m “トップページ修正”
untracked
A B
private.html
コミット
tracked
unstaged
staged
index.html
Gitのよく使うコマンド
Gitのよく使うコマンド(1/6)
20
git init
➡ 現在のディレクトリをGitリポジトリとして初期化する
$ rails new new-app
$ cd new-app
$ git init
これにより「.git」ディレクトリが作られる、
Gitリポジトリでなくしたい場合は「.git」を削除すればよい
git clone
➡ リモートリポジトリからローカルリポジトリを作成する
$ git clone git@github.com:atom/atom.git
Cloning into 'atom'...
$ cd atom
Gitのよく使うコマンド(2/6)
21
git add
➡ 指定されたファイルやディレクトリをstageに追加する
$ git add index.html
$ git add . #すべて追加する
$ git add --all . #削除も含めてすべて追加する
git commit
➡ stageのファイルやディレクトリをコミットする
$ git commit #コミットメッセージを書くためエディタが起動
$ git commit -m “○○を修正” #コミットメッセージを一緒にする
$ git commit --amend #前回のコミットに追加する
Gitのよく使うコマンド(3/6)
22
git checkout
➡ ディレクトリを特定のコミットやブランチの状態にする
$ git checkout origin/master
$ git checkout 52f4ad0…
$ git checkout -b feature/top-page origin/master #ブランチの作成もする
git branch
$ git branch feature/top-page
$ git branch -m feature/top-page feature/about-page #ブランチ名の変更
➡ 現在のコミットからブランチを作成する
Gitのよく使うコマンド(4/6)
23
git merge
➡ 指定されたブランチを現在のブランチにマージ(統合)する
$ git checkout feature/top-page
$ git merge feature/top-page-a #マージコミットが発生する
git rebase
➡ コミットを修正したり、派生元を修正する
$ git rebase -i HEAD^^^ #HEADの3つ前からコミットを修正する
$ git rebase origin/master #ブランチを最新のorigin/masterから派生させる
Gitのよく使うコマンド(5/6)
24
git fetch
➡ リモートリポジトリの内容をローカルリポジトリに同期する
$ git fetch origin master
$ git checkout origin/master #リモートリポジトリの最新のmasterの状態にする
$ git fetch origin #ブランチ名を省略すると全てのブランチを対象とする
git pull
➡ リモートリポジトリの内容を取り込み、ローカルブランチにマージする
$ git pull origin master
$ git fetch origin master && git merge origin/master #上と同じ
Gitのよく使うコマンド(6/6)
25
git push
➡ ローカルリポジトリの内容をリモートリポジトリに反映させる
$ git push origin feature/top-page
$ git push origin feature/top-page -f #rebaseなどをした場合は強制(f)する
$ git push origin master -f #絶対に打ってはいけない
git remote
➡ リモートリポジトリを登録、編集する
$ git remote add origin git@github.com:miyukki/webpage.git
$ git remote rm origin
Gitの便利なコマンド
Gitの便利なコマンド
27
git log ➡ コミットの履歴を確認する
git diff ➡ ファイルの差分を表示する
➡ オプション無しだとunstagedなファイルの差分を表示
git grep ➡ Git管理下のファイルの中から文字列を検索する / 実は一番使う
git reset ➡ 変更を元に戻す
git stash ➡ 変更を加えたtrackedなファイルを一時退避する
実際の開発での使われ方
merge
実際の開発では…
29
トップページに機能AとBを作りたいからブランチを切ろう!
トップページの不具合の修正をしなきゃ…
元となるコミット
master
feature A B
feature
merge
修
merge
merge
ダメな解決方法
30
元となるコミット
master
feature A B
修feature
➡ featureブランチにmasterブランチを一度mergeする
merge
履歴が汚くなる、開発中はmasterの状況を反映しにくい
A B
merge
A B
rebase
ベストな解決方法
31
元となるコミット
master
feature
修feature
➡ featureブランチを最新のmasterブランチからrebaseする
merge
履歴が綺麗、最新の環境で開発ができる
実践Git/GitHub
はじめに…
➡ Gitを使いはじめる前に、Gitの設定が必要です
➡ これをすることにより、このコミットをした人は誰かということを他の人が知るこ
とが出来ます
33
$ git config --global user.name “Yusei Yamanaka”
$ git config --global user.email yusei1128@gmail.com
$ git config --global core.editor nano
archbotを改善してみよう!
34
https://github.com/sfc-arch/archbot
archbot
➡ SFC-RGのSlackチームにいるボットを触って何か機能を付けてPull
Requestをしてみましょう

猫にはわからないGit講座