SlideShare a Scribd company logo
Git 入門

 2012年7月3日
第1回 Git 勉強会
  @kunimiya
INTRODUCTION
みなさんプログラムの
バックアップはとってます
     か?
(取ってない人は改心しましょ
う)
プログラムの変更記録は重要

• 1週間の間書いていたコードが無駄になり、
  さかのぼって開発をやり直すことも珍しく
  ない

• ちょっと変更を加えただけで動かなくなる
  こともある

• プログラムのバックアップを定期的にとっ
  て安全に管理する習慣が大事
「日付ごとにフォルダごと
コピーしてるから大丈夫で
     す!」
(そのプログラム、本当に管理できてますか?
あるゼミ生Aの開発記録
     • 「日付ごとにフォル
       ダーごとコピーすれ
       ば大丈夫だろ」
     • 「安心安心」
あるゼミ生Aの開発記録
     • 「あれ・・・・・・
       実験用PCだと動かな
       い」
     •    「たしか3日前は
         動いたはず」

     • 3日前のコードから開
       発をやり直し
あるゼミ生Aの開発記録
     • 「あ、しまった。3日
       前のコードにはあの
       新機能が無い!」
     • 「前書いたコードか
       らコピーしよう……」

     • しだいにどれが
       「最新のコード」
      なのか分からなく
      なってくる
最終的には。。。
第1回Git勉強会
日付ごとのバックアップの問題
      点
• 問題点1:
 – 日付ごとにまるごとバックアップは、後から
   何を変更したのかが分かりにくい
• 問題点2:
 – まるごとバックアップしていくので、ファイ
   ルサイズが膨大になる
• 問題点3:
 – プログラム開発が枝分かれすると混沌
 – 例:実験用システムをメンテナンスしつつ、
   最新版のプログラムを開発する場合
そうだ
バージョン管理システムを
    導入しよう
バージョン管理システム
      (Version Control System)

• プログラムの変更履歴を管理するシステム
• OSSプロジェクトなどのように、複数人が同時
  にプログラムを開発できるようにするために生
  み出された
• CVS, Subversion, Mercurial, Bazzarなど様々なツー
  ルが存在する
今回取り上げるVCS: Git




• 分散型バージョン管理システム(VCS) の一種
• Linux の父 Linus Torvalds がLinuxプロジェクトの
  VCSとして開発した
Githubのブレイクで一躍Gitが有名
          に
gitの管理方法
• 日付ごとではなく、リビジョンという単位で
  プログラムの変更記録を保存する

• リビジョン:変更記録の単位
• ブランチ:リビジョンを指し示すラベル
• ワークツリー:現在のプログラムコード
• インデックス:リビジョンに登録する変更の
  リスト
Gitでのバージョン管理方法
  (ディレクトリの作成)
                リビジョン

                ブランチ

                インデックス
Gitでのバージョン管理方法
         2012年06月27日   リビジョン
コミット   (ディレクトリの作成)
         ディレクトリを作った
                       ブランチ

                       インデックス
Gitでのバージョン管理方法
    2012年06月27日
  (ディレクトリの作成)
                  リビジョン
    ディレクトリを作った
                  ブランチ

                  インデックス
  (rbファイルの追加)
Gitでのバージョン管理方法
       2012年06月27日      リビジョン
       ディレクトリを作った
                        ブランチ

       2012年06月28日      インデックス
コミット   Rubyのプログラムを書いた
Gitでのバージョン管理方法
  2012年06月27日       リビジョン
  ディレクトリを作った
                    ブランチ

   2012年06月28日      インデックス
   Rubyのプログラムを書いた




 (HTMLファイルの追加)
Gitでのバージョン管理方法
       2012年06月27日      リビジョン
       ディレクトリを作った
                        ブランチ

       2012年06月28日      インデックス
       Rubyのプログラムを書いた




       2012年06月29日
コミット   HTMLを書いた
Gitでのバージョン管理方法
  2012年06月27日       リビジョン
  ディレクトリを作った
                    ブランチ

   2012年06月28日      インデックス
   Rubyのプログラムを書いた




   2012年06月29日
   HTMLを書いた




  (rbファイルに追記)
Gitでのバージョン管理方法
       2012年06月27日       リビジョン
       ディレクトリを作った
                         ブランチ

       2012年06月28日       インデックス
       Rubyのプログラムを書いた




       2012年06月29日
       HTMLを書いた



       2012年06月30日
コミット   Rubyプログラムを書きなおし
GITに触ってみよう
Git 最大の障壁


Windows版の
インストール
Windowsへの
      git インストールは鬼門
• Windows には4通りのインストール方法
 1. msysgit というコマンドライン版をインストー
    ル
 2. Git for Windows というGUI中心の版をインス
    トール
 3. Windows にCygWin(Unix)をいれてインストール
 4. WindowsにVMWareでLinuxを入れてインストー
    ル
• 勉強会でインストールすると終わらないの
  で、今回はインストールは省略
今回の環境
• kunimiyaのMacbookに一時的なアカウント
  を作り、そこでGitリポジトリを作ってみ
  ましょう
git の設定 (git config)
$ git config --global user.name YOURNAME
$ git config --global user.email YOUR@ADDRESS
$ git config --global --list




• コミットする際に登録される名前、
        メールアドレスを設定する
git リポジトリの作成 (git init)
$ mkdir test
$ cd test
$ git init
Initialized empty Git repository in
  /Users/Tsunekawa7/development/test/.git/


• リポジトリにするディレクトリ (test) を作
  成し、git init で初期化
ファイルを作成する
$ echo Hello,Git. > README
$ ls
README
$ cat README
Hello,Git.




• リポジトリに追加するファイルを作成す
  る
ファイルの確認 (git status)
$ git status




• git status でリポジトリ内のファイルを確
  認
ファイルの確認 (git status)
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#     README
nothing added to commit but untracked files present (use "git
add" to track)
• さっき保存したファイルが「Untracked
  files」として表示されている
ファイルを作成する (git add )

$ git add README




• git add でファイルをインデックスに追加
• git status で確認すると「Tracked files」とし
  てREADME が登録されている
ファイルを作成する (git add )
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
#     new file: README
#

• git status で確認すると変更の記録として
  README が登録されている
変更をコミットする (git
         commit )
$ git commit –m “initial commit”
[master (root-commit) 056b356] initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 README


• git commit で登録された変更を「リビ
  ジョン」としてコミット
• 「READMEというファイルを追加した」とい
  う変更が記録される
変更をコミットする (git log )

$ git log
commit
056b3567d69efdbb34f404db093e78016fffdae3
Author: kunimiya toji <kunimiya@example.com>
Date: Sun Jul 1 00:14:03 2012 +0900

  initial commit

• git log でリビジョンの履歴を閲覧できる
色々ファイルを追加してみよう
• Rubyスクリプトを追加してみる
• HTMLを追加してみる
• などなど

• ファイルの変更をコミットしてリビジョン
  を増やしてみよう
Diff付きでlogる (git log -p )

$ git log –p




• 行単位で変更が記録されているのが分か
  る
ここまでのおさらい

git init     gitリポジトリの初期化

git status   インデックスの内容を表示

git diff     最新リビジョンとの差分を表
             示
git add      ワーキングツリーに変更を追
             加
git commit   変更のコミット

git log      変更履歴の表示
次回予告
• 今回ならった範囲では、まだ日付バック
  アップとあまり変わらない
• Git はブランチを駆使したときに真の力を
  発揮

• 第2回: ブランチを活用した効率的なプロ
  グラミング方法
• 第3回: push, pull を使って他人とプログラ
  ムコードを共有する

More Related Content

第1回Git勉強会