175
はじめてのGit たぶん関西でいちばんゆるいGit入門

はじめてのGit #gitkyoto

Embed Size (px)

DESCRIPTION

Gitのゆるめな勉強会 ワークショップ進行スライド

Citation preview

Page 1: はじめてのGit #gitkyoto

はじめてのGitたぶん関西でいちばんゆるいGit入門

Page 2: はじめてのGit #gitkyoto

たなかひさてる@tanakahisateru

Pinoco developerjs-markdown-extra maintainerPHPTAL contributorFirebug translation contributorYii framework user...and more OSS experienced

Page 3: はじめてのGit #gitkyoto

何者かという話をわかりやすいとこで

はいこれで今日喋った人が誰だったか忘れなくなりました

Page 4: はじめてのGit #gitkyoto

僕はそんなGitのすごい人じゃないです。

GitHubで必要な最低限の知識しかありません。

わからないことはすぐググります。

Gitは他人と使ってナンボでしょって思います。

わたしとGit

Page 5: はじめてのGit #gitkyoto

人にGitを教えるとこうなった

前職では、デザイナー(コーダー)の同僚やクライアントにGit

を教えて使ってもらってました。

デザイナーは「これなかったら仕事できない」って中毒にな

りました。

クライアントとのやりとりが超スムーズになりました。

Page 6: はじめてのGit #gitkyoto

教えなきゃ損だよこれ

Page 7: はじめてのGit #gitkyoto

このセッションでは

ホントの入門からちょっとだけ踏み込んで始めます。

みなさんが職場なり取引先なりで、布教する側の人になるぐ

らいの中毒にするのが目標です。(初心者とか関係ないです)

教わらなくてもわかってる人は、教え方のヒントをパクって

ください。Gitは他人と使ってナンボです。

Page 8: はじめてのGit #gitkyoto

バージョン管理って?

実はみなさん、たぶんすでにバージョン管理をやっていると

思いますよ。

日付名をつけてフォルダをバックアップするアレ。

Page 9: はじめてのGit #gitkyoto
Page 10: はじめてのGit #gitkyoto

このへんまだやる気ある

Page 11: はじめてのGit #gitkyoto

「ちょっと複数案見せてよ」「えっ...」

Page 12: はじめてのGit #gitkyoto

「やっぱり前の前のが良かった」(やる気なくなってきてる感)

Page 13: はじめてのGit #gitkyoto

「やっとフィックス案できた...バタッ」

Page 14: はじめてのGit #gitkyoto

「さっそくで悪いんだけど直しが...」(壁ドンですよね)

Page 15: はじめてのGit #gitkyoto

数日後

Page 16: はじめてのGit #gitkyoto

どの子がどの子かしら...?

Page 17: はじめてのGit #gitkyoto

手作業の罠

人間はサボる/焦る/間違える。

フォルダの前後関係に保証がない。

誰が何をした結果なのかわからない。

ハードディスクにほとんど同じ内容のフォルダできて、

すごい早さで容量を圧迫してくる。

Page 18: はじめてのGit #gitkyoto

そんなあなたもGitを使うと

Page 19: はじめてのGit #gitkyoto

こうなります

Page 20: はじめてのGit #gitkyoto

さらにこうなります

Page 21: はじめてのGit #gitkyoto

日付フォルダとのちがい

誰が、いつ、何を変更したのか履歴に残る。

どの変更がどれを元にしたのか、順番を間違えない。

正式な最新版がわかるという大事さ。

変更情報だけを保存 → ハードディスクを圧迫しない。

(なので遠慮なくバックアップできる)

Page 22: はじめてのGit #gitkyoto

Subversion < Git初心者には(そして多分将来ずっと)Gitがオススメ。

サーバの準備がまだでも作業を始められる。

Finderで勝手に移動/削除/名前変更をしても壊れない。

変更履歴の参照がとても速い。

プラグインがないので人によって機能の差が出ない。

(これはMercurialに対するメリット)

Page 23: はじめてのGit #gitkyoto

どうせGitは必要

Page 24: はじめてのGit #gitkyoto

みんなGitHub

もっとあるよ

Page 25: はじめてのGit #gitkyoto

やってみよう

Page 26: はじめてのGit #gitkyoto

インストール

最新のXcodeを使っている

人はもう入っています。

ない人はこちら

http://git-scm.com/

Page 27: はじめてのGit #gitkyoto

で、次は...

Page 28: はじめてのGit #gitkyoto
Page 29: はじめてのGit #gitkyoto

待って、こわくないから

Page 30: はじめてのGit #gitkyoto

これからやろうとしてること

「Gitはコマンドだ」ということを知ってもらいます。

コマンドを打ち込みながら用語をおぼえましょう。

失敗しても大丈夫、目的は操作じゃなくて理解です。

概念を理解してからGUIへ。

そのときはもう、コマンドは忘れてていい。

Page 31: はじめてのGit #gitkyoto

<\コワクナイカラ/

Page 32: はじめてのGit #gitkyoto

うごきますか

Page 33: はじめてのGit #gitkyoto

自分の名前を設定しよう

Page 34: はじめてのGit #gitkyoto

作業者の名前は自己申告です。

Gitは自分で勝手に始めたり別のサーバに引越したりできるので、

誰が作業したかという名前はサーバの認証とは完全に別なのです。

Page 35: はじめてのGit #gitkyoto

この練習で使うソースコードを...

Page 36: はじめてのGit #gitkyoto

http://www.initializr.com/パクりますね

Page 37: はじめてのGit #gitkyoto

IEとかFaviconとかオフで

Page 38: はじめてのGit #gitkyoto

ダウンロード&展開

Page 39: はじめてのGit #gitkyoto

これが初版です

Page 40: はじめてのGit #gitkyoto
Page 41: はじめてのGit #gitkyoto

作業するフォルダを開く

cd[スペース]のあと、ターミナルにフォルダをドロップします。

Page 42: はじめてのGit #gitkyoto

いま開きました

Page 43: はじめてのGit #gitkyoto

現在ターミナルで開いているフォルダを「カ

レントディレクトリ」と言います。

cd の後にパスを指定すると、カレントディレ

クトリを変えることができます。

カレントディレクトリの確認は pwd です。

Page 44: はじめてのGit #gitkyoto

ホントに合ってる?

Page 45: はじめてのGit #gitkyoto

このへん大丈夫ですかー

Page 46: はじめてのGit #gitkyoto

いよいよGitですよー

Page 47: はじめてのGit #gitkyoto

git init

Page 48: はじめてのGit #gitkyoto

.git=ローカルリポジトリ

Page 49: はじめてのGit #gitkyoto

リポジトリ=入れ物

.git が消えると何もなかったことになる。

全部やり直したいときは rm -rf .git

(あるいは詳しい人にこっそり聞きましょう)

Page 50: はじめてのGit #gitkyoto

git status

Page 51: はじめてのGit #gitkyoto

Untracked files = まだ管理していないファイ

ルがこれだけあるということ。

git add を使えと言われていますね。

Page 52: はじめてのGit #gitkyoto

git add

Page 53: はじめてのGit #gitkyoto

add = コミット(あとで言います)するリストにファ

イル追加するという意味で add です。

この操作をステージと言います。

バージョン管理でもっとも大事な操作、コミット

の準備です。

ちょうど、Finderでシフトキーを押しながらファイ

ルをポチポチするようなものです。

Page 54: はじめてのGit #gitkyoto

からの→ git status

Page 55: はじめてのGit #gitkyoto

git status の結果が Changes to be committed:

というリストになりました。

いよいよ次が初めてのコミットです。

Page 56: はじめてのGit #gitkyoto

git commit -m “...”

Page 57: はじめてのGit #gitkyoto

初回コミットおめでとうございます。コミット

はバージョン管理でもっとも重要な機能です。

選んだファイルを .git フォルダの中にバックア

ップコピーしたイメージです。

各コミットには、作業者の名前、コミットの日

時、メッセージが必ず残ります。

Page 58: はじめてのGit #gitkyoto

-m なしで git commit としてしまい、なにが

起こったかわからない人は、近くの詳しそう

な人に聞いてください。

わかる人はそのまま続け、:wq で終了したら

いいと思います。

わからない人はGUIを使うまで待ってね。

Page 59: はじめてのGit #gitkyoto

git status ...?→ git log ...!

Page 60: はじめてのGit #gitkyoto

git status は nothing to commit (working

directory id clean)と言っています。最後のコミ

ットからまだ変更がないという意味です。

git log で過去のコミットを参照できます。

コミットに 00e8ac1be367fb350... というIDが付

いていることがわかります。このコミットのユ

ニークな管理番号で、わりと重要です。

Page 61: はじめてのGit #gitkyoto

心配なら git log --stat

Page 62: はじめてのGit #gitkyoto

もし .DS_Store でグチグチ言われる人は...

Page 63: はじめてのGit #gitkyoto

.gitignore というファイルに

Page 64: はじめてのGit #gitkyoto

.DS_Store と書きます

Page 65: はじめてのGit #gitkyoto

.gitignore = git + ignore (無視)

無視するファイル名やパスのパターンを書く

Page 66: はじめてのGit #gitkyoto

ここまでのまとめ

git init

git status

git add <file/folder>

git commit -m “message”

git log

.gitignore

Page 67: はじめてのGit #gitkyoto

むずかしいひとー

Page 68: はじめてのGit #gitkyoto

そうですね...

Page 69: はじめてのGit #gitkyoto

癒し成分補充しときます

Page 70: はじめてのGit #gitkyoto

ここから面白くなるよ。index.htmlに変更発生。

Page 71: はじめてのGit #gitkyoto

git status

Page 72: はじめてのGit #gitkyoto

git diff

Page 73: はじめてのGit #gitkyoto

git commit -a -m “...”

Page 74: はじめてのGit #gitkyoto

git commit -a は変更されたファイルをすべて

add してからコミットという意味です。

git add でステージしてから git commit する

のと同じです。

Page 75: はじめてのGit #gitkyoto

git log

Page 76: はじめてのGit #gitkyoto

ログの結果が2つになりました。

「ソースを変更して確認・コミット」を自由

にやってみましょう。

Page 77: はじめてのGit #gitkyoto

作業が区切れたらすぐにコミットしましょ

う。

差分保存なので容量は食いません。遠慮なく

どんどんやりましょう。(※ Photoshopは別)

頻度の目安は、1行のメッセージで意味を表

せる程度の変更セットです。

Page 78: はじめてのGit #gitkyoto

ここまでのまとめ

git status や git diff で状態を確認しつつ...

変更 → コミット → 変更 → コミット → ...

ここは難しくないですね。

Page 79: はじめてのGit #gitkyoto

つぎ、ちょっと難しい話になります。

Page 80: はじめてのGit #gitkyoto

<\コワクナイカラ/

Page 81: はじめてのGit #gitkyoto

HTMLの更新をしながら裏でコツコツCSSを変えたい

Page 82: はじめてのGit #gitkyoto

ブランチ

Page 83: はじめてのGit #gitkyoto

git branch css-codinggit checkout css-coding

Page 84: はじめてのGit #gitkyoto

css-coding という名前のブランチを作り、ブ

ランチを切り替えました。

慣れている人は

git checkout -b css-codingで、作成と切り替えを同時にできます。

Page 85: はじめてのGit #gitkyoto

git branch (パラメータなし)

Page 86: はじめてのGit #gitkyoto

ブランチが2つあること、今のブランチが

css-codingだということがわかります。

master = 最初からあるメインのブランチ

Page 87: はじめてのGit #gitkyoto

css-codingブランチで、css/main.cssを書き換え。

Page 88: はじめてのGit #gitkyoto

commit → log

Page 89: はじめてのGit #gitkyoto

H1 HENKOU → CSS PINK という変更の流れ

でしたね。これを憶えておいてください。

(人によっては違うかもしれません)

ここで、CSSの作業をやめて、HTMLだけ変

更する作業の流れに戻りましょう。

Page 90: はじめてのGit #gitkyoto

git checkout master

Page 91: はじめてのGit #gitkyoto

masterブランチでは、最後のコミットがまだ

H1 HENKOU のままです。つまり...

Page 92: はじめてのGit #gitkyoto

もとどおり

Page 93: はじめてのGit #gitkyoto

何事もなかったかのようにindex.htmlを書き換えて...

Page 94: はじめてのGit #gitkyoto

commit → log

Page 95: はじめてのGit #gitkyoto

H1 HENKOU → KIJI MIDASI という流れで

コミットがつながりました。

masterブランチでは、CSS関係のコミットが

なかったことになっています。

Page 96: はじめてのGit #gitkyoto

別フォルダ作業のイメージ

master css-coding

Page 97: はじめてのGit #gitkyoto

branchとは

git branch css-coding

css-coding

Page 98: はじめてのGit #gitkyoto

checkoutとは

master

git checkout master

作業フォルダ

Page 99: はじめてのGit #gitkyoto

git log --oneline --graph --all

Page 100: はじめてのGit #gitkyoto

たしかにコミットの履歴が分岐しています。

ブランチは別の人と作業するとき有効です。他のバージョ

ン管理ツールとGitが違うのは、タグなんかよりずっとブ

ランチのほうが使用頻度高いという点です。

でもちょっと難しいので、互いに同時に触らないよう声

をかけながらひとつのブランチでやってもいいです。

ただし、この「コミットの分岐」という概念は、Gitを理

解して使う上で絶対に忘れてはいけません。

Page 101: はじめてのGit #gitkyoto

git merge -m “...” css-coding

Page 102: はじめてのGit #gitkyoto

たったひとつのコマンドで別のブランチの作業が合体!

Page 103: はじめてのGit #gitkyoto

mergeとは

master css-coding

git merge

Page 104: はじめてのGit #gitkyoto

マージは、相手のブランチから変更ファイル

だけを取り出して、自分のファイルを上書き

するイメージ。

もしブランチ間で同じファイルを変更してた

ら、それらが競合(コンフリクト)した状態に

なります。

Page 105: はじめてのGit #gitkyoto

いまコンフリクトについて説明するのは大変

なので、なるべく起こさないようにしてくだ

さい。

Gitでコンフリクトを解消するのは、

Subversionよりずっと簡単なのでご安心を。

もし起こったら経験者に聞きましょう。

Page 107: はじめてのGit #gitkyoto

ここまでのまとめ

git branch ブランチ名

git checkout ブランチ名

git branch

git log --oneline --graph --all

git merge ブランチ名

Page 108: はじめてのGit #gitkyoto

むずかしいひとー

Page 109: はじめてのGit #gitkyoto

そろそろまた癒し成分

Page 110: はじめてのGit #gitkyoto

いちいちコマンド打つのは正直しんどい

Page 111: はじめてのGit #gitkyoto

http://gitx.frim.nl/

Page 112: はじめてのGit #gitkyoto

あえてもっとも古いGitXを使います。

ここまでの説明に対応する機能しかないの

で、すごくわかりやすい。

コマンド運用との相性がいいです。

コマンドが苦手な人には、後でもっと先の機

能があるツールを紹介します。

Page 113: はじめてのGit #gitkyoto

log, diff, branch

Page 114: はじめてのGit #gitkyoto

branch -d(削除), checkout

Page 115: はじめてのGit #gitkyoto

status, diff

Page 116: はじめてのGit #gitkyoto

add, checkout --(変更をやめる機能)

Page 117: はじめてのGit #gitkyoto

commit + エディタ

Page 118: はじめてのGit #gitkyoto

おまけ: ターミナル好きなら tig

Page 119: はじめてのGit #gitkyoto

改行コードの変更 CRLF→LF

文字コードの変更 SJIS→UTF-8

インデント方針の変更 タブ→スペース

絶対途中でやってはいけないこと

Page 120: はじめてのGit #gitkyoto

これやると、ファイルのすべての行が書き換わったと認識さ

れます。

本来の変更意図がわからなくなります。

やるなら早い段階で、全ソースのフォーマットを一気に変更

するコミットをしましょう。

絶対途中でやってはいけないこと

Page 121: はじめてのGit #gitkyoto

<\コワクナイカラ/

Page 122: はじめてのGit #gitkyoto

いよいよGitHubへ

Page 123: はじめてのGit #gitkyoto

https://github.com/

Page 124: はじめてのGit #gitkyoto

まだの人はサインアップ

Page 125: はじめてのGit #gitkyoto

Welcome to social coding.

Page 126: はじめてのGit #gitkyoto

公開鍵を登録公開鍵認証とSSHの説明は省きます。

ずばり、~/.ssh ありますか?

open ~/.ssh

id_rsa.pub があればOK、それを使います。

ない人はこれで作ります:

ssh-keygen -t rsa -C "[email protected]"

すでに持っている人は隣の人を手伝ってあげましょう。

Page 128: はじめてのGit #gitkyoto

id_rsa.pub できたら...

で、id_rsa.pubの内容をまるごとコピペしましょう。

Page 129: はじめてのGit #gitkyoto

リポジトリを作ろう

ここ

Page 130: はじめてのGit #gitkyoto

できた

Page 131: はじめてのGit #gitkyoto

はじめてのpush

Page 132: はじめてのGit #gitkyoto

⌘+R

Page 133: はじめてのGit #gitkyoto

git push origin master はoriginのリモートリ

ポジトリにmasterブランチをアップロードす

るイメージです。

-u オプションは、以降masterブランチで git

push だけしたとき、デフォルトでoriginに

pushするようになるという紐付け。

Page 134: はじめてのGit #gitkyoto

push

push

Page 135: はじめてのGit #gitkyoto

ところでこのEditって?

Page 136: はじめてのGit #gitkyoto

編集できちゃう!

Page 137: はじめてのGit #gitkyoto

メッセージ+コミット

Page 138: はじめてのGit #gitkyoto

git pull

Page 139: はじめてのGit #gitkyoto

git pull はリモートのリポジトリからローカル

にダウンロードするイメージ。

あ、GitHubのサイトで編集すると、動作確認

できてないソースでコミットを積むことにな

るので、普通はダメですよ。

Page 140: はじめてのGit #gitkyoto

pull

pull

Page 141: はじめてのGit #gitkyoto

リモートからpullする=ダウンロードしたものを無名ブランチと

みなして、マージ→コミットをやっている。

ダウンロードしてマージしないpullをfetchと言う。

pull = fetch + merge

とにかく、いきなりローカルぜんぶ上書きではない。

FTPで落としてきたファイルをいきなり上書きして困ったこと...

ありますよね。

pullの注意点

Page 142: はじめてのGit #gitkyoto

リモートの最新より古い状況に積んだコミットをpushするの

は禁止されます。

なので、まずローカルにpullしてから、作業→コミット

→pushの順序を守りましょう。

他の人が上げたサーバの最新を古いファイルでFTP上書きし

て困ったこと...ありますよね。

pushの注意点

Page 143: はじめてのGit #gitkyoto

ややこしいので、とりあえずWeb制作の言葉でいうと、サー

バへのアップロードとサーバからのダウンロードでOKです。

ただ、突然の上書きで大失敗しない装置が付いてるというこ

とだけ理解してください。

Gitでエラーになるというときは、もしそこで失敗が起きなか

ったら、もっとひどいことが起こっていた、という可能性を

防いでくれていると思いましょう。

むずかしいひとー

Page 144: はじめてのGit #gitkyoto

ところでさっき、originに「masterを」push

したと言いました。

Page 145: はじめてのGit #gitkyoto

つまり...GitHubにはまだ css-coding ブランチ

がない!!

Page 146: はじめてのGit #gitkyoto

git push origin css-coding

Page 147: はじめてのGit #gitkyoto

ブランチもpushできた

Page 148: はじめてのGit #gitkyoto

pushとpullはブランチごとに個別です。

どれをpush/pullするかを意識しましょう。

個別だからといって容量が倍になるわけではありませ

ん。消費するのは差分の量だけです。

Page 149: はじめてのGit #gitkyoto

ローカルの作業ディレクトリを削除しても平気。

これでサーバに全部あるので

Page 150: はじめてのGit #gitkyoto

GitHubのここから

Page 151: はじめてのGit #gitkyoto

git clone ...

Page 152: はじめてのGit #gitkyoto

まあ、clone するのはだいたい他人です。

途中から作業に参加する人は、git init ではな

くこの git clone からスタートします。

あとで他の人と共同作業の練習しましょう。

Page 153: はじめてのGit #gitkyoto

復元できました

Page 154: はじめてのGit #gitkyoto

いや~よかったよかっ...

Page 155: はじめてのGit #gitkyoto

おや?

img

Page 156: はじめてのGit #gitkyoto

注: 空フォルダはダメGitは空のフォルダを管理できません。あくまでファイルの変更

の管理なので。

空っぽのフォルダを維持したい場合、中に何かダミーのファイ

ルを入れてください。

ダミーファイル名は empty, .gitkeep, .gitignore, .htaccess などい

ろいろな習慣があります。

あまり心配しなくても実害があることはまれです。

Page 157: はじめてのGit #gitkyoto

ちなみにmaster以外のリモートブランチをローカルに連れてくるなら...

git branch css-coding origin/css-coding

Page 158: はじめてのGit #gitkyoto

ここまでのまとめgit remote add リポジトリ名 アドレス

git push -u リポジトリ名 ブランチ名

git push (注:ブランチごと)

git pull

git clone アドレス

空のフォルダは無視される

git branch ブランチ名 origin/ブランチ名

Page 159: はじめてのGit #gitkyoto

癒し(ry

Page 160: はじめてのGit #gitkyoto

お待たせしましたGUIですよ

Page 161: はじめてのGit #gitkyoto

http://rowanj.github.com/gitx/

Page 162: はじめてのGit #gitkyoto

GitXのすごい版

Page 163: はじめてのGit #gitkyoto

clone

Page 164: はじめてのGit #gitkyoto

remote/fetch/pull/push

Page 165: はじめてのGit #gitkyoto

こんなことまでgit branch css-... origin/css-...

Page 166: はじめてのGit #gitkyoto

GitXはgitコマンドに忠実なUIなので、コマン

ドで理解した人が使いやすいです。

このUI自体が「Gitでできること集(簡易版)」

ありがちな操作がひととおりあるので、さら

に勉強するポイントが見えてきます。

Page 167: はじめてのGit #gitkyoto

まだこれじゃ使いにくい

と思ったら、メインで使

うツールはもっと自分に

合うのを選びましょう。

Page 168: はじめてのGit #gitkyoto

これでようやくスタートライン

Page 169: はじめてのGit #gitkyoto

むずかしいひとー

Page 170: はじめてのGit #gitkyoto

gitのコマンドむずかしいのは~

Page 171: はじめてのGit #gitkyoto
Page 172: はじめてのGit #gitkyoto

gitのコマンド体系は「使う人の気持ち」では

なく「内部設計の事情」でできています。

作った人の気持ちになったら理解できるとか

無理ゲー。

なので...

Page 173: はじめてのGit #gitkyoto

細かい操作方法は忘れてもかまいません。

用語と概念と仕組みの基本を忘れないことが重要です。

理解してしまえば、GUIを使ったほうが効率的です。

コマンドを知ると、GUIの説明テキストがコマンドオプショ

ンの何を指すのか、想像できるようになります。

だからこそ

Page 174: はじめてのGit #gitkyoto

ただし...

本当に困ったときはググってコマンドをコピペできるように

しときましょう。

GUIの操作手順は技術ブログに書かれにくい。

gitはググれる! ←ここ重要

Page 175: はじめてのGit #gitkyoto

お疲れ様でした