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

Advanced Git Presentation By Swawibe
Advanced Git Presentation By SwawibeAdvanced Git Presentation By Swawibe
Advanced Git Presentation By SwawibeMd Swawibe Ul Alam
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagramsDilum Navanjana
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash CourseNilay Binjola
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With GitNick Quaranto
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CIColCh
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門dsuke Takaoka
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
Learning git
Learning gitLearning git
Learning gitSid Anand
 
Git One Day Training Notes
Git One Day Training NotesGit One Day Training Notes
Git One Day Training Notesglen_a_smith
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitE Carter
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and GithubHouari ZEGAI
 

What's hot (20)

Git and github 101
Git and github 101Git and github 101
Git and github 101
 
Advanced Git Presentation By Swawibe
Advanced Git Presentation By SwawibeAdvanced Git Presentation By Swawibe
Advanced Git Presentation By Swawibe
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagrams
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash Course
 
Github basics
Github basicsGithub basics
Github basics
 
Git workflows
Git workflowsGit workflows
Git workflows
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
 
Introducing GitLab
Introducing GitLabIntroducing GitLab
Introducing GitLab
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
Using GitLab CI
Using GitLab CIUsing GitLab CI
Using GitLab CI
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
Git best practices workshop
Git best practices workshopGit best practices workshop
Git best practices workshop
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
Learning git
Learning gitLearning git
Learning git
 
Git One Day Training Notes
Git One Day Training NotesGit One Day Training Notes
Git One Day Training Notes
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with Git
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and Github
 

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
 

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 (実践入門編)
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を使ってみよう

  • 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