SlideShare ist ein Scribd-Unternehmen logo
1 von 128
Downloaden Sie, um offline zu lesen
gitのすすめ
デンソーアイティーラボラトリ
吉田悠一
プレゼンで出てくる話はすべてフィクションです。
実在の人物や団体などとはたぶん関係ありません。
subversion?
          ____
       / \  /\  キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |   さて,今日もsubversionからチェックアウトして
     \     `ー'´   /   コーディングだお!!
    ノ            \
  /´               ヽ
subversion?
            ___
       /      \
      /ノ  \   u. \ !?
    / (●)  (●)    \ 
    |   (__人__)    u.   | クスクス>
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ
subversion?
         ____
<クスクス   /       \!??
      /  u   ノ  \
    /      u (●)  \
    |         (__人__)|
     \    u   .` ⌒/
    ノ           \
  /´               ヽ
git・・・・?
svn??
svn
自重
って言われても
       ____
     /      \
   / ─    ─ \
  /   (○)  (○)   \ SVNじゃだめなのかお…
  |      (__人__)    |  
  \     ` ⌒´     /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__) いまだにsvnか・・・・・
  |     ` ⌒´ノ 日付でファイルが増えていくよりマシだが・・・
.  |         }  
.  ヽ        }  エンジニアならgitを使うだろJK
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
そんなこんなで
       ____
     /⌒  ⌒\
   /( ●)  (●)\
  /::::::⌒(__人__)⌒:::::\  やらない夫!
  |     |r┬-|     |  gitについてやる夫に教えろお!
  \      `ー'´     /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__) まぁいいだろう・・・・
  |     ` ⌒´ノ 
.  |         }  
.  ヽ        }  (このプレゼン作るのに2時間かかったんだが)
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
git
• 分散型ソースコード管理ツール
• SVN, CVSとは違うよ
• リーナスさんがLinuxカーネルの開発を進めるた
めに開発
git理解への早道
• まずコンセプトを理解する
• 仕様,コマンドから始めると死ねる
そんなこんなで
      / ̄ ̄\
    /ノ(  ゝ 、_,ノヽ        r'´ ゙ヽ      /`ヽ          ____
    | ⌒(( ●)(●)        ヽ   ヽ从从/   /        \   /\
.    |     (__人__) /⌒l     \  \/  /て       (●)liil(●) ノ( \
     |     ` ⌒´ノ |`'''|    ∑ ヽ/  /  そ     / (__人__)  ⌒   \
    / ⌒ヽ     }  |  |      ,)/  / \ く     |   |!!il|!|!l|         |  コンセプトとかいいからさっさと
   /  へ  \   }__/ /      /   /\  \      \i⌒ヽェェ|      /  使い方を教えるお!!!
 / / |      ノ   ノ    /   / YYY\   \     \ \  /⌒,/´
( _ ノ    |      \´    /   /       \   \     / \ \/  /l
       |       \_,/   /         \   \_/    \__ノ |\
       .|            /            \             |) )
       ヽ          /               \           ,r' /
         \      , '´                   `' ,        /ー'′
          \     (                     )     /
            \    \                  /    /
使い方からいくとsvnとの乖離とコマンド大杉のせいで挫折するんだよ!
コンセプト・・・ですか・・・
        ____
       /      \  
     /  _ノ  ヽ、_  \      そんなこと言われても
    /  (●)  (●)   \    どうすりゃいいのさ
    |     (__人__)    |    コンセプトとかわからないお
    \     ` ⌒´     /
   /´           `\
  /  /          l  l
__l  l_.[] _____/_/__
  \, ´-'ヽ
    ヾ_ノ
     |
     |
     |__   コロ・・・・
    _____\    コロ・・・・
   ()__)」
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)     ゆっくりはじめるぞ
  |     ` ⌒´ノ 
.  |         }  
.  ヽ        }  
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
gitのコンセプト
リポジトリ
• すべてのリポジトリは並列
• すべてのリポジトリは今までの履歴を持つ
commitを理解する
空のリポジトリ
ファイルを追加したり
編集・・・
git add, git commitで
コミット
新しいコミットができる
hoge.cを追加
コミットに含まれるもの
hoge.cを追加
revision(SHAハッシュ値)
コミットした人
コミットを作った人
ファイル構造
一つ前のrevision(ポインタみたいな)
コミットに含まれるもの
hoge.cを追加
revision(SHAハッシュ値)
コミットした人
コミットを作った人
ファイル構造
一つ前のrevision(ポインタみたいな)
リポジトリに含まれる
すべてのデータは
このコミットなのです
コミットに含まれるもの
hoge.cを追加
revision(SHAハッシュ値)
コミットした人
コミットを作った人
ファイル構造
一つ前のrevision(ポインタみたいな)
svnのように番号で
管理されないこと
に気をつけて
さらに重ねると
hoge.cを追加 hoge.cを編集 hoge.cを編集
こういうグラフをコミットグラフといいます
backポインタが常にあるので
すべてのコミットを るとファイル構造を常に再現できます
実際にやってみよう
Mac-mini:Desktop	 sonson$	 mkdir	 test	 
Mac-mini:Desktop	 sonson$	 cd	 test
実際にやってみよう
Mac-mini:Desktop	 sonson$	 mkdir	 test	 
Mac-mini:Desktop	 sonson$	 cd	 test
Mac-mini:test	 sonson$	 git	 init
Initialized	 empty	 Git	 repository	 in	 /Users/sonson/Desktop/test/.git/ リポジトリ作成
実際にやってみよう
Mac-mini:Desktop	 sonson$	 mkdir	 test	 
Mac-mini:Desktop	 sonson$	 cd	 test
Mac-mini:test	 sonson$	 git	 init
Initialized	 empty	 Git	 repository	 in	 /Users/sonson/Desktop/test/.git/
Mac-mini:test	 sonson$	 ls	 -al
total	 0
drwxr-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 この不可視ファイルの中身がリポジトリのデータ
実際にやってみよう
Mac-mini:Desktop	 sonson$	 mkdir	 test	 
Mac-mini:Desktop	 sonson$	 cd	 test
Mac-mini:test	 sonson$	 git	 init
Initialized	 empty	 Git	 repository	 in	 /Users/sonson/Desktop/test/.git/
Mac-mini:test	 sonson$	 ls	 -al
total	 0
drwxr-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
Mac-mini:test	 sonson$	 touch	 main.c
実際にやってみよう
Mac-mini:Desktop	 sonson$	 mkdir	 test	 
Mac-mini:Desktop	 sonson$	 cd	 test
Mac-mini:test	 sonson$	 git	 init
Initialized	 empty	 Git	 repository	 in	 /Users/sonson/Desktop/test/.git/
Mac-mini:test	 sonson$	 ls	 -al
total	 0
drwxr-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
Mac-mini:test	 sonson$	 touch	 main.c
Mac-mini:test	 sonson$	 git	 add	 main.c	  gitのファイルツリーの中に追加する
実際にやってみよう
Mac-mini:Desktop	 sonson$	 mkdir	 test	 
Mac-mini:Desktop	 sonson$	 cd	 test
Mac-mini:test	 sonson$	 git	 init
Initialized	 empty	 Git	 repository	 in	 /Users/sonson/Desktop/test/.git/
Mac-mini:test	 sonson$	 ls	 -al
total	 0
drwxr-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
Mac-mini:test	 sonson$	 touch	 main.c
Mac-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
新しいコミットが作成された
git
• hashの一意性
• 差分のツリー構造
• 常に後ろに れる
わかった?
     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ コミットの管理がかわっただけだお?
/      ∩ ノ)━・'/ 
(  \ / _ノ´.|  |  結局svnと同じじゃないかお・・・・?
.\  "  /__|  |
  \ /___ /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)  ツリー構造で管理していて,
  |     ` ⌒´ノ  ファイルの部分ごとの差分もちゃんと取れる
.  |         }   良さがあるんだが・・・・.
.  ヽ        }   まぁ,ここはそのままでいいだろう
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
clone/push/pullを理解する
どこかにリポジトリがある
hoge.cを追加 hoge.cを編集 hoge.cを編集
コピーする(くろーん)
hoge.cを追加 hoge.cを編集 hoge.cを編集
clone
hoge.cを追加 hoge.cを編集 hoge.cを編集
コードを書く
hoge.cを追加 hoge.cを編集 hoge.cを編集
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加
hoge.cを追加 hoge.cを編集 hoge.cを編集
コミットする
hoge.cを追加 hoge.cを編集 hoge.cを編集hoge.cを追加 hoge.cを編集 hoge.cを編集
hoge.cを追加 hoge.cを編集 hoge.cを編集 コミット
pushする
push
hoge.cを追加 hoge.cを編集 hoge.cを編集hoge.cを追加 hoge.cを編集 hoge.cを編集
hoge.cを追加 hoge.cを編集 hoge.cを編集 コミット
ウマー
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加
push
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加
pullは?
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加
あ,なんか他のリポジトリが
更新されてる!!
pullは?
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加
pull
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集
ひっぱってくる
更新された!
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集
hoge.cを追加 hoge.cを編集 hoge.cを編集 bar.cを追加 bar.cを編集
わかった?
     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ コミットと何が違うのかお?
/      ∩ ノ)━・'/ 
(  \ / _ノ´.|  |  pullとpushの呼び方が変わっただけかお・・・・?
.\  "  /__|  |
  \ /___ /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__) 確かにな・・・・・
  |     ` ⌒´ノ 実際の開発の風景を思い浮かべると
.  |         }  リポジトリがpush/pullで対等であることの
.  ヽ        }  よさがわかると思うぞ
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
対等性 - 公開リポジトリの場合
S川くん
Y田さん
対等性 - 社内リポジトリの場合
S川くん
Y田さんのコードに
バグがある!!
どーしよー
Y田さん
人間関係
S川くん
間違ってコミットしたら怒られる
の怖いけど
直したい・・・・
Y田さん
やっちゃったのか
S川くん
実際,前にY田さんのリポジト
リめちゃめちゃにしちゃって
Y田さんのリポジトリにPushする権限がない
し・・・・・
Y田さん
そんなときは
S川くん
clone
どっかのリポジトリY田さん
対等性
S川くん
commit
Y田さん
対等性
S川くん
バグ直しましたよ!!
こんなもんで,どうですか?
Y田さん
対等性
S川くん
あ,いいじゃん
Y田さん
対等性
S川くん
pull
Y田さん
pullする
対等性
S川くん
やったーバグ治った!
俺のコードがちゃんと役立った!
Y田さん
clone/push/pull
• clone/push/pullの考えみたいなもの?
• 親とか子とか関係ないので,clone元からpull
して更新することもできます
• push/pullというのは力関係がないことを意味
するわけです
わかった?
     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ 分散ってのはわかったお・・・・・・・・
/      ∩ ノ)━・'/ 色々な人とやるには便利っぽいお・・・・・・
(  \ / _ノ´.|  |  ウチの開発環境に関係ないお・・・・・・?
.\  "  /__|  |
  \ /___ /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__) pull requestと呼ばれるgithubの仕組みを思い浮かべるといい.
  |     ` ⌒´ノ 
.  |         } マージする場所をbranchを作った人が指定するような感じだ
.  ヽ        }  職人的にマージする必要性がなくなるので捗る
   ヽ     ノ        \ 
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
branchを理解する
branch
master
branchを切る
master
debug-feat1
branchを切り替える
master
debug-feat1
branchを切り替える
master
debug-feat1
つまりbranchとはポインタのようなものです
branchの有無とは無関係にコミットは存在します
コミットする
master
debug-feat1
さらにコミットする
master
debug-feat1
さらにコミットする
master
バグも取れたし,テストも終わ
ったわー
debug-feat1
master側も作業
master
debug-feat1
branchを切り替えて・・・
master
debug-feat1
master側コミットされたようです
master
debug-feat1
マージ開始
バグFixして欲しい
debug-feat1
master
gitがチェック
debug-feat1
master
git
チェック!
gitがチェック
debug-feat1
master
git
コンフリクト
とかなさげ,Go
マーーーーーーーーージ!!
master
debug-feat1
よし,よし
バグ取れたわ
master
debug-feat1
あれ?
あのー,俺は?
master
debug-feat1
・・・・
あ,用済みだわ
master
debug-feat1
branch削除
master
あああああああ!
branchの考え方
branchとはこんなイメージです
svnと違ってデータがすべてコピーされません
あくまでポインタであることをお忘れなく
実体はコミットグラフとして常に存在しています
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
現在のbranchを調べる
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop 新しくbranchを作成
develop
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop' 新しく作ったbranchに切り替える
develop
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop'
Mac-mini:test	 sonson$	 git	 branch
*	 develop
	 	 master
branchを調べるとちゃんとふたつある
develop
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop'
Mac-mini:test	 sonson$	 git	 branch
*	 develop
	 	 master
Mac-mini:test	 sonson$	 touch	 feature1.c
Mac-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
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop'
Mac-mini:test	 sonson$	 git	 branch
*	 develop
	 	 master
Mac-mini:test	 sonson$	 touch	 feature1.c
Mac-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
Mac-mini:test	 sonson$	 ls	 
feature1.c	 main.c ちゃんとファイルはふたつあるよね
develop
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop'
Mac-mini:test	 sonson$	 git	 branch
*	 develop
	 	 master
Mac-mini:test	 sonson$	 touch	 feature1.c
Mac-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
Mac-mini:test	 sonson$	 ls	 
feature1.c	 main.c
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
ここでbranch “master”に戻すとどうなる?
develop
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop'
Mac-mini:test	 sonson$	 git	 branch
*	 develop
	 	 master
Mac-mini:test	 sonson$	 touch	 feature1.c
Mac-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
Mac-mini:test	 sonson$	 ls	 
feature1.c	 main.c
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c あ,ファイルが消えてる!!!!!!!!!
develop
master
実際にやってみよう
Mac-mini:test	 sonson$	 git	 branch
*	 master
Mac-mini:test	 sonson$	 git	 branch	 develop
Mac-mini:test	 sonson$	 git	 checkout	 develop
Switched	 to	 branch	 'develop'
Mac-mini:test	 sonson$	 git	 branch
*	 develop
	 	 master
Mac-mini:test	 sonson$	 touch	 feature1.c
Mac-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
Mac-mini:test	 sonson$	 ls	 
feature1.c	 main.c
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c あ,ファイルが消えてる!!!!!!!!!
gitのリポジトリを作ったディレクトリはgitに管理されるイメージ.
すべてのデータは.git内にあり,そこからデータを引き出して,
そのディレクトリ内で作業する感じになる
マージしてみる
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
develop
master
あれ?
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
あれ?
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
これをfast forwardマージといいます.
ファイル等の変更にコンフリクト等がない場合は,
そのままbranchを飛ばすだけでマージが成立するのです.
マージしてみる2
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
develop
master
おー
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."	 --no-ff
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
おー
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."	 --no-ff
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
これをno fast forwardマージといいます.
常に新しいコミットを作ってマージします.
おー
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."	 --no-ff
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
手元でマージするときは必ず,--no-ffで行うべきです.
どこでマージが行われたのかわからないからです.
さっきの例は--no-ffだったのね
(というか絶対コミットができる)
おー
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."	 --no-ff
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
ただし,pullするときには--ffでやる方がいいでしょう.
ローカルに対してもコミットが発生してしまうので,
コミットグラフがぐちゃぐちゃになってしまいます
おー
Mac-mini:test	 sonson$	 git	 checkout	 master
Switched	 to	 branch	 'master'
Mac-mini:test	 sonson$	 ls
main.c
Mac-mini:test	 sonson$	 git	 merge	 develop	 -m	 "Merge	 new	 feature1."	 --no-ff
Merge	 made	 by	 the	 'recursive'	 strategy.
	 0	 files	 changed
	 create	 mode	 100644	 feature1.c
Mac-mini:test	 sonson$	 
developをmasterにマージ
develop
master
とは言っても,グラフがめちゃくちゃになっても
コードはちゃんと保たれるのであまり心配することもありません.
最初は恐れずガンガンやって,後悔することにしましょう.
branch
• gitのbranchは軽い
• んでbranchのようで(svnの)branchではない
• svnのようにコピーではありません
• いくら作ってもリポジトリは大きくなりません
• すぐに気軽に作って潰せます
わかった?
     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ ますますわからなくなったお・・・・・・・・
/      ∩ ノ)━・'/ これが何の役に立つんだお・・・・・・?
(  \ / _ノ´.|  |  
.\  "  /__|  |
  \ /___ /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__)  このbranchとpush/pullを組み合わせると
  |     ` ⌒´ノ  分散型の開発開発すごく捗るんだが・・・・
.  |         }  
.  ヽ        }   仕方がない具体的な例で説明するか
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
gitを実践で考える
実践
例)アプリを展示会に出す
master
feature1
develop
ついにver1が完成!明日から3日間展示会です!
cloneします master
feature1
develop
master
feature1
develop
cloneします master
feature1
develop
master
feature1
develop
展示会組
居残り組
展示会の準備中
master
feature1
動かしたら・・・
master
feature1
ちょwwwww
おまwwwwwww
S木さんの
コードバグってる!!!
動かしたら・・・
master
feature1
どーすんのよー
この場で直すかー
動かしたら・・・
master
どーすんのよー
この場で直すかー
branch切るよー
feature1
デバッグ!
master
feature1
demo-fix
デバッグ!
master
demo-fix
まだ何かヘンだなー
feature1
展示会も終わり・・・
master
demo-fix
feature1
さて,帰ってきたのでPush!
master
demo-fix
feature1
さて,帰ってきたのでPush!
master
demo-fix
feature1
おお,統合された
master
demo-fix
develop
feature1
マージして整理しようか
master
demo-fix
develop
feature1
展示会でのfixどうする?
master
demo-fix
develop
feature1
よさげなのでマーーーージ
master
develop
feature1
demo-fix
こっちもください
master
develop
feature1
こっちもください
master
develop
feature1
ちゃんちゃん
master
develop
feature1
祭りの後
     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ なんとなくわかったような・・・・・・・・
/      ∩ ノ)━・'/ なんだかわからないような・・・・・だお
(  \ / _ノ´.|  |  
.\  "  /__|  |
  \ /___ /
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__) しょせん概念は概念.
  |     ` ⌒´ノ  実際にやらないとわからないだろJK
.  |         }
.  ヽ        }   この使い方を年頭にいれて使ってみるのが定石だ
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \
     ____
     /⌒  ⌒\ ホジホジ
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \  とりあえずやってみるお
  |    mj |ー'´      |
  \  〈__ノ       /
    ノ  ノ
      ._
       \ヽ, ,、
        `''|/ノ
         .|
     _   |
     \`ヽ、|
      \, V
         `L,,_
         |ヽ、)  ,、
        /    ヽYノ
       /    r''ヽ、.|
      |     `ー-ヽ|ヮ
      |       `|
      |.        |
      ヽ、      |
        ヽ____ノ
        /_ノ ' ヽ_\
      /(≡)   (≡)\
     /::::::⌒(__人__)⌒::::: \
     |     |r┬-|     |
     \      `ー'´     /
     /          \
     (  |          |  )
     \|    э    |/
       (    ,,,,    ,ノ
       \  、(U)ノ ノ
         \/  /            ┼ヽ  -|r‐、. レ |
         /  /\            d⌒) ./| _ノ  __ノ
      ⊂⌒__)__)
Thank you.
@sonson_twit
http://sonson.jp
backup slide
backup

Weitere ähnliche Inhalte

Andere mochten auch

DSIRNLP06 Nested Pitman-Yor Language Model
DSIRNLP06 Nested Pitman-Yor Language ModelDSIRNLP06 Nested Pitman-Yor Language Model
DSIRNLP06 Nested Pitman-Yor Language ModelKei Uchiumi
 
Vanishing Component Analysisの試作と簡単な実験
Vanishing Component Analysisの試作と簡単な実験Vanishing Component Analysisの試作と簡単な実験
Vanishing Component Analysisの試作と簡単な実験Hiroshi Tsukahara
 
Sparse Isotropic Hashing
Sparse Isotropic HashingSparse Isotropic Hashing
Sparse Isotropic HashingIkuro Sato
 
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説Yusuke Sekikawa
 
FLAT CAM: Replacing Lenses with Masks and Computationの解説
FLAT CAM: Replacing Lenses with Masks and Computationの解説FLAT CAM: Replacing Lenses with Masks and Computationの解説
FLAT CAM: Replacing Lenses with Masks and Computationの解説Yusuke Sekikawa
 
Deep Learning Chapter12
Deep Learning Chapter12Deep Learning Chapter12
Deep Learning Chapter12Kei Uchiumi
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Yuichi Yoshida
 
論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)
論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)
論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)Keisuke Uto
 
Nl220 Pitman-Yor Hidden Semi Markov Model
Nl220 Pitman-Yor Hidden Semi Markov ModelNl220 Pitman-Yor Hidden Semi Markov Model
Nl220 Pitman-Yor Hidden Semi Markov ModelKei Uchiumi
 
ディープラーニングの車載応用に向けて
ディープラーニングの車載応用に向けてディープラーニングの車載応用に向けて
ディープラーニングの車載応用に向けてIkuro Sato
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座Yusei Yamanaka
 
Windows Store アプリをuniversal にして申請する手順
Windows Store アプリをuniversal にして申請する手順Windows Store アプリをuniversal にして申請する手順
Windows Store アプリをuniversal にして申請する手順Osamu Masutani
 
Sigir2013 retrieval models-and_ranking_i_pub
Sigir2013 retrieval models-and_ranking_i_pubSigir2013 retrieval models-and_ranking_i_pub
Sigir2013 retrieval models-and_ranking_i_pubKei Uchiumi
 
Stochastic Process Overview (hypothesis)
Stochastic Process Overview (hypothesis)Stochastic Process Overview (hypothesis)
Stochastic Process Overview (hypothesis)Yoshiaki Sakakura
 
Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編Osamu Masutani
 
Windows HPC Server 講習会 第1回 導入編 1/2
Windows HPC Server 講習会 第1回 導入編 1/2Windows HPC Server 講習会 第1回 導入編 1/2
Windows HPC Server 講習会 第1回 導入編 1/2Osamu Masutani
 

Andere mochten auch (20)

DSIRNLP06 Nested Pitman-Yor Language Model
DSIRNLP06 Nested Pitman-Yor Language ModelDSIRNLP06 Nested Pitman-Yor Language Model
DSIRNLP06 Nested Pitman-Yor Language Model
 
Vanishing Component Analysisの試作と簡単な実験
Vanishing Component Analysisの試作と簡単な実験Vanishing Component Analysisの試作と簡単な実験
Vanishing Component Analysisの試作と簡単な実験
 
Pylm public
Pylm publicPylm public
Pylm public
 
Dsirnlp#7
Dsirnlp#7Dsirnlp#7
Dsirnlp#7
 
Sparse Isotropic Hashing
Sparse Isotropic HashingSparse Isotropic Hashing
Sparse Isotropic Hashing
 
Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説Go-ICP: グローバル最適(Globally optimal) なICPの解説
Go-ICP: グローバル最適(Globally optimal) なICPの解説
 
FLAT CAM: Replacing Lenses with Masks and Computationの解説
FLAT CAM: Replacing Lenses with Masks and Computationの解説FLAT CAM: Replacing Lenses with Masks and Computationの解説
FLAT CAM: Replacing Lenses with Masks and Computationの解説
 
Deep Learning Chapter12
Deep Learning Chapter12Deep Learning Chapter12
Deep Learning Chapter12
 
Extreme Learning Machine
Extreme Learning MachineExtreme Learning Machine
Extreme Learning Machine
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
RNNLM
RNNLMRNNLM
RNNLM
 
論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)
論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)
論文紹介:Practical bayesian optimization of machine learning algorithms(nips2012)
 
Nl220 Pitman-Yor Hidden Semi Markov Model
Nl220 Pitman-Yor Hidden Semi Markov ModelNl220 Pitman-Yor Hidden Semi Markov Model
Nl220 Pitman-Yor Hidden Semi Markov Model
 
ディープラーニングの車載応用に向けて
ディープラーニングの車載応用に向けてディープラーニングの車載応用に向けて
ディープラーニングの車載応用に向けて
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座
 
Windows Store アプリをuniversal にして申請する手順
Windows Store アプリをuniversal にして申請する手順Windows Store アプリをuniversal にして申請する手順
Windows Store アプリをuniversal にして申請する手順
 
Sigir2013 retrieval models-and_ranking_i_pub
Sigir2013 retrieval models-and_ranking_i_pubSigir2013 retrieval models-and_ranking_i_pub
Sigir2013 retrieval models-and_ranking_i_pub
 
Stochastic Process Overview (hypothesis)
Stochastic Process Overview (hypothesis)Stochastic Process Overview (hypothesis)
Stochastic Process Overview (hypothesis)
 
Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編
 
Windows HPC Server 講習会 第1回 導入編 1/2
Windows HPC Server 講習会 第1回 導入編 1/2Windows HPC Server 講習会 第1回 導入編 1/2
Windows HPC Server 講習会 第1回 導入編 1/2
 

Ähnlich wie Gitのすすめ

モテる! Node.js でつくる twitter ボット制作
モテる! Node.js でつくる twitter ボット制作モテる! Node.js でつくる twitter ボット制作
モテる! Node.js でつくる twitter ボット制作hecomi
 
やる夫で学ぶマーケティング
やる夫で学ぶマーケティングやる夫で学ぶマーケティング
やる夫で学ぶマーケティングlogch admin
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDとsters
 
ぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつYukiya Nakagawa
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門Ryo Miyake
 
【TDDBC2.1】やる夫で学ぶTDD
【TDDBC2.1】やる夫で学ぶTDD【TDDBC2.1】やる夫で学ぶTDD
【TDDBC2.1】やる夫で学ぶTDDKohki Miki
 
ゆとりがErlangを始めるようです
ゆとりがErlangを始めるようですゆとりがErlangを始めるようです
ゆとりがErlangを始めるようですsleepy_yoshi
 
about Eucalyptus 3.1 in OSC 2012 Tokyo/Fall
about Eucalyptus 3.1 in OSC 2012 Tokyo/Fallabout Eucalyptus 3.1 in OSC 2012 Tokyo/Fall
about Eucalyptus 3.1 in OSC 2012 Tokyo/FallOsamu Habuka
 
Source treeで始めるgit
Source treeで始めるgitSource treeで始めるgit
Source treeで始めるgitSatoshi Kamigaki
 
やるおがtriphone HMMを作るようです
やるおがtriphone HMMを作るようですやるおがtriphone HMMを作るようです
やるおがtriphone HMMを作るようですShinya Shimizu
 
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話Tomoo Amano
 
IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?terurou
 
201005 Debian/つくらぐ勉強会 lightning talk
201005 Debian/つくらぐ勉強会 lightning talk 201005 Debian/つくらぐ勉強会 lightning talk
201005 Debian/つくらぐ勉強会 lightning talk Hideki Yamane
 
タイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメタイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメTakuto Matsuu
 
FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化dena_study
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なことhistoria_Inc
 

Ähnlich wie Gitのすすめ (20)

モテる! Node.js でつくる twitter ボット制作
モテる! Node.js でつくる twitter ボット制作モテる! Node.js でつくる twitter ボット制作
モテる! Node.js でつくる twitter ボット制作
 
Title
TitleTitle
Title
 
やる夫で学ぶマーケティング
やる夫で学ぶマーケティングやる夫で学ぶマーケティング
やる夫で学ぶマーケティング
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDと
 
ぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつぼくのかんがえたふつうのあんどろいどかいはつ
ぼくのかんがえたふつうのあんどろいどかいはつ
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門
 
【TDDBC2.1】やる夫で学ぶTDD
【TDDBC2.1】やる夫で学ぶTDD【TDDBC2.1】やる夫で学ぶTDD
【TDDBC2.1】やる夫で学ぶTDD
 
ゆとりがErlangを始めるようです
ゆとりがErlangを始めるようですゆとりがErlangを始めるようです
ゆとりがErlangを始めるようです
 
about Eucalyptus 3.1 in OSC 2012 Tokyo/Fall
about Eucalyptus 3.1 in OSC 2012 Tokyo/Fallabout Eucalyptus 3.1 in OSC 2012 Tokyo/Fall
about Eucalyptus 3.1 in OSC 2012 Tokyo/Fall
 
Source treeで始めるgit
Source treeで始めるgitSource treeで始めるgit
Source treeで始めるgit
 
やるおがtriphone HMMを作るようです
やるおがtriphone HMMを作るようですやるおがtriphone HMMを作るようです
やるおがtriphone HMMを作るようです
 
tnct.Seminar9.03#1
tnct.Seminar9.03#1tnct.Seminar9.03#1
tnct.Seminar9.03#1
 
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
 
IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?
 
Dev camp25 lt
Dev camp25 ltDev camp25 lt
Dev camp25 lt
 
201005 Debian/つくらぐ勉強会 lightning talk
201005 Debian/つくらぐ勉強会 lightning talk 201005 Debian/つくらぐ勉強会 lightning talk
201005 Debian/つくらぐ勉強会 lightning talk
 
ぎっとの「ぎ」
ぎっとの「ぎ」ぎっとの「ぎ」
ぎっとの「ぎ」
 
タイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメタイル型ウィンドウマネージャのススメ
タイル型ウィンドウマネージャのススメ
 
FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
 

Mehr von Yuichi Yoshida

Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムYuichi Yoshida
 
Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談Yuichi Yoshida
 
Swift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道かSwift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道かYuichi Yoshida
 
Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Yuichi Yoshida
 
キーボードアプリとSketchのススメ
キーボードアプリとSketchのススメキーボードアプリとSketchのススメ
キーボードアプリとSketchのススメYuichi Yoshida
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with HandoffYuichi Yoshida
 
Getting started with CloudKit
Getting started with CloudKitGetting started with CloudKit
Getting started with CloudKitYuichi Yoshida
 
Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集Yuichi Yoshida
 
UIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐUIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐYuichi Yoshida
 
UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説Yuichi Yoshida
 
64bit化してみた話
64bit化してみた話64bit化してみた話
64bit化してみた話Yuichi Yoshida
 

Mehr von Yuichi Yoshida (14)

Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウムSwift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
 
Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談Swiftで多層型で戻り値を返すことの是非と雑談
Swiftで多層型で戻り値を返すことの是非と雑談
 
Swift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道かSwift - Result&lt;t>型で結果を返すのは邪道か,王道か
Swift - Result&lt;t>型で結果を返すのは邪道か,王道か
 
Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt Machine Learning : The high interest credit card of technical debt
Machine Learning : The high interest credit card of technical debt
 
キーボードアプリとSketchのススメ
キーボードアプリとSketchのススメキーボードアプリとSketchのススメ
キーボードアプリとSketchのススメ
 
Handoff from Safari
Handoff from SafariHandoff from Safari
Handoff from Safari
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with Handoff
 
Getting started with CloudKit
Getting started with CloudKitGetting started with CloudKit
Getting started with CloudKit
 
Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集Handoffは動かない〜これから役立たないバッドノウハウ集
Handoffは動かない〜これから役立たないバッドノウハウ集
 
UIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐUIToolbarの同時タッチを防ぐ
UIToolbarの同時タッチを防ぐ
 
UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説UZTextView, UZMultilayeredPopoverControllerの解説
UZTextView, UZMultilayeredPopoverControllerの解説
 
64bit化してみた話
64bit化してみた話64bit化してみた話
64bit化してみた話
 

Gitのすすめ