gitのすすめ

128
gitのすすめ デンソーアイティーラボラトリ 吉田悠一

Upload: yuichi-yoshida

Post on 15-Jan-2015

1.556 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Gitのすすめ

gitのすすめ

デンソーアイティーラボラトリ吉田悠一

Page 2: Gitのすすめ

プレゼンで出てくる話はすべてフィクションです。実在の人物や団体などとはたぶん関係ありません。

Page 3: Gitのすすめ

subversion?

          ____       / \  /\  キリッ.     / (ー)  (ー)\    /   ⌒(__人__)⌒ \    |      |r┬-|    |   さて,今日もsubversionからチェックアウトして     \     `ー'´   /   コーディングだお!!    ノ            \  /´               ヽ

Page 4: Gitのすすめ

subversion?

            ___       /      \      /ノ  \   u. \ !?    / (●)  (●)    \     |   (__人__)    u.   | クスクス>     \ u.` ⌒´      /    ノ           \  /´               ヽ

Page 5: Gitのすすめ

subversion?

         ____<クスクス   /       \!??      /  u   ノ  \    /      u (●)  \    |         (__人__)|     \    u   .` ⌒/    ノ           \  /´               ヽ

Page 6: Gitのすすめ

git・・・・?

svn??

svn

自重

Page 7: Gitのすすめ

って言われても

       ____     /      \   / ─    ─ \  /   (○)  (○)   \ SVNじゃだめなのかお…  |      (__人__)    |    \     ` ⌒´     /

Page 8: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__) いまだにsvnか・・・・・  |     ` ⌒´ノ 日付でファイルが増えていくよりマシだが・・・.  |         }  .  ヽ        }  エンジニアならgitを使うだろJK   ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 9: Gitのすすめ

そんなこんなで

       ____     /⌒  ⌒\   /( ●)  (●)\  /::::::⌒(__人__)⌒:::::\  やらない夫!  |     |r┬-|     |  gitについてやる夫に教えろお!  \      `ー'´     /

Page 10: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__) まぁいいだろう・・・・  |     ` ⌒´ノ .  |         }  .  ヽ        }  (このプレゼン作るのに2時間かかったんだが)   ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 11: Gitのすすめ

git

• 分散型ソースコード管理ツール• SVN, CVSとは違うよ

• リーナスさんがLinuxカーネルの開発を進めるために開発

Page 12: Gitのすすめ

git理解への早道

• まずコンセプトを理解する• 仕様,コマンドから始めると死ねる

Page 13: Gitのすすめ

そんなこんなで

      / ̄ ̄\    /ノ(  ゝ 、_,ノヽ        r'´ ゙ヽ      /`ヽ          ____    | ⌒(( ●)(●)        ヽ   ヽ从从/   /        \   /\.    |     (__人__) /⌒l     \  \/  /て       (●)liil(●) ノ( \     |     ` ⌒´ノ |`'''|    ∑ ヽ/  /  そ     / (__人__)  ⌒   \    / ⌒ヽ     }  |  |      ,)/  / \ く     |   |!!il|!|!l|         |  コンセプトとかいいからさっさと   /  へ  \   }__/ /      /   /\  \      \i⌒ヽェェ|      /  使い方を教えるお!!! / / |      ノ   ノ    /   / YYY\   \     \ \  /⌒,/´( _ ノ    |      \´    /   /       \   \     / \ \/  /l       |       \_,/   /         \   \_/    \__ノ |\       .|            /            \             |) )       ヽ          /               \           ,r' /         \      , '´                   `' ,        /ー'′          \     (                     )     /            \    \                  /    /

使い方からいくとsvnとの乖離とコマンド大杉のせいで挫折するんだよ!

Page 14: Gitのすすめ

コンセプト・・・ですか・・・

        ____       /      \       /  _ノ  ヽ、_  \      そんなこと言われても    /  (●)  (●)   \    どうすりゃいいのさ    |     (__人__)    |    コンセプトとかわからないお    \     ` ⌒´     /   /´           `\  /  /          l  l__l  l_.[] _____/_/__  \, ´-'ヽ    ヾ_ノ     |     |     |__   コロ・・・・    _____\    コロ・・・・   ()__)」

Page 15: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__)     ゆっくりはじめるぞ  |     ` ⌒´ノ .  |         }  .  ヽ        }     ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 16: Gitのすすめ

gitのコンセプト

Page 17: Gitのすすめ

リポジトリ

• すべてのリポジトリは並列• すべてのリポジトリは今までの履歴を持つ

Page 18: Gitのすすめ

commitを理解する

Page 19: Gitのすすめ

空のリポジトリ

Page 20: Gitのすすめ

ファイルを追加したり

編集・・・

Page 21: Gitのすすめ

git add, git commitで

コミット

Page 22: Gitのすすめ

新しいコミットができる

hoge.cを追加

Page 23: Gitのすすめ

コミットに含まれるもの

hoge.cを追加

revision(SHAハッシュ値)

コミットした人コミットを作った人ファイル構造

一つ前のrevision(ポインタみたいな)

Page 24: Gitのすすめ

コミットに含まれるもの

hoge.cを追加

revision(SHAハッシュ値)

コミットした人コミットを作った人ファイル構造

一つ前のrevision(ポインタみたいな)

リポジトリに含まれるすべてのデータは

このコミットなのです

Page 25: Gitのすすめ

コミットに含まれるもの

hoge.cを追加

revision(SHAハッシュ値)

コミットした人コミットを作った人ファイル構造

一つ前のrevision(ポインタみたいな)

svnのように番号で管理されないことに気をつけて

Page 26: Gitのすすめ

さらに重ねると

hoge.cを追加 hoge.cを編集 hoge.cを編集

こういうグラフをコミットグラフといいますbackポインタが常にあるので

すべてのコミットを辿るとファイル構造を常に再現できます

Page 27: Gitのすすめ

実際にやってみよう

Mac-mini:Desktop sonson$ mkdir test Mac-mini:Desktop sonson$ cd test

Page 28: Gitのすすめ

実際にやってみよう

Mac-mini:Desktop sonson$ mkdir test Mac-mini:Desktop sonson$ cd testMac-mini:test sonson$ git initInitialized empty Git repository in /Users/sonson/Desktop/test/.git/ リポジトリ作成

Page 29: Gitのすすめ

実際にやってみよう

Mac-mini:Desktop sonson$ mkdir test Mac-mini:Desktop sonson$ cd testMac-mini:test sonson$ git initInitialized empty Git repository in /Users/sonson/Desktop/test/.git/Mac-mini:test sonson$ ls -altotal 0drwxr-xr-x 3 sonson staff 102 3 13 09:53 .drwx------+ 22 sonson staff 748 3 13 09:53 ..drwxr-xr-x 10 sonson staff 340 3 13 09:53 .git この不可視ファイルの中身がリポジトリのデータ

Page 30: Gitのすすめ

実際にやってみよう

Mac-mini:Desktop sonson$ mkdir test Mac-mini:Desktop sonson$ cd testMac-mini:test sonson$ git initInitialized empty Git repository in /Users/sonson/Desktop/test/.git/Mac-mini:test sonson$ ls -altotal 0drwxr-xr-x 3 sonson staff 102 3 13 09:53 .drwx------+ 22 sonson staff 748 3 13 09:53 ..drwxr-xr-x 10 sonson staff 340 3 13 09:53 .gitMac-mini:test sonson$ touch main.c

Page 31: Gitのすすめ

実際にやってみよう

Mac-mini:Desktop sonson$ mkdir test Mac-mini:Desktop sonson$ cd testMac-mini:test sonson$ git initInitialized empty Git repository in /Users/sonson/Desktop/test/.git/Mac-mini:test sonson$ ls -altotal 0drwxr-xr-x 3 sonson staff 102 3 13 09:53 .drwx------+ 22 sonson staff 748 3 13 09:53 ..drwxr-xr-x 10 sonson staff 340 3 13 09:53 .gitMac-mini:test sonson$ touch main.cMac-mini:test sonson$ git add main.c gitのファイルツリーの中に追加する

Page 32: Gitのすすめ

実際にやってみよう

Mac-mini:Desktop sonson$ mkdir test Mac-mini:Desktop sonson$ cd testMac-mini:test sonson$ git initInitialized empty Git repository in /Users/sonson/Desktop/test/.git/Mac-mini:test sonson$ ls -altotal 0drwxr-xr-x 3 sonson staff 102 3 13 09:53 .drwx------+ 22 sonson staff 748 3 13 09:53 ..drwxr-xr-x 10 sonson staff 340 3 13 09:53 .gitMac-mini:test sonson$ touch main.cMac-mini:test sonson$ git add main.c Mac-mini:test sonson$ git commit -m "First commit, added main.c"[master (root-commit) d3f62cb] First commit, added main.c 0 files changed create mode 100644 main.c

新しいコミットが作成された

Page 33: Gitのすすめ

git

• hashの一意性

• 差分のツリー構造• 常に後ろに辿れる

Page 34: Gitのすすめ

わかった?

     ____   /      \ ( ;;;;(  /  _ノ  ヽ__\) ;;;;)/    (─)  (─ /;;/|       (__人__) l;;,´ コミットの管理がかわっただけだお?/      ∩ ノ)━・'/ (  \ / _ノ´.|  |  結局svnと同じじゃないかお・・・・?.\  "  /__|  |  \ /___ /

Page 35: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__)  ツリー構造で管理していて,  |     ` ⌒´ノ  ファイルの部分ごとの差分もちゃんと取れる.  |         }   良さがあるんだが・・・・..  ヽ        }   まぁ,ここはそのままでいいだろう   ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 36: Gitのすすめ

clone/push/pullを理解する

Page 37: Gitのすすめ

どこかにリポジトリがあるhoge.cを追加 hoge.cを編集 hoge.cを編集

Page 38: Gitのすすめ

コピーする(くろーん)

hoge.cを追加 hoge.cを編集 hoge.cを編集

clone

hoge.cを追加 hoge.cを編集 hoge.cを編集

Page 39: Gitのすすめ

コードを書くhoge.cを追加 hoge.cを編集 hoge.cを編集

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加

hoge.cを追加 hoge.cを編集 hoge.cを編集

Page 40: Gitのすすめ

コミットするhoge.cを追加 hoge.cを編集 hoge.cを編集hoge.cを追加 hoge.cを編集 hoge.cを編集

hoge.cを追加 hoge.cを編集 hoge.cを編集 コミット

Page 41: Gitのすすめ

pushする

push

hoge.cを追加 hoge.cを編集 hoge.cを編集hoge.cを追加 hoge.cを編集 hoge.cを編集

hoge.cを追加 hoge.cを編集 hoge.cを編集 コミット

Page 42: Gitのすすめ

ウマー

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加

push

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加

Page 43: Gitのすすめ

pullは?hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加

あ,なんか他のリポジトリが更新されてる!!

Page 44: Gitのすすめ

pullは?

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加

pull

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集

Page 45: Gitのすすめ

ひっぱってくる

更新された!

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集

hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集

Page 46: Gitのすすめ

わかった?

     ____   /      \ ( ;;;;(  /  _ノ  ヽ__\) ;;;;)/    (─)  (─ /;;/|       (__人__) l;;,´ コミットと何が違うのかお?/      ∩ ノ)━・'/ (  \ / _ノ´.|  |  pullとpushの呼び方が変わっただけかお・・・・?.\  "  /__|  |  \ /___ /

Page 47: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__) 確かにな・・・・・  |     ` ⌒´ノ 実際の開発の風景を思い浮かべると.  |         }  リポジトリがpush/pullで対等であることの.  ヽ        }  よさがわかると思うぞ   ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 48: Gitのすすめ

対等性 - 公開リポジトリの場合

S川くん

Y田さん

Page 49: Gitのすすめ

対等性 - 社内リポジトリの場合

S川くん

Y田さんのコードにバグがある!!どーしよー

Y田さん

Page 50: Gitのすすめ

人間関係

S川くん

間違ってコミットしたら怒られるの怖いけど

直したい・・・・

Y田さん

Page 51: Gitのすすめ

やっちゃったのか

S川くん

実際,前にY田さんのリポジトリめちゃめちゃにしちゃって

Y田さんのリポジトリにPushする権限がないし・・・・・

Y田さん

Page 52: Gitのすすめ

そんなときは

S川くん

clone

どっかのリポジトリY田さん

Page 53: Gitのすすめ

対等性

S川くん

commit

Y田さん

Page 54: Gitのすすめ

対等性

S川くん

バグ直しましたよ!!こんなもんで,どうですか?

Y田さん

Page 55: Gitのすすめ

対等性

S川くん

あ,いいじゃん

Y田さん

Page 56: Gitのすすめ

対等性

S川くん

pull

Y田さん

pullする

Page 57: Gitのすすめ

対等性

S川くん

やったーバグ治った!俺のコードがちゃんと役立った!

Y田さん

Page 58: Gitのすすめ

clone/push/pull

• clone/push/pullの考えみたいなもの?

• 親とか子とか関係ないので,clone元からpull

して更新することもできます

• push/pullというのは力関係がないことを意味するわけです

Page 59: Gitのすすめ

わかった?

     ____   /      \ ( ;;;;(  /  _ノ  ヽ__\) ;;;;)/    (─)  (─ /;;/|       (__人__) l;;,´ 分散ってのはわかったお・・・・・・・・/      ∩ ノ)━・'/ 色々な人とやるには便利っぽいお・・・・・・(  \ / _ノ´.|  |  ウチの開発環境に関係ないお・・・・・・?.\  "  /__|  |  \ /___ /

Page 60: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__) pull requestと呼ばれるgithubの仕組みを思い浮かべるといい.  |     ` ⌒´ノ .  |         } マージする場所をbranchを作った人が指定するような感じだ.  ヽ        }  職人的にマージする必要性がなくなるので捗る   ヽ     ノ        \    /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 61: Gitのすすめ

branchを理解する

Page 62: Gitのすすめ

branch

master

Page 63: Gitのすすめ

branchを切る

master

debug-feat1

Page 64: Gitのすすめ

branchを切り替える

master

debug-feat1

Page 65: Gitのすすめ

branchを切り替える

master

debug-feat1

つまりbranchとはポインタのようなものですbranchの有無とは無関係にコミットは存在します

Page 66: Gitのすすめ

コミットする

master

debug-feat1

Page 67: Gitのすすめ

さらにコミットする

master

debug-feat1

Page 68: Gitのすすめ

さらにコミットする

master

バグも取れたし,テストも終わったわー

debug-feat1

Page 69: Gitのすすめ

master側も作業

master

debug-feat1

Page 70: Gitのすすめ

branchを切り替えて・・・

master

debug-feat1

Page 71: Gitのすすめ

master側コミットされたようです

master

debug-feat1

Page 72: Gitのすすめ

マージ開始バグFixして欲しい

debug-feat1

master

Page 73: Gitのすすめ

gitがチェック

debug-feat1

master

git

チェック!

Page 74: Gitのすすめ

gitがチェック

debug-feat1

master

git

コンフリクトとかなさげ,Go

Page 75: Gitのすすめ

マーーーーーーーーージ!!

master

debug-feat1

Page 76: Gitのすすめ

よし,よしバグ取れたわ

master

debug-feat1

Page 77: Gitのすすめ

あれ?

あのー,俺は?

master

debug-feat1

Page 78: Gitのすすめ

・・・・あ,用済みだわ

master

debug-feat1

Page 79: Gitのすすめ

branch削除

master

あああああああ!

Page 80: Gitのすすめ

branchの考え方

branchとはこんなイメージですsvnと違ってデータがすべてコピーされませんあくまでポインタであることをお忘れなく

実体はコミットグラフとして常に存在しています

master

Page 81: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* master

現在のbranchを調べる

master

Page 82: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch develop 新しくbranchを作成

develop

master

Page 83: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop' 新しく作ったbranchに切り替える

develop

master

Page 84: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop'Mac-mini:test sonson$ git branch* develop master

branchを調べるとちゃんとふたつある

develop

master

Page 85: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop'Mac-mini:test sonson$ git branch* develop masterMac-mini:test sonson$ touch feature1.cMac-mini:test sonson$ git add feature1.c Mac-mini:test sonson$ git commit -m "Added new feature."[develop 5b5cc9c] Added new feature. 0 files changed create mode 100644 feature1.c branch “develop”でファイルを追加する

develop

master

Page 86: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop'Mac-mini:test sonson$ git branch* develop masterMac-mini:test sonson$ touch feature1.cMac-mini:test sonson$ git add feature1.c Mac-mini:test sonson$ git commit -m "Added new feature."[develop 5b5cc9c] Added new feature. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$ ls feature1.c main.c ちゃんとファイルはふたつあるよね

develop

master

Page 87: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop'Mac-mini:test sonson$ git branch* develop masterMac-mini:test sonson$ touch feature1.cMac-mini:test sonson$ git add feature1.c Mac-mini:test sonson$ git commit -m "Added new feature."[develop 5b5cc9c] Added new feature. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$ ls feature1.c main.cMac-mini:test sonson$ git checkout masterSwitched to branch 'master'

ここでbranch “master”に戻すとどうなる?

develop

master

Page 88: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop'Mac-mini:test sonson$ git branch* develop masterMac-mini:test sonson$ touch feature1.cMac-mini:test sonson$ git add feature1.c Mac-mini:test sonson$ git commit -m "Added new feature."[develop 5b5cc9c] Added new feature. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$ ls feature1.c main.cMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.c あ,ファイルが消えてる!!!!!!!!!

develop

master

Page 89: Gitのすすめ

実際にやってみようMac-mini:test sonson$ git branch* masterMac-mini:test sonson$ git branch developMac-mini:test sonson$ git checkout developSwitched to branch 'develop'Mac-mini:test sonson$ git branch* develop masterMac-mini:test sonson$ touch feature1.cMac-mini:test sonson$ git add feature1.c Mac-mini:test sonson$ git commit -m "Added new feature."[develop 5b5cc9c] Added new feature. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$ ls feature1.c main.cMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.c あ,ファイルが消えてる!!!!!!!!!

gitのリポジトリを作ったディレクトリはgitに管理されるイメージ.すべてのデータは.git内にあり,そこからデータを引き出して,

そのディレクトリ内で作業する感じになる

Page 90: Gitのすすめ

マージしてみるMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.c

develop

master

Page 91: Gitのすすめ

あれ?Mac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1."Merge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

Page 92: Gitのすすめ

あれ?Mac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1."Merge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

これをfast forwardマージといいます.ファイル等の変更にコンフリクト等がない場合は,

そのままbranchを飛ばすだけでマージが成立するのです.

Page 93: Gitのすすめ

マージしてみる2Mac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.c

develop

master

Page 94: Gitのすすめ

おーMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1." --no-ffMerge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

Page 95: Gitのすすめ

おーMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1." --no-ffMerge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

これをno fast forwardマージといいます.常に新しいコミットを作ってマージします.

Page 96: Gitのすすめ

おーMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1." --no-ffMerge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

手元でマージするときは必ず,--no-ffで行うべきです.どこでマージが行われたのかわからないからです.

さっきの例は--no-ffだったのね(というか絶対コミットができる)

Page 97: Gitのすすめ

おーMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1." --no-ffMerge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

ただし,pullするときには--ffでやる方がいいでしょう.ローカルに対してもコミットが発生してしまうので,コミットグラフがぐちゃぐちゃになってしまいます

Page 98: Gitのすすめ

おーMac-mini:test sonson$ git checkout masterSwitched to branch 'master'Mac-mini:test sonson$ lsmain.cMac-mini:test sonson$ git merge develop -m "Merge new feature1." --no-ffMerge made by the 'recursive' strategy. 0 files changed create mode 100644 feature1.cMac-mini:test sonson$

developをmasterにマージ

develop

master

とは言っても,グラフがめちゃくちゃになってもコードはちゃんと保たれるのであまり心配することもありません.最初は恐れずガンガンやって,後悔することにしましょう.

Page 99: Gitのすすめ

branch

• gitのbranchは軽い

• んでbranchのようで(svnの)branchではない

• svnのようにコピーではありません

• いくら作ってもリポジトリは大きくなりません

• すぐに気軽に作って潰せます

Page 100: Gitのすすめ

わかった?

     ____   /      \ ( ;;;;(  /  _ノ  ヽ__\) ;;;;)/    (─)  (─ /;;/|       (__人__) l;;,´ ますますわからなくなったお・・・・・・・・/      ∩ ノ)━・'/ これが何の役に立つんだお・・・・・・?(  \ / _ノ´.|  |  .\  "  /__|  |  \ /___ /

Page 101: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__)  このbranchとpush/pullを組み合わせると  |     ` ⌒´ノ  分散型の開発開発すごく捗るんだが・・・・.  |         }  .  ヽ        }   仕方がない具体的な例で説明するか   ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 102: Gitのすすめ

gitを実践で考える

Page 103: Gitのすすめ

実践

Page 104: Gitのすすめ

例)アプリを展示会に出すmaster

feature1

develop

ついにver1が完成!明日から3日間展示会です!

Page 105: Gitのすすめ

cloneします master

feature1

develop

master

feature1

develop

Page 106: Gitのすすめ

cloneします master

feature1

develop

master

feature1

develop

展示会組

居残り組

Page 107: Gitのすすめ

展示会の準備中master

feature1

Page 108: Gitのすすめ

動かしたら・・・master

feature1

ちょwwwwwおまwwwwwww

S木さんのコードバグってる!!!

Page 109: Gitのすすめ

動かしたら・・・master

feature1

どーすんのよーこの場で直すかー

Page 110: Gitのすすめ

動かしたら・・・master

どーすんのよーこの場で直すかーbranch切るよー

feature1

Page 111: Gitのすすめ

デバッグ!master

feature1

demo-fix

Page 112: Gitのすすめ

デバッグ!master

demo-fix

まだ何かヘンだなー

feature1

Page 113: Gitのすすめ

展示会も終わり・・・master

demo-fix

feature1

Page 114: Gitのすすめ

さて,帰ってきたのでPush!

master

demo-fix

feature1

Page 115: Gitのすすめ

さて,帰ってきたのでPush!

master

demo-fix

feature1

Page 116: Gitのすすめ

おお,統合されたmaster

demo-fix

develop

feature1

Page 117: Gitのすすめ

マージして整理しようかmaster

demo-fix

develop

feature1

Page 118: Gitのすすめ

展示会でのfixどうする?master

demo-fix

develop

feature1

Page 119: Gitのすすめ

よさげなのでマーーーージmaster

develop

feature1

demo-fix

Page 120: Gitのすすめ

こっちもくださいmaster

develop

feature1

Page 121: Gitのすすめ

こっちもくださいmaster

develop

feature1

Page 122: Gitのすすめ

ちゃんちゃんmaster

develop

feature1

Page 123: Gitのすすめ

祭りの後

     ____   /      \ ( ;;;;(  /  _ノ  ヽ__\) ;;;;)/    (─)  (─ /;;/|       (__人__) l;;,´ なんとなくわかったような・・・・・・・・/      ∩ ノ)━・'/ なんだかわからないような・・・・・だお(  \ / _ノ´.|  |  .\  "  /__|  |  \ /___ /

Page 124: Gitのすすめ

   / ̄ ̄\ /   _ノ  \ |    ( ●)(●). |     (__人__) しょせん概念は概念.  |     ` ⌒´ノ  実際にやらないとわからないだろJK.  |         }.  ヽ        }   この使い方を年頭にいれて使ってみるのが定石だ   ヽ     ノ        \   /    く  \        \   |     \   \         \    |    |ヽ、二⌒)、          \

Page 125: Gitのすすめ

     ____     /⌒  ⌒\ ホジホジ   /( ●)  (●)\  /::::::⌒(__人__)⌒::::: \  とりあえずやってみるお  |    mj |ー'´      |  \  〈__ノ       /    ノ  ノ

Page 126: Gitのすすめ

      ._       \ヽ, ,、        `''|/ノ         .|     _   |     \`ヽ、|      \, V         `L,,_         |ヽ、)  ,、        /    ヽYノ       /    r''ヽ、.|      |     `ー-ヽ|ヮ      |       `|      |.        |      ヽ、      |        ヽ____ノ        /_ノ ' ヽ_\      /(≡)   (≡)\     /::::::⌒(__人__)⌒::::: \     |     |r┬-|     |     \      `ー'´     /     /          \     (  |          |  )     \|    э    |/       (    ,,,,    ,ノ       \  、(U)ノ ノ         \/  /            ┼ヽ  -|r‐、. レ |         /  /\            d⌒) ./| _ノ  __ノ      ⊂⌒__)__)

Page 127: Gitのすすめ

Thank you.

@sonson_twithttp://sonson.jp

Page 128: Gitのすすめ

backup slide

backup