git_study_revealjs



git_study_revealjs

0 0


git_study_revealjs


On Github ogawaso / git_study_revealjs

git, github勉強会

2014/04/14 小川宗一郎

gitとは

  • gitはソースコード管理システム
  • 今までのソースコード管理システムではこれまでVSS, cvs, subversionなど
  • ミスした作業も修正、復元できる
  • 1つのサーバー上の集中管理じゃなくて複数サーバーでの分散管理が可能
  • linuxを作ったlinusさんが最初に作って日本人がメンテナンスしている http://itpro.nikkeibp.co.jp/article/COLUMN/20130418/471890/

githubとは

  • gitによるソフトウェア開発プロジェクトのための共有ウェブサービス http://www.github.com
  • 現在多くのオープンソースプロジェクトで採用
  • githubが世界中の人に使われることでgitも主流になっている
  • GitHub Pageという機能があり、プロジェクト用のホームページを簡単に作ることができる
  • https://pages.github.com/
  • 拡張子がmdのmarkdownをhtmlにうまく変換してくれる
  • (wikiみたいなルール)

今日の勉強会について

  • gitをGUIを使わず、全てコンソール上でコマンドを使って学習
  • まずはコマンドに慣れる

今日のあらすじ

  • gitのリポジトリを作成
  • githubアカウント作る
  • github上にリポジトリを追加
  • gitの様々なコマンドを紹介
  • githubを使ってプルリクエスト(時間があれば)

gitの中身の概要

  • 自分の手元のPCのリポジトリをローカルリポジトリという
  • 専用のサーバに配置しているリポジトリをリモートリポジトリという
  • 分散管理なので、リモートリポジトリが複数でもよい
  • ワーキングディレクトリーからリポジトリへの追加、変更候補にするインデックスと呼ばれる状態がある

gitの状態の図

コミットとは

  • ファイルの追加、修正、変更などをコミットという操作でリポジトリに保存する
  • リポジトリにコミットが時系列順に並ぶことで過去の変更履歴を参照できる

gitのインストール

  • osxには入っているはず
    git --version

gitの初期設定

  • 設定済みの確認方法

    git config -l
  • 何も設定してない方は

    git config --global --add user.name ogawaso
    git config --global --add user.email ogawaso@gmail.com
  • 色付け

    git config --global color.ui auto
  • editor

    git config --global core.editor vim
  • 設定情報が追加されてる

    git config -l

リポジトリファイルを作成

  • ディレクトリ作成
    mkdir git_study
  • ディレクトリ移動
    cd git_study
  • sample.rbというファイルを作る
  • helloって表示されるrubyスクリプトを作る
    echo 'puts "hello!"' > sample.rb
  • rubyスクリプトを動かしてみる
    ruby sample.rb
  • gitのリポジトリにする
    git init

状態の確認

 git status
On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

リポジトリ追加対象にする

  • addするとindexに行く
  • ドットを指定したときはカレントディレクトリ上のファイルを全て対象
    git add .
  • 追加対象になったことの確認
    git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

          new file:   sample.rb
          

変更した差分をみる

git diff
  • +がついている部分が追加対象
  • -がついていたら削除対象
diff --git a/sample.rb b/sample.rb
index 5e3c993..aa711e6 100644
--- a/sample.rb
+++ b/sample.rb
@@ -1 +1,2 @@
 +puts "hello world!"

リポジトリへの追加

  • -mをつけない場合エディターが立ち上がる
    git commit -m 'first commit'

履歴の確認

  • 変更一覧を表示

    git log
  • 実際のコードの変更を表示

    git log -p

githubアカウント作成

  • githubのサイトに行く http://www.github.com
  • 持ってない人はサインアップする

  • SSH keysの作成する必要ある

  • 設定方法を参考にしてください
    ssh-keygen -t rsa -C 'ogawaso@gmail.com'
    ls ~/.ssh/id_rsa.pub
  • githubのサイトのメニューの右上のAccount Settingsのリンクを押す
  • SSH keysを押す
  • Add SSH keysリンクを押して公開鍵を貼付ける
  • 確認方法
    ssh -T git@github.com
  • 以下のような文言表示されたらOK
    Hi ogawaso! You've successfully authenticated, but GitHub does not provide shell access
    

pushする

  • githubのサイトで右上のプラスボタンを押す
  • New Repositoryを選ぶ
  • git_studyという名前でレポジトリの作成
  • 送信先の追加の作成
git remote add origin 
git@github.com:ogawaso/git_study.git
git push -u origin master

ブランチについて

  • コミット履歴の流れを分岐できる
  • 例として変更中の機能追加しているときに突発的なバグ改修をしたい時とかに使うと便利
  • 最初のコミットではmasterブランチが作られる
  • masterがいつでもリリース可能な状態

ブランチの作成

  • ブランチにコミットしてマスターブランチにマージしてみます

  • ブランチ一覧の表示

    git branch
  • ブランチの作成
    git checkout -b first_branch
  • 2つあることを確認
    git branch

マージする

  • 差分が分かるようにちょっと修正する
    echo 'puts "merge!"' >> sample.rb
  • コミットする

    git commit -m 'second commit'
  • masterに移動

    git checkout master
  • マージする

    git merge first_branch
  • コミットが増えている

  • --graphオプションをつけることでマージされ具合が分かりやすくなる
    git log --graph

stashコマンド

  • ちょっと編集したけど、コミットするまでもないものを保存しておきたいときに便利
    echo 'puts "stash!"' >> sample.rb
  • コミットするまではない編集を一時保存
    git stash
  • 一時保存した修正一覧

    git stash list
  • 一時保存したものを取得

    git stash pop

変更したものを元に戻す

  • 現在git diffで差分が出ている状態
  • diffの差分を出ないように元にする
  • branchを移動するときと同じcheckout
    git checkout .

ファイルの削除

  • ファイルをリポジトリから削除したいとき
    git rm sample.rb
  • 削除対象になっている
    git status
  • コミットする
    git commit -m 'delete file'
  • ファイルがなくなっているはず
    ls

コミットのコメント修正

  • 最新のコミットを修正したいときも同様
    git commit --amend

コミットを元に戻す

  • コミットIDはhash化された文字列
    git revert コミットID
  • コミットの逆の動作のコミットを作成する
  • 削除されたファイルが復活しているはず

コミットを消す(reset)

  • インデックスに戻す
  • HEADがコミットの一番最新地点

    git reset --soft HEAD~1
  • ファイルの変更自体も消す

  • (ワーキングディレクトリまで戻る)
    git reset --hard HEAD~1

reflog

  • コマンド操作の作業の歴史を閲覧できる
    git reflog
  • 過去の状態に戻すことができる
  • 指定した作業の復元ではない
  • 間違ってgit reset --hardしてコミット消したときとか便利
    git reset --hard HEAD@{1}

チェリーピック

  • 別のブランチの1つのコミットだけ持ってくる
  • 例としてブランチで複数のコミットを作ったときにそのうちの1つだけをmasterに先にマージしておきたい
    $ git cherry-pick コミットID

エイリアス

  • タイプ数が少なくなるオススメ設定
  • checkout → co
  • commit → ci
  • branch → br
git config --global alias.co "checkout"
git config --global alias.ci "commit"
git config --global alias.br "branch"

tig

  • git logをviのコマンドベースで見れる
  • jとかkとか終わるときはq
  • インストール法(osx)
  • homebrewをインストール済み前提
    brew install tig

プルリクエスト

  • プルリクエストとはリモートリポジトリへの変更依頼

  • (1)forkという作業で自分のgithubアカウントにリポジトリのコピーを作る

  • (2)cloneしてローカルPCにダウンロード
  • (3)自分のアカウントのリモートリポジトリにブランチを作成
  • (4)github上でプルリクエスト作成ボタンを押す

  • 今回はgithubの画面上でogawaso/git_pr_studyリポジトリをforkする

  • forkしたリポジトリをクローンしてローカルPCに配置
    git clone git@github.com:アカウント名/git_pr_study.git

リモートブランチを作る

  • 通常のブランチを作る
    git checkout -b first-pull-request
  • README.mdを自由に修正後、インデックスに追加
    git add README.md
  • コミットする

    git commit -m 'first pull request '
  • リモートリポジトリへpush

    git push origin first-pull-request

プルリクエストを作る

  • github上の自分のアカウントのgit_pr_studyリポジトリを参照する
  • branch一覧にfirst_pull_requestブランチが追加されていることを確認
  • ブランチを参照
  • Create pull requestボタンを押す
  • コメントを書く
  • 作成ボタンを押す

プルリクエストを受け取る

  • 基本的にはforkもとのユーザーさんが受け取る
  • collaboratorにアカウントを追加すれば、その人もプルリクエストをを受け取れる
  • github上でプルリクエストを参照
  • 詳細表示
  • 問題ないかコメントのやり取り
  • 承認ボタンを押す

受け取ったプルリクエストを手動で反映

  • 画面上だけの確認だと動作確認できない
  • そういうときはローカルPC上にプルリクエストされたブランチを取得して動作確認
    git remote add 送信者 git@github.com:送信者/git_pr_study.git
  • リポジトリ情報を取得

    git fetch 送信者
  • 動作確認用のbranchを作成

    git checkout -b pr1

続き

  • 送信者の変更をマージ
    git merge 送信者/first_pull_request
  • 動作確認、テストする
  • プルリクエスト送信先のブランチへマージ
    git checkout ogawaso/master
    git merge pr1
  • pushする
    git push
  • プルリクエストがclosedになっているはず

便利サイト

参考資料

0