Git をはじめよう

Shuhei Iitsuka
Shuhei IitsukaUX Engineer at Google
Git をはじめよう!
    飯塚 修平




            UT Startup Gym
使用者の声

                      なんかここんとこ最近腰とか頭とかマジ痛くて吐き気も
                      するしスゲー調子悪かったんスけど、Git 使うように
                      なってから、そういうの全部なくなっちゃったんスよ
                      ね。その体の調子の変わり目の時に何かしたかっていっ
                      たら、ホントに Git をインストールしてあとちょっと薬
                      飲んだくらいだし。インストールしてから数時間でなん
22歳男性・東京都
                      か体の調子もよくなってきちゃって。インストールした
                      ときはこれだけでこんなに変化するなんて思ってもな
                      かったんスけど。ホントに Git 様々って感じっスわ。


ターミナルに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
                       clone
             pull

                               NEW!



                                  UT Startup Gym
Git のこんなところが便利
• このコードいつ誰が書いたの?消してもいいの?
• でも大丈夫!
• コミットログを見ればいいもんね!




                     UT Startup Gym
Git をはじめよう!


 ONE PLAYER GAME
MULTI PLAYER GAME
  ADVANCED 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 のしくみ
                                                                          ONE PLAYER GAME




                                 コミット
                              = スナップショット



master
                      過去                                                         未来

                                                      topic


                    ファイルのスナップショットの集合のように考える。


Pro Git - Pro Git 1.3 使い始める Gitの基本 http://progit.org/book/ja/ch1-3.html
                                                                          UT Startup Gym
コミットのしくみ
                     ONE PLAYER GAME




 インデックス




ワーキングツリー


                     UT Startup Gym
コミットのしくみ
                     ONE PLAYER GAME




 インデックス




ワーキングツリー


                     UT Startup Gym
コミットのしくみ
                           ONE PLAYER GAME




          committed

                      git commit

 インデックス


 git status              git add

ワーキングツリー


                          UT Startup Gym
コミットのしくみ
               ONE PLAYER GAME




          git log



git diff




               UT Startup Gym
ONE PLAYER GAME
$ 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
...




                                              UT Startup Gym
もとに戻す
                                                                                    ONE PLAYER GAME




•    git add を取り消す
     $ git reset HEAD
     ※ HEAD: 現在編集中のコミットのこと

•    ファイル hoge をコミットID 785b... の時点に戻したい
     $ git checkout 785b hoge
     -> 785b... の時点のものになった hoge がステージングされる
     -> 適宜修正して commit する

•    HEAD^^^ = HEAD から3つ前のコミット

•    --soft オプションや --hard オプション

•    実際は git が吐いてくれるコメント頼りです(丁寧!)。

git reset についてもまとめてみる-murankの日記- http://d.hatena.ne.jp/murank/20110327/1301224770   UT Startup Gym
Git の本領発揮は複数プレイ
                  MULTI PLAYER GAME




  • 高度なマージ機能
  • 常に最新のコードを共有
  • 詳細な編集ログ



                  UT Startup Gym
ベアリポジトリ
                                              MULTI PLAYER GAME




• ワーキングツリーを持たないリポジトリ
 -> コミットにしか興味を持っていません的な
 -> 実務的には push, pull が可能なリポジトリ  

                          サーバのベアリポジトリ
                              dev.git


                                   clone
      push
             pull
                    clone --bare
                                           NEW!



 ローカルのリポジトリ ローカルのリポジトリ ローカルのリポジトリ
    dev/.git   dev/.git   dev/.git
                                   UT Startup Gym
MULTI PLAYER GAME
$ vim ~/.ssh/config
Host ut-gym.jp
  IdentityFile /path/to/***.pem
$ git clone ubuntu@ut-gym.jp:/home/ubuntu/git/gittest.git
$ cd gittest
$ ごにょごにょ

$ git commit -m “〇〇のために△△を××した”

$ git config --global user.name "Your Name"
$ git config --global user.email you@example.com
$ git pull origin master
$ コンフリクトするかも。解消するためにごにょごにょ

$ git push origin master
$ git log --graph




                                                    UT Startup Gym
コンフリクト
CONFLICT (content): Merge conflict in hoge
Automatic merge failed; fix conflicts and then commit the result.
$ cat hoge
<<<<<<< HEAD
a
b
c
=======
hoge
piyo
fuga
>>>>>>> 7fhtq23...

        git 的にどちらを優先すればいいのかわからない状態。
       コンフリクトに遭遇した人が責任をもって直します(笑)
                                                    UT Startup Gym
ブランチ
                                         ADVANCED MODE




• コミット列を分岐することが出来る。
   いつでもリリース                     完成したので
    できる状態                         合流!


master
         過去                                    未来

                topic_twitter

              新機能開発!


                                         UT Startup Gym
ブランチ(スロー)
                       ADVANCED MODE




• コミット列を分岐することが出来る。
              HEAD

              master

master
         過去                  未来




                       UT Startup Gym
ブランチ(スロー)
                                           ADVANCED MODE




• コミット列を分岐することが出来る。
                     HEAD

                    master

master
         過去
                         topic_twitter           未来



                topic_twitter

              $ git branch topic_twitter
                                           UT Startup Gym
ブランチ(スロー)
                                             ADVANCED MODE




• コミット列を分岐することが出来る。

                     master
                              HEAD
master
         過去
                          topic_twitter            未来



                 topic_twitter

              $ git checkout topic_twitter
                                             UT Startup Gym
ブランチ(スロー)
                                         ADVANCED MODE




• コミット列を分岐することが出来る。

                  master
                                 HEAD
master
         過去
                              topic_twitter    未来



              topic_twitter

                 $ git add .
  $git commit -m post to twitter complete!
                                        UT Startup Gym
ブランチ(スロー)
                                         ADVANCED MODE




• コミット列を分岐することが出来る。
                   HEAD

                  master

master
         過去
                              topic_twitter    未来



              topic_twitter

              $ git checkout master
                                        UT Startup Gym
ブランチ(スロー)
                                          ADVANCED MODE




•   コミット列を分岐することが出来る。                     HEAD

                                          master

                                      topic_twitter

master
         過去                                     未来



                topic_twitter

              $ git merge topic_twitter
                                          UT Startup Gym
花サプの例                                 デプロイ


                       master                               maint
                                             pull
                      staging                              staging

                     topic_mail             デプロイ時にマージ

                    topic_twitter


    push              テスト用                                デプロイ用
                                            push
             pull                 pull


 master                                     master
                                                         デプロイ時にマージ
 staging                                   staging

topic_mail                                topic_mail

                                         topic_twitter

ローカル1                                     ローカル2              UT Startup Gym
1 of 27

More Related Content

Similar to Git をはじめよう

GitGit
GitShuhei Iitsuka
1.5K views36 slides
Git 勉強会Git 勉強会
Git 勉強会kinme modoki
789 views103 slides

Similar to Git をはじめよう(12)

GitGit
Git
Shuhei Iitsuka1.5K views
Gitで始めるバージョン管理Gitで始めるバージョン管理
Gitで始めるバージョン管理
Daisuke Konishi396 views
Git 勉強会Git 勉強会
Git 勉強会
kinme modoki789 views
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru165.4K views
SVN経験者のためのGIT入門SVN経験者のためのGIT入門
SVN経験者のためのGIT入門
AimingStudy2.4K views
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門
Muyuu Fujita2.3K views
JTF 2013JTF 2013
JTF 2013
Yasuhiro Asaka377 views
はじめてのGitはじめてのGit
はじめてのGit
Seiichiro Mishiba2K views
Git introduction2Git introduction2
Git introduction2
Misa Kondo681 views

More from Shuhei Iitsuka(20)

Machine learning meets web developmentMachine learning meets web development
Machine learning meets web development
Shuhei Iitsuka723 views
ウェブサイトで収益を得るウェブサイトで収益を得る
ウェブサイトで収益を得る
Shuhei Iitsuka930 views
データベースを使おうデータベースを使おう
データベースを使おう
Shuhei Iitsuka9.9K views
データベースを使おうデータベースを使おう
データベースを使おう
Shuhei Iitsuka1.2K views

Git をはじめよう

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