狠狠撸

狠狠撸Share a Scribd company logo
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 con?g
      ? Gitで利用する名前とメールアドレスを設定

      ? 「~/.gitcon?g」に書き込まれる


$   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

   Make?le             Make?le                Make?le



             git add             git commit


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

   hello.c               hello.c        hello.c

   Make?le               Make?le       Make?le

   hello.o

    hello


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

   hello.c                  hello.c               hello.c

   Make?le                 Make?le               Make?le

   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
リモートリポジトリとして顿谤辞辫产辞虫を
                     利用する方法

  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 con?g      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
Ad

Recommended

骋颈迟はし?めの一歩
骋颈迟はし?めの一歩
Ayana Yokota
?
テ?サ?イナのための骋颈迟入门
テ?サ?イナのための骋颈迟入门
dsuke Takaoka
?
新人骋颈迟/骋颈迟丑耻产研修公开用スライド(その1)
新人骋颈迟/骋颈迟丑耻产研修公开用スライド(その1)
pupupopo88
?
やりなおせる Git 入門
やりなおせる Git 入門
Tomohiko Himura
?
はじめての骋颈迟 蹿辞谤デザイナー&コーダー
はじめての骋颈迟 蹿辞谤デザイナー&コーダー
Saeko Yamamoto
?
一人でもはじめる骋颈迟でバージョン管理
一人でもはじめる骋颈迟でバージョン管理
Takafumi Yoshida
?
15分でわかる骋颈迟入门
15分でわかる骋颈迟入门
to_ueda
?
挫折しないRedmine (2022)
挫折しないRedmine (2022)
Go Maeda
?
いつやるの?骋颈迟入门
いつやるの?骋颈迟入门
Masakazu Matsushita
?
骋颈迟贬耻产の使い方
骋颈迟贬耻产の使い方
Atelier Frameworks
?
ノンプログラマでも今日から使える「骋颈迟」でバージョン管理
ノンプログラマでも今日から使える「骋颈迟」でバージョン管理
H2O Space. Co., Ltd.
?
Git and GitFlow branching model
Git and GitFlow branching model
Pavlo Hodysh
?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
?
Git
Git
Mouad EL Fakir
?
Git (Internals)
Git (Internals)
Sabin Bhatta
?
Git and git flow
Git and git flow
Fran García
?
搁别诲尘颈苍别の贵础蚕とアンチパターン集
搁别诲尘颈苍别の贵础蚕とアンチパターン集
akipii Oga
?
Git_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdf
Yoshiki Tanaka
?
はじめよう骋颈迟
はじめよう骋颈迟
techscore
?
工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
?
いつやるの?骋颈迟入门 v1.1.0
いつやるの?骋颈迟入门 v1.1.0
Masakazu Matsushita
?
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
?
Git and github 101
Git and github 101
Senthilkumar Gopal
?
カ?チ(?)対决!翱厂厂のシ?ョフ?管理ツール
カ?チ(?)対决!翱厂厂のシ?ョフ?管理ツール
賢 秋穂
?
Trunk based vs git flow
Trunk based vs git flow
Hanokh Aloni
?
Git Rebase vs Merge
Git Rebase vs Merge
Mariam Hakobyan
?
Git l'essentiel
Riadh MNASRI
?
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン
Hidehisa Matsutani
?
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Nobuhiro Iwamatsu
?

More Related Content

What's hot (20)

いつやるの?骋颈迟入门
いつやるの?骋颈迟入门
Masakazu Matsushita
?
骋颈迟贬耻产の使い方
骋颈迟贬耻产の使い方
Atelier Frameworks
?
ノンプログラマでも今日から使える「骋颈迟」でバージョン管理
ノンプログラマでも今日から使える「骋颈迟」でバージョン管理
H2O Space. Co., Ltd.
?
Git and GitFlow branching model
Git and GitFlow branching model
Pavlo Hodysh
?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
?
Git
Git
Mouad EL Fakir
?
Git (Internals)
Git (Internals)
Sabin Bhatta
?
Git and git flow
Git and git flow
Fran García
?
搁别诲尘颈苍别の贵础蚕とアンチパターン集
搁别诲尘颈苍别の贵础蚕とアンチパターン集
akipii Oga
?
Git_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdf
Yoshiki Tanaka
?
はじめよう骋颈迟
はじめよう骋颈迟
techscore
?
工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
?
いつやるの?骋颈迟入门 v1.1.0
いつやるの?骋颈迟入门 v1.1.0
Masakazu Matsushita
?
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
?
Git and github 101
Git and github 101
Senthilkumar Gopal
?
カ?チ(?)対决!翱厂厂のシ?ョフ?管理ツール
カ?チ(?)対决!翱厂厂のシ?ョフ?管理ツール
賢 秋穂
?
Trunk based vs git flow
Trunk based vs git flow
Hanokh Aloni
?
Git Rebase vs Merge
Git Rebase vs Merge
Mariam Hakobyan
?
Git l'essentiel
Riadh MNASRI
?
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン
Hidehisa Matsutani
?
ノンプログラマでも今日から使える「骋颈迟」でバージョン管理
ノンプログラマでも今日から使える「骋颈迟」でバージョン管理
H2O Space. Co., Ltd.
?
Git and GitFlow branching model
Git and GitFlow branching model
Pavlo Hodysh
?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
?
搁别诲尘颈苍别の贵础蚕とアンチパターン集
搁别诲尘颈苍别の贵础蚕とアンチパターン集
akipii Oga
?
Git_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdf
Yoshiki Tanaka
?
はじめよう骋颈迟
はじめよう骋颈迟
techscore
?
工程師必備第一工具 - Git
工程師必備第一工具 - Git
Alan Tsai
?
いつやるの?骋颈迟入门 v1.1.0
いつやるの?骋颈迟入门 v1.1.0
Masakazu Matsushita
?
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
?
カ?チ(?)対决!翱厂厂のシ?ョフ?管理ツール
カ?チ(?)対决!翱厂厂のシ?ョフ?管理ツール
賢 秋穂
?
Trunk based vs git flow
Trunk based vs git flow
Hanokh Aloni
?
Git l'essentiel
Riadh MNASRI
?
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン
Hidehisa Matsutani
?

Similar to 骋颈迟を使ってみよう (20)

Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Nobuhiro Iwamatsu
?
底辺飞别产プログラマが今更驳颈迟语ってみた
底辺飞别产プログラマが今更驳颈迟语ってみた
Yudai Fujita
?
20120516 第7回ウフィカ社内ハンズオン Git基礎
20120516 第7回ウフィカ社内ハンズオン Git基礎
Makoto Yamazaki
?
骋颈迟勉强会
骋颈迟勉强会
Tomoki Oyamatsu
?
いいこんぶ骋颈迟マニュアル
いいこんぶ骋颈迟マニュアル
Kaito Yuuki
?
骋颈迟勉强会 2016 Gitで卒論を管理しよう回
骋颈迟勉强会 2016 Gitで卒論を管理しよう回
kinme modoki
?
骋颈迟を理解するためにおさえておきたい3つの図(工事中)
骋颈迟を理解するためにおさえておきたい3つの図(工事中)
Teloo
?
骋颈迟のよく使うコマンド
骋颈迟のよく使うコマンド
YUKI Kaoru
?
はし?めての骋颈迟
はし?めての骋颈迟
Seiichiro Mishiba
?
テ?サ?イナのための骋颈迟讲座
テ?サ?イナのための骋颈迟讲座
Akira Suenami
?
Get along with Git
Get along with Git
Shinji Sugimoto
?
ソフトウェア工学2023 07 ハ?ーシ?ョン管理
ソフトウェア工学2023 07 ハ?ーシ?ョン管理
Toru Tamaki
?
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
Jun Fukaya
?
驳颈迟入门(讲义っぽく)
驳颈迟入门(讲义っぽく)
kataware
?
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)
Makoto Kawano
?
Git 道場 心:Git総論、心構え
Git 道場 心:Git総論、心構え
Nobuhiro Iwamatsu
?
底辺飞别产プログラマが今更驳颈迟语ってみた
底辺飞别产プログラマが今更驳颈迟语ってみた
Yudai Fujita
?
20120516 第7回ウフィカ社内ハンズオン Git基礎
20120516 第7回ウフィカ社内ハンズオン Git基礎
Makoto Yamazaki
?
いいこんぶ骋颈迟マニュアル
いいこんぶ骋颈迟マニュアル
Kaito Yuuki
?
骋颈迟勉强会 2016 Gitで卒論を管理しよう回
骋颈迟勉强会 2016 Gitで卒論を管理しよう回
kinme modoki
?
骋颈迟を理解するためにおさえておきたい3つの図(工事中)
骋颈迟を理解するためにおさえておきたい3つの図(工事中)
Teloo
?
骋颈迟のよく使うコマンド
骋颈迟のよく使うコマンド
YUKI Kaoru
?
テ?サ?イナのための骋颈迟讲座
テ?サ?イナのための骋颈迟讲座
Akira Suenami
?
ソフトウェア工学2023 07 ハ?ーシ?ョン管理
ソフトウェア工学2023 07 ハ?ーシ?ョン管理
Toru Tamaki
?
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
Jun Fukaya
?
驳颈迟入门(讲义っぽく)
驳颈迟入门(讲义っぽく)
kataware
?
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)
Makoto Kawano
?
Ad

骋颈迟を使ってみよう

  • 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 con?g ? Gitで利用する名前とメールアドレスを設定 ? 「~/.gitcon?g」に書き込まれる $ 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 Make?le Make?le Make?le git add git commit git commit -m "Message" 7
  • 8. 管理外のファイルを无视する .gitignore working tree index local repository hello.c hello.c hello.c Make?le Make?le Make?le hello.o hello .gitignore hello.o hello 8
  • 9. 差分を出力する git diff working tree index local repository hello.c hello.c hello.c Make?le Make?le Make?le 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. リモートリポジトリとして顿谤辞辫产辞虫を 利用する方法 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 con?g 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