UT Startup Gym
Git をはじめよう!飯塚 修平
UT Startup Gym
UT Startup Gym
使用者の声
なんかここんとこ最近腰とか頭とかマジ痛くて吐き気もするしスゲー調子悪かったんスけど、Git 使うようになってから、そういうの全部なくなっちゃったんスよね。その体の調子の変わり目の時に何かしたかっていったら、ホントに Git をインストールしてあとちょっと薬飲んだくらいだし。インストールしてから数時間でなんか体の調子もよくなってきちゃって。インストールしたときはこれだけでこんなに変化するなんて思ってもなかったんスけど。ホントに Git 様々って感じっスわ。
22歳男性・東京都
ターミナルにscreenではなくbyobuを使うべき100の理由 - 馬鹿と天才は紙一重 http://d.hatena.ne.jp/shim0mura/20111005/1317819710
UT Startup Gym
Git のこんなところが便利• お前の書いたコードのお陰で動かなくなったんだけど?
• でも大丈夫!• 動いてた時点まで戻せばいいもんね!
HEAD
UT Startup Gym
Git のこんなところが便利• お前の書いたコードのお陰で動かなくなったんだけど?
• でも大丈夫!• 動いてた時点まで戻せばいいもんね!
HEAD
UT Startup Gym
Git のこんなところが便利• あ、マシンにお茶こぼしたー。あー、あー、あー。• でも大丈夫!• サーバのリポジトリから clone すればいいもんね!
サーバのリポジトリ
push
pullclone
NEW!
UT Startup Gym
Git のこんなところが便利• このコードいつ誰が書いたの?消してもいいの?• でも大丈夫!• コミットログを見ればいいもんね!
UT Startup Gym
Git をはじめよう!
ONE PLAYER GAMEMULTI PLAYER GAMEADVANCED MODE
UT Startup Gym
Git のインストールubuntu の方(VirtualBox とか EC2 とか)
# apt-get で git をインストールする $ sudo apt-get install git-core
mac OSX の方
# Homebrew のインストール$ ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
# git のインストール$ brew install git
UT Startup Gym
Git のしくみ
master
topic
コミット= スナップショット
ファイルのスナップショットの集合のように考える。
Pro Git - Pro Git 1.3 使い始める Gitの基本 http://progit.org/book/ja/ch1-3.html
未来過去
ONE PLAYER GAME
UT Startup Gym
コミットのしくみONE PLAYER GAME
インデックス
ワーキングツリー
UT Startup Gym
コミットのしくみONE PLAYER GAME
インデックス
ワーキングツリー
UT Startup Gym
コミットのしくみONE PLAYER GAME
インデックス
ワーキングツリー
committed
git add
git commit
git status
UT Startup Gym
コミットのしくみONE PLAYER GAME
git log
git diff
UT Startup Gym
$ git init #レポジトリ (スナップショットの集合) の作成$ touch hoge $ git status$ git add hoge$ git status$ git commit -m “first set”$ git log$ git status$ vim hoge #適当に編集$ git status$ git diff$ git add . #untrackedまたはmodifiedをすべてステージング$ git commit -m “modified hoge to ...”$ git log...
ONE PLAYER GAME
UT Startup Gym
もとに戻す• git add を取り消す$ git reset HEAD※ HEAD: 現在編集中のコミットのこと
• ファイル hoge をコミットID 785b... の時点に戻したい$ git checkout 785b hoge-> 785b... の時点のものになった hoge がステージングされる-> 適宜修正して commit する
• HEAD^^^ = HEAD から3つ前のコミット• --soft オプションや --hard オプション• 実際は git が吐いてくれるコメント頼りです(丁寧!)。
ONE PLAYER GAME
git reset についてもまとめてみる-murankの日記- http://d.hatena.ne.jp/murank/20110327/1301224770
UT Startup Gym
Git の本領発揮は複数プレイ
• 高度なマージ機能• 常に最新のコードを共有• 詳細な編集ログ
MULTI PLAYER GAME
UT Startup Gym
ベアリポジトリ• ワーキングツリーを持たないリポジトリ-> コミットにしか興味を持っていません的な-> 実務的には push, pull が可能なリポジトリ
MULTI PLAYER GAME
サーバのベアリポジトリdev.git
pushpull
clone
NEW!
ローカルのリポジトリdev/.git
ローカルのリポジトリdev/.git
ローカルのリポジトリdev/.git
clone --bare
UT Startup Gym
$ vim ~/.ssh/configHost ut-gym.jp IdentityFile /path/to/***.pem$ git clone [email protected]:/home/ubuntu/git/gittest.git$ cd gittest$ ごにょごにょ$ git commit -m “〇〇のために△△を××した”$ git config --global user.name "Your Name"$ git config --global user.email [email protected]$ git pull origin master$ コンフリクトするかも。解消するためにごにょごにょ$ git push origin master$ git log --graph
MULTI PLAYER GAME
UT Startup Gym
コンフリクトCONFLICT (content): Merge conflict in hogeAutomatic merge failed; fix conflicts and then commit the result.$ cat hoge<<<<<<< HEADabc=======hogepiyofuga>>>>>>> 7fhtq23...
git 的にどちらを優先すればいいのかわからない状態。コンフリクトに遭遇した人が責任をもって直します(笑)
UT Startup Gym
ブランチ• コミット列を分岐することが出来る。
未来過去master
topic_twitter
新機能開発!
いつでもリリースできる状態
完成したので合流!
ADVANCED MODE
UT Startup Gym
ブランチ(スロー)• コミット列を分岐することが出来る。
未来過去master
master
HEAD
ADVANCED MODE
UT Startup Gym
topic_twitter
ブランチ(スロー)• コミット列を分岐することが出来る。
未来過去master
$ git branch topic_twitter
master
topic_twitter
HEAD
ADVANCED MODE
UT Startup Gym
topic_twitter
ブランチ(スロー)• コミット列を分岐することが出来る。
未来過去master
$ git checkout topic_twitter
master
topic_twitter
HEAD
ADVANCED MODE
UT Startup Gym
topic_twitter
ブランチ(スロー)• コミット列を分岐することが出来る。
未来過去master
$ git add .$git commit -m “post to twitter complete!”
master
topic_twitter
HEAD
ADVANCED MODE
UT Startup Gym
topic_twitter
ブランチ(スロー)• コミット列を分岐することが出来る。
未来過去master
master
topic_twitter
HEAD
$ git checkout master
ADVANCED MODE
UT Startup Gym
topic_twitter
ブランチ(スロー)• コミット列を分岐することが出来る。
未来過去master
master
HEAD
$ git merge topic_twitter
topic_twitter
ADVANCED MODE
UT Startup Gym
花サプの例
ローカル1
master
ローカル2
master
stagingstaging
topic_mail topic_mail
topic_twitter
テスト用
master
staging
topic_mail
topic_twitter
デプロイ用
maint
staging
デプロイ時にマージ
デプロイ時にマージ
pushpullpullpush
pull
デプロイ