SlideShare a Scribd company logo
1 of 22
Download to read offline
gitを使ってみよう
 git: the fast version control system


      古屋 保(@tamochia)

          29 March 2012
             K-Ruby



                                        1
ソースコードのバージョン管理
        といえば…




$ cp -Rp hoge hoge_20120321
                              2
gitとは
• ソースコードを管理するためのオープンソースの
   分散型バージョン管理システム
• 元々はLinuxカーネルのソースコードを管理する
   目的で開発された
• 開発者ごとにローカルリポジトリを持つことが
   可能

【参考文献】
1. Travis Swicegood著,でびあんぐる監訳,「入門git」,オーム社,2009
2. 岩松信洋,上川純一,まえだこうへい,小川伸一郎,「Gitによるバージョン管理」,オーム社,2011
                                                       3
分散型バージョン管理システム

                  remote
                repository


         push                pull


                                  local
    local
                                repository
  repository
                                    B
      A




                                             4
最初にやっておくこと
                       git config
      • Gitで利用する名前とメールアドレスを設定

      • 「~/.gitconfig」に書き込まれる


$   git   config   --global   user.name "hoge hoge"
$   git   config   --global   user.email hoge@gmail.com
$   git   config   --global   color.ui auto
$   git   config   --global   -l


                                                          5
リポジトリの作成
      git init


$ cd HelloApp
$ git init




                 local repository

                                    6
リポジトリへの登録
             git add, git commit
working tree           index            local repository

   hello.c             hello.c                hello.c

   Makefile             Makefile                Makefile



             git add             git commit


                        git commit -m "Message"
                                                           7
管理外のファイルを無視する
                     .gitignore
working tree             index     local repository

   hello.c               hello.c        hello.c

   Makefile               Makefile       Makefile

   hello.o

    hello


  .gitignore
               hello.o
               hello
                                                      8
差分を出力する
                          git diff
working tree               index             local repository

   hello.c                  hello.c               hello.c

   Makefile                 Makefile               Makefile

   hello.o     git diff               git diff HEAD
    hello

                                   HEADは最新コミット
  .gitignore               .gitignore            .gitignore


                                                                9
コミットログと状態の表示
      git log, git status
• コミットログの表示
✦ git log
✦ git log --oneline   --decorate
✦ git log --oneline   --graph

• ワーキングツリー及びリポジトリの状態表示
✦ git status


                                   10
コミットをなかったことにする
                    git reset
HEAD^^^   HEAD^^       HEAD^     HEAD
38a123~   4a8931~     13ea90~   124b34~


  A         B           C         D       最新コミット




      git reset --hard HEAD^^


 HEAD^     HEAD
38a123~   4a8931~


  A         B         最新コミット
                                                   11
コミットをなかったことにする
                       git reset
working tree             index      local repository

   hello.c               hello.c         hello.c


               git reset --soft HEAD^
             ワーキングツリー
               は影響無し
    foo.c                 foo.c           foo.c



             git reset --mixed HEAD^
                                                       12
コミットを前の状態に戻す
                      git revert
  HEAD^^^      HEAD^^        HEAD^        HEAD
  38a123~      4a8931~      13ea90~      124b34~


      A          B            C             D        最新コミット




             $ git revert HEAD^^
             $ git commit -m "E"                         Bのコミット
                                                             状態で最新
「変更」の履歴が残る
38a123~     4a8931~      13ea90~      124b34~      342b34~


  A          B            C             D            E
                                                                     13
ブランチを利用する
    git branch, git checkout

    A       B               masterブランチ




                  C         develブランチ



$ git branch devel master     「branch」…ブランチの作成
$ git checkout devel
   :                         「checkout」…ブランチの切替え

$ git commit -am "C"
                                                 14
ブランチのマージ
         git merge
                                     master
A   B                       E        ブランチ


                        マージ
           C      D
                             devel
                            ブランチ



    $ git checkout master
    $ git merge devel

                                              15
ブランチのマージ
         git merge
                               master
A    B     D          F        ブランチ


                     マージ
           C    E
                       devel
                      ブランチ



    $ git checkout master
    $ git merge devel
    <コンフリクトが起こる可能性有り>
                                        16
ブランチのリベース
           git rebase
                    master
A     B       D     ブランチ



                              devel
              C       E      ブランチ


    $ git checkout devel
    $ git rebase master

A     B       D              masterブランチに追従

                                       devel
                    C'       E'       ブランチ
                                               17
リモートリポジトリの登録
                      git remote add


                  remote
                repository
reposv
         $ git remote add origin ssh://hoge@reposv/HelloApp.git




       local
     repository
         A
        $ git remote add github git@github.com:hoge/HelloApp.git



                                                                   18
リモートリポジトリとのやり取り
                    git push, git pull


                               remote
                             repository

$ git push origin master                  $ git pull origin master




         local                                       local
       repository                                  repository
           A                                           B




                                                                 19
リモートリポジトリのクローンをコピーする
                         git clone
                reposv
          remote
        repository




$ git clone ssh://hoge@reposv/HelloApp.git


               $ git clone git://github.com/hoge/HelloApp.git




                                                                20
リモートリポジトリとしてDropboxを
                     利用する方法

  remote
repository   ~/Dropbox/repos/HelloApp.git

                  $ mkdir ~/Dropbox/repos/HelloApp.git
                  $ cd ~/Dropbox/repos/HelloApp.git/
                  $ git init --bare


                      bare オプションにより,ワーキングツリー無しの
                   リモートリポジトリを作成する.
  local
repository
    A 既にローカルリポジトリが存在するマシンでの登録方法
        $ git remote add origin ~/Dropbox/repos/HelloApp.git
       新しいマシンでの登録方法
       $ git clone ~/Dropbox/repos/HelloApp.git

                                                               21
まとめ
• 覚えるコマンド
1.git config      10.git branch
2.git init       11.git checkout
3.git add        12.git merge
4.git commit     13.git rebase
5.git diff       14.git remote add
6.git log        15.git push
7.git status     16.git pull
8.git reset      17.git clone
9.git revert
                                     22

More Related Content

What's hot

15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門to_ueda
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan Tsai
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーSaeko Yamamoto
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門Muyuu Fujita
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略Lucien Lee
 
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」Yoshinori Yamanouchi
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみたhiroyuki koga
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
はじめようGit
はじめようGitはじめようGit
はじめようGittechscore
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門dsuke Takaoka
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料Hiroki Saiki
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南Kouji Matsui
 
Deep dark-side of git: How git works internally
Deep dark-side of git: How git works internallyDeep dark-side of git: How git works internally
Deep dark-side of git: How git works internallySeongJae Park
 
大規模システムリプレイスへの道
大規模システムリプレイスへの道大規模システムリプレイスへの道
大規模システムリプレイスへの道Recruit Lifestyle Co., Ltd.
 

What's hot (20)

15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
はじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダーはじめてのGit forデザイナー&コーダー
はじめてのGit forデザイナー&コーダー
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみた
 
Git由超淺入超深
Git由超淺入超深Git由超淺入超深
Git由超淺入超深
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
はじめようGit
はじめようGitはじめようGit
はじめようGit
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
 
Deep dark-side of git: How git works internally
Deep dark-side of git: How git works internallyDeep dark-side of git: How git works internally
Deep dark-side of git: How git works internally
 
大規模システムリプレイスへの道
大規模システムリプレイスへの道大規模システムリプレイスへの道
大規模システムリプレイスへの道
 

Similar to Gitを使ってみよう

Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Nobuhiro Iwamatsu
 
gitを使う準備をしよう - 初級編
gitを使う準備をしよう - 初級編gitを使う準備をしよう - 初級編
gitを使う準備をしよう - 初級編Sanae Yamashita
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Teloo
 
Git 入門
Git 入門Git 入門
Git 入門y-uti
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubToru Tamaki
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbJun Fukaya
 
20120324 git training
20120324 git training20120324 git training
20120324 git trainingTakeshi AKIMA
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩Shin Yoshida
 
Git introduction2
Git introduction2Git introduction2
Git introduction2Misa Kondo
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座Yusei Yamanaka
 
Githubことはじめ
GithubことはじめGithubことはじめ
Githubことはじめtikitikipoo
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんかAtsuhiro Takiguchi
 

Similar to Gitを使ってみよう (20)

Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
 
gitを使う準備をしよう - 初級編
gitを使う準備をしよう - 初級編gitを使う準備をしよう - 初級編
gitを使う準備をしよう - 初級編
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
 
Git 入門
Git 入門Git 入門
Git 入門
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHub
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
 
Git overview (v 0.96)
Git overview (v 0.96)Git overview (v 0.96)
Git overview (v 0.96)
 
Git 実践入門
Git 実践入門Git 実践入門
Git 実践入門
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
Gitの使い方あれこれ
Gitの使い方あれこれGitの使い方あれこれ
Gitの使い方あれこれ
 
20120324 git training
20120324 git training20120324 git training
20120324 git training
 
git 初めの一歩
git 初めの一歩git 初めの一歩
git 初めの一歩
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
 
Shizudev git hub宿題
Shizudev git hub宿題Shizudev git hub宿題
Shizudev git hub宿題
 
Github第4章
Github第4章Github第4章
Github第4章
 
Git introduction2
Git introduction2Git introduction2
Git introduction2
 
Gitの紹介
Gitの紹介Gitの紹介
Gitの紹介
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座
 
Githubことはじめ
GithubことはじめGithubことはじめ
Githubことはじめ
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
 

Gitを使ってみよう

  • 1. gitを使ってみよう git: the fast version control system 古屋 保(@tamochia) 29 March 2012 K-Ruby 1
  • 2. ソースコードのバージョン管理 といえば… $ cp -Rp hoge hoge_20120321 2
  • 3. gitとは • ソースコードを管理するためのオープンソースの 分散型バージョン管理システム • 元々はLinuxカーネルのソースコードを管理する 目的で開発された • 開発者ごとにローカルリポジトリを持つことが 可能 【参考文献】 1. Travis Swicegood著,でびあんぐる監訳,「入門git」,オーム社,2009 2. 岩松信洋,上川純一,まえだこうへい,小川伸一郎,「Gitによるバージョン管理」,オーム社,2011 3
  • 4. 分散型バージョン管理システム remote repository push pull local local repository repository B A 4
  • 5. 最初にやっておくこと git config • Gitで利用する名前とメールアドレスを設定 • 「~/.gitconfig」に書き込まれる $ git config --global user.name "hoge hoge" $ git config --global user.email hoge@gmail.com $ git config --global color.ui auto $ git config --global -l 5
  • 6. リポジトリの作成 git init $ cd HelloApp $ git init local repository 6
  • 7. リポジトリへの登録 git add, git commit working tree index local repository hello.c hello.c hello.c Makefile Makefile Makefile git add git commit git commit -m "Message" 7
  • 8. 管理外のファイルを無視する .gitignore working tree index local repository hello.c hello.c hello.c Makefile Makefile Makefile hello.o hello .gitignore hello.o hello 8
  • 9. 差分を出力する git diff working tree index local repository hello.c hello.c hello.c Makefile Makefile Makefile hello.o git diff git diff HEAD hello HEADは最新コミット .gitignore .gitignore .gitignore 9
  • 10. コミットログと状態の表示 git log, git status • コミットログの表示 ✦ git log ✦ git log --oneline --decorate ✦ git log --oneline --graph • ワーキングツリー及びリポジトリの状態表示 ✦ git status 10
  • 11. コミットをなかったことにする git reset HEAD^^^ HEAD^^ HEAD^ HEAD 38a123~ 4a8931~ 13ea90~ 124b34~ A B C D 最新コミット git reset --hard HEAD^^ HEAD^ HEAD 38a123~ 4a8931~ A B 最新コミット 11
  • 12. コミットをなかったことにする git reset working tree index local repository hello.c hello.c hello.c git reset --soft HEAD^ ワーキングツリー は影響無し foo.c foo.c foo.c git reset --mixed HEAD^ 12
  • 13. コミットを前の状態に戻す git revert HEAD^^^ HEAD^^ HEAD^ HEAD 38a123~ 4a8931~ 13ea90~ 124b34~ A B C D 最新コミット $ git revert HEAD^^ $ git commit -m "E" Bのコミット 状態で最新 「変更」の履歴が残る 38a123~ 4a8931~ 13ea90~ 124b34~ 342b34~ A B C D E 13
  • 14. ブランチを利用する git branch, git checkout A B masterブランチ C develブランチ $ git branch devel master 「branch」…ブランチの作成 $ git checkout devel : 「checkout」…ブランチの切替え $ git commit -am "C" 14
  • 15. ブランチのマージ git merge master A B E ブランチ マージ C D devel ブランチ $ git checkout master $ git merge devel 15
  • 16. ブランチのマージ git merge master A B D F ブランチ マージ C E devel ブランチ $ git checkout master $ git merge devel <コンフリクトが起こる可能性有り> 16
  • 17. ブランチのリベース git rebase master A B D ブランチ devel C E ブランチ $ git checkout devel $ git rebase master A B D masterブランチに追従 devel C' E' ブランチ 17
  • 18. リモートリポジトリの登録 git remote add remote repository reposv $ git remote add origin ssh://hoge@reposv/HelloApp.git local repository A $ git remote add github git@github.com:hoge/HelloApp.git 18
  • 19. リモートリポジトリとのやり取り git push, git pull remote repository $ git push origin master $ git pull origin master local local repository repository A B 19
  • 20. リモートリポジトリのクローンをコピーする git clone reposv remote repository $ git clone ssh://hoge@reposv/HelloApp.git $ git clone git://github.com/hoge/HelloApp.git 20
  • 21. リモートリポジトリとしてDropboxを 利用する方法 remote repository ~/Dropbox/repos/HelloApp.git $ mkdir ~/Dropbox/repos/HelloApp.git $ cd ~/Dropbox/repos/HelloApp.git/ $ git init --bare bare オプションにより,ワーキングツリー無しの リモートリポジトリを作成する. local repository A 既にローカルリポジトリが存在するマシンでの登録方法 $ git remote add origin ~/Dropbox/repos/HelloApp.git 新しいマシンでの登録方法 $ git clone ~/Dropbox/repos/HelloApp.git 21
  • 22. まとめ • 覚えるコマンド 1.git config 10.git branch 2.git init 11.git checkout 3.git add 12.git merge 4.git commit 13.git rebase 5.git diff 14.git remote add 6.git log 15.git push 7.git status 16.git pull 8.git reset 17.git clone 9.git revert 22