git勉強会

46
Git ととととととととと とととと とととととととと 2013/11/18 masato-ka

Upload: masato-kawamura

Post on 30-Jun-2015

819 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Git勉強会

Git と仲良くするために 秘密結社 分散構成管理の杜

2013/11/18 masato-ka

Page 2: Git勉強会

目的は、 Git のコマンドをみんなで使って分散構成管理ツールの使い方を体感することです。

すいません、資料は突貫工事で作っていますので間違いや不備があるかもしれません。もし気付けば教えて下さい。

この勉強会と資料について

Page 3: Git勉強会

ヒャッハー = 「フォルダ管理」

統率された社会 = Subversion, CVS, TFS

個を尊重する社会 = Git, Mercurial, Bazaar

構成管理どうしてますか?

Page 4: Git勉強会

集中リポジトリ (Subversion)

統率された社会

リポジトリ

commit

checkout/update

ワークコピー

Page 5: Git勉強会

分散構成管理 (git)

分散構成管理とは?

リポジトリ リポジトリ

ワークコピー

ステージング

push

pull/clone

Page 6: Git勉強会

分散構成管理ツールのデファクトスタンダード

Linux のカーネルを管理するために開発された

ネットワークが止まっても使えて便利とか行ってるけど、大抵の人が GitHub が停止したら怒る。

Git を使おう

Page 7: Git勉強会

Git ポケットリファレンス

おすすめ書籍

Page 8: Git勉強会

その昔 Windows で Git を使うのは大変でした。( WinGM, Cygwin などの環境構築から)最近はワンクリックのインストーラがあるようです。

Windows で Git を使うには?

Page 9: Git勉強会

つべこべ言わず CUI 使いやがれ!

Eclipse は EGit その他は SourceTree やTortoiseGit などありますが、いまいち決定打はなさそうです。まずはコマンドラインに馴れてからGUI ツールを探してみましょう。

Git のいい GUI ツールは?

Page 10: Git勉強会

Git を設定しよう

使い始める前に

>git config --global user.name “masato-ka”>git config –global user.email “[email protected]

ユーザ名とメールアドレス

.gitignore( 無視リスト )

*.jar*~target/!lib.jar

Page 11: Git勉強会

まずは一人で Git を使う手順です。練習してみましょう。

1. リポジトリの作成 (git init)2. 変更をステージングする (git add)3. ステージングの内容を確認する (git status)4. 変更をコミットする (git commit)5. コミット内容を確認する (git log)

手元で Git を使う方法

Page 12: Git勉強会

Git で管理したいファイルがあるフォルダに移動して「 git init 」を実行します。

リポジトリの作成

>git init

>git init C:/workspace/SampleProject

または

「 C:/workspace/SampleProject 」をリポジトリとして初期化する。以下のようなメッセージが出ます。Initialized empty Git repository in

Page 13: Git勉強会

変更点を Git のリポジトリに入れるためにはステージングする必要がある。

コミットのための2段階

ステージング

ローカルリポジトリ

新規追加ファイル

編集済みファイル

新規追加ファイル

編集済みファイル

git add

git commit

Page 14: Git勉強会

ファイルを編集した内容をステージングエリアに入れる

適当なファイルを編集してくださいその後、次のコマンドを実行

add

>git add [ 変更を記録したいファイルまたはフォルダ ]

指定記法 意味hogehoge.java hogehoge.java

* 変更されたすべてのファイル

src src フォルダ*.java 変更された java ファイル

すべて※ * を使うとサブディレクトリも検索される。※ git reset でステージングエリアから削除できる。

Page 15: Git勉強会

ステージングエリアの状態を表示させる。

status

>git status

sample.txt を新規にステージングエリアに追加した状態が表示される。

Page 16: Git勉強会

ステージングに変更を登録したあと、ローカルリポジトリに登録する。

commit

>git commit –m “ コミットコメント”

Page 17: Git勉強会

ブランチは作業をするために必要な物です。 Git リポジトリは master というブランチが存在し

ています。 通常は他のリポジトリの同期を master で行うた

め、他のブランチを作成して作業を行います。(master を汚さずに開発する。 )

Issue ブランチや開発ブランチ、バグ修正ブランチなどの種類があります。(実際は同じブランチです。)

ブランチについて

Page 18: Git勉強会

ブランチを図示してみる

a b e

head

dc

master

branch

merge

Page 19: Git勉強会

ブランチの一覧を表示させる。

git branch

>git branch

* master アスタリスクが現在のブランチ

a bmaster

head

Page 20: Git勉強会

ブランチを作成する or 切り替える

git checkout

>git checkout -b topic>git branch -l

a bmaster

head

c*topic

>git checkout master>git branch -l

a b*master

ctopic

Page 21: Git勉強会

master へコミットしてください。 topic ブランチに移動して 3 回コミットしてくださ

い。 それぞれ、ファイルの編集 2 回、フォルダの追加1

回です。

突然ですが総合演習1

Page 22: Git勉強会

他のブランチの変更を取り込む

git merge [ ブランチ名 ]

>git checkout master>git merge topic

a b*master

ctopic

d

e f g

h

もしも競合が発生した場合は競合を解消してコミットしてほしい

Page 23: Git勉強会

競合が発生した場合は

競合

>git status –sUU conflict.txt #競合が発生したファイル

競合したファイルを編集して add する

>git status –sM conflict.txt #競合が発生したファイル>git commit #競合解消時は自動でコミットコメントが入る

Page 24: Git勉強会

merge されるまでに master にコミットが無ければ master のヘッドとブランチのヘッドが同じコミットを示す。

Fast-Forward マージ

a b*master

ctopic e f g

g

master

topic

Page 25: Git勉強会

分岐元ブランチの最新のコミットにつなぎ変える。

git rebase master

a b*master

ctopic e f

g

>git rebase master #topic ブランチで実行

a b*master

ctopic e f

g

h i j

>Fast-Forward マージ! <

Page 26: Git勉強会

競合解決を行うブランチを決めることができる

普通に master でマージ →  master で競合を解決 rebase してマージ → topic ブランチで競合を解決

つまりどういうことだってばよ!

Page 27: Git勉強会

よく使う(らしい)ブランチ 機能ブランチ トピックブランチ 開発ブランチ 安定ブランチ メンテナンスブランチ

ブランチ生存戦略

Page 28: Git勉強会

共有リポジトリの作成 (git init) ローカルリポジトリの作成 (git clone) 作業用ブランチの作成 (git branch) 共有リポジトリの変更を取り込む (git pull) ローカルリポジトリから共有リポジトリへ (git

push)

共有リポジトリを使ってみる

Page 29: Git勉強会

今回は作りません。以下の github のリポジトリを使います。

https://github.com/masato-ka/SampleProject.git

共有リポジトリの準備

Page 30: Git勉強会

共有リポジトリからローカルリポジトリを作成する

git clone [共有リポジトリのパス ]

>git clone https://github.com/masato-ka/SampleProject.git

リポジトリ リポジトリ

リポジトリ リポジトリ

Page 31: Git勉強会

共有リポジトリ

  master ブランチで直接作業すると、自分の変更点と共有リポジトリに push された他人の変更点がごっちゃになってしまう。そこで、自分の作業は作業ブランチで行う。

作業用リポジトリを作成する

a b*master

c e f

a b*master

clone

Page 32: Git勉強会

共有リポジトリの変更をローカルリポジトリに取り込む

git pull

>git pull

リポジトリ リポジトリ

リポジトリ リポジトリ

Page 33: Git勉強会

共有リポジトリ

共有リポジトリから他の人の変更を取り込みマージする

変更を取り込み後マージする

a b*master

c

work

e f

a b*master

g

clonepull

h

merge

conflict

Page 34: Git勉強会

共有リポジトリからローカルリポジトリを作成する

git push

>git push

リポジトリ リポジトリ

リポジトリ リポジトリ

Page 35: Git勉強会

共有リポジトリへマージ結果を反映する

共有リポジトリへ反映

共有リポジトリ

a b*master

c

work

e f

a b*master

g

clonepull

h

merge

conflict

h

push

Page 36: Git勉強会

共有リポジトリ

ローカルでコミットをまとめるため、履歴が追跡しやすい

作業ブランチを使って見やすく

a b*master

cwork e f

g

a b*master

g

clone pull

h

merge --squash

h

pushコミットがまとめられて履歴が汚れない

Page 37: Git勉強会

ローカルリポジトリで作成したブランチは pushしなくては行けない。

ブランチを push する。

>git push –u origin fix-branch

Page 38: Git勉強会

一つの GitHub リポジトリをみんなで作業しましょう。

皆さん自分の名前を作成してコミットしてください。

5回以上編集を行ってください。 共有リポジトリに push してください。 となりの人と同じファイルを編集してコンフリク

トを起こしましょう。 作業ブランチを使ってもかまいません。違いを確

認しましょう。

総合演習2

Page 39: Git勉強会

ひょんなことから Git リポジトリを作ってしまった俺たちは、お互いの存在をまだ知らない。

これまでのあらすじ

あの日作った GitHub アカウントに僕たちはまだ push していない

Page 40: Git勉強会

Git のホスティングサービス Issue の管理機能 ( チケット ) 他人のリポジトリを Fork できる。 Pull リクエストと呼ばれる独特の仕組みがある。

GitHub

Page 41: Git勉強会

Fork と pull リクエストを活用

GitHub を活用した開発

リポジトリ リポジトリ

fork

pull request

http://github.com/masato-ka/SampleProject

/[yourname]/SampleProject

リポジトリ

clone

編集とリベース

local

pushpull

masterFix-branch

Page 42: Git勉強会

GitHub の WEB画面から fork フォークしたリポジトリを clone 作業用ブランチを作成し、作成したブランチで編集 作業用ブランチを push(git push –u origin fix-

branch) Fork 元のリポジトリ (upstream) から master に変

更を取り込む 作業ブランチを rebase し自分のリポジトリに push プルリクエスト送信

作業の流れ

Page 43: Git勉強会

Fork

Fork

Page 44: Git勉強会

clone 元の以外のリポジトリを追加する。

git remote add

>git remote add upstrema https://github.com/masato-ka/SampleProject

>git remote -v

追加されたことを確認する。

Page 45: Git勉強会

総合演習

http://github.com/masato-ka/SampleProject を fork して自分の名前のファイルを編集し、 pullリクエストを送ってください。

Page 46: Git勉強会

Git を個人で使う Add して commit branch( ブランチでマージか?マスターでマージ

か? ) 共有リポジトリで使う

基本はマージ master を綺麗に使う方法

GitHub Fork と pull リクエスト

まとめ