SlideShare una empresa de Scribd logo
1 de 46
Git と仲良くするために
秘密結社 分散構成管理の杜
2013/11/18 masato-ka
この勉強会と資料について

目的は、Gitのコマンドをみんなで使って分散構成
管理ツールの使い方を体感することです。
すいません、資料は突貫工事で作っていますので
間違いや不備があるかもしれません。もし気付け
ば教えて下さい。
構成管理どうしてますか?

ヒャッハー = 「フォルダ管理」
統率された社会 = Subversion, CVS, TFS
個を尊重する社会 = Git, Mercurial, Bazaar
統率された社会

集中リポジトリ(Subversion)
リポジトリ

commit

checkout/upd
ate

ワークコピー
分散構成管理とは?

分散構成管理(git)

push

リポジトリ

リポジトリ
pull/clone

ステージング

ワークコピー
Gitを使おう

分散構成管理ツールのデファクトスタンダード
Linuxのカーネルを管理するために開発された
ネットワークが止まっても使えて便利とか行って
るけど、大抵の人がGitHubが停止したら怒る。
おすすめ書籍

Git ポケットリファレンス
WindowsでGitを使うには?

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

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

Gitを設定しよう
ユーザ名とメールアドレス
>git config --global user.name “masato-ka”
>git config –global user.email “mail@mail.com”
.gitignore(無視リスト)
*.jar
*~
target/
!lib.jar
手元でGitを使う方法

まずは一人でGitを使う手順です。練習してみま
しょう。
1.
2.
3.
4.
5.

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

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

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

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

新規追加ファイ
ル

編集済みファイ
ル

git add

新規追加ファイ
ル

編集済みファイ
ル
ステージング

git commit

ローカルリポジト
リ
add

ファイルを編集した内容をステージングエリアに
入れる
適当なファイルを編集してくださいその後、次のコ
>git add [変更を記録したいファイルまたはフォ
ルダ]
マンドを実行
指定記法

意味

hogehoge.java

hogehoge.java

*

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

src

srcフォルダ

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

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

ステージングに変更を登録したあと、ローカルリ
ポジトリに登録する。
>git commit –m “コミットコメント”
ブランチについて

ブランチは作業をするために必要な物です。
Gitリポジトリはmasterというブランチが存在して
います。
通常は他のリポジトリの同期をmasterで行うため、
他のブランチを作成して作業を行います。(master
を汚さずに開発する。)
Issueブランチや開発ブランチ、バグ修正ブランチ
などの種類があります。(実際は同じブランチで
す。)
ブランチを図示してみる

head

master
a

b

e
c

d
branch

merge
git branch

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

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

master a

head
b
git checkout

ブランチを作成する or 切り替える
>git checkout -b topic
>git branch -l
master a

head
b

*topic c
>git checkout master
>git branch -l
*master a

b
topic c
突然ですが総合演習1

masterへコミットしてください。
topicブランチに移動して3回コミットしてください。
それぞれ、ファイルの編集2回、フォルダの追加1回
です。
git merge [ブランチ名]

他のブランチの変更を取り込む
>git checkout master
>git merge topic
*master a

d

b
topic

c

h
e

f

g

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

競合が発生した場合は
>git status –s
UU conflict.txt #競合が発生したファイル
競合したファイルを編集してaddする
>git status –s
M conflict.txt #競合が発生したファイル
>git commit #競合解消時は自動でコミットコメント
が入る
Fast-Forwardマージ

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

master
topic
*master a

g

b
topic

c

e

f

g
git rebase master

分岐元ブランチの最新のコミットにつなぎ変える
。
*master a
b
g
topic

c

e

f

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

b
topic

g
c

e

f

h

>Fast-Forward マージ!<

i

j
つまりどういうことだってば
よ!
競合解決を行うブランチを決めることができる
普通にmasterでマージ → masterで競合を解決
rebaseしてマージ → topicブランチで競合を解決
ブランチ生存戦略

よく使う(らしい)ブランチ
機能ブランチ
トピックブランチ
開発ブランチ
安定ブランチ
メンテナンスブランチ
共有リポジトリを使ってみる

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

今回は作りません。以下のgithubのリポジトリを使
います。
https://github.com/masato-ka/SampleProject.git
git clone [共有リポジトリのパ
ス]
共有リポジトリからローカルリポジトリを作成す
る
リポジトリ

リポジトリ

>git clone https://github.com/masatoka/SampleProject.git

リポジトリ

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

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

b
clone

*master a

b

c

e

f
git pull

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

リポジトリ

>git pull

リポジトリ

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

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

b

g

clone

*master a

pull
b

work

c

e

f

merge
h

conflict
git push

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

リポジトリ

>git push

リポジトリ

リポジトリ
共有リポジトリへ反映

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

b

g

h
merge

clone

*master a

pull
b

work

c

e

f

push
h

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

ローカルでコミットをまとめるため、履歴が追跡
しやすい
共有リポジトリ
*master a

b

g

clone

*master a

h

pull
b

work

push
g

c

e

h
f

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

merge --squash
ブランチをpushする。

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

>git push –u origin fix-branch
総合演習2

一つのGitHubリポジトリをみんなで作業しましょ
う。
皆さん自分の名前を作成してコミットしてくださ
い。
5回以上編集を行ってください。
共有リポジトリにpushしてください。
となりの人と同じファイルを編集してコンフリク
トを起こしましょう。
作業ブランチを使ってもかまいません。違いを確
認しましょう。
これまでのあらすじ

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

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

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

Forkとpullリクエストを活用
http://github.com/masato-ka/SampleProject

/[yourname]/SampleProject
fork

リポジトリ

リポジトリ
pull request

push

pull

clone

local

リポジトリ
master
Fix-branch
編集とリベー
ス
作業の流れ

GitHubのWEB画面からfork
フォークしたリポジトリをclone
作業用ブランチを作成し、作成したブランチで編
集
作業用ブランチをpush(git push –u origin fix-branch)
Fork元のリポジトリ(upstream)からmasterに変更を
取り込む
作業ブランチをrebaseし自分のリポジトリにpush
プルリクエスト送信
Fork

Fork
git remote add

clone元の以外のリポジトリを追加する。
>git remote add upstrema
https://github.com/masato-ka/SampleProject

追加されたことを確認する。
>git remote -v
総合演習

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

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

共有リポジトリで使う
基本はマージ
masterを綺麗に使う方法

GitHub
Forkとpullリクエスト

Más contenido relacionado

Destacado

第7回ros勉強会 NTTデータのロボティクス分野取り組み
第7回ros勉強会 NTTデータのロボティクス分野取り組み第7回ros勉強会 NTTデータのロボティクス分野取り組み
第7回ros勉強会 NTTデータのロボティクス分野取り組みMasato Kawamura
 
Git Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and TagsGit Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and TagsMikhail Melnik
 
Pycharm 4への誘い
Pycharm 4への誘いPycharm 4への誘い
Pycharm 4への誘いAi Makabi
 
IntelliJ IDEAで快適なPython生活
IntelliJ IDEAで快適なPython生活IntelliJ IDEAで快適なPython生活
IntelliJ IDEAで快適なPython生活敦志 金谷
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくるAtsushi Hayakawa
 

Destacado (7)

第7回ros勉強会 NTTデータのロボティクス分野取り組み
第7回ros勉強会 NTTデータのロボティクス分野取り組み第7回ros勉強会 NTTデータのロボティクス分野取り組み
第7回ros勉強会 NTTデータのロボティクス分野取り組み
 
Git Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and TagsGit Series. Episode 2. Merge, Upstream Commands and Tags
Git Series. Episode 2. Merge, Upstream Commands and Tags
 
Pycharm 4への誘い
Pycharm 4への誘いPycharm 4への誘い
Pycharm 4への誘い
 
IntelliJ IDEAで快適なPython生活
IntelliJ IDEAで快適なPython生活IntelliJ IDEAで快適なPython生活
IntelliJ IDEAで快適なPython生活
 
Flask勉強会その1
Flask勉強会その1Flask勉強会その1
Flask勉強会その1
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくる
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 

Similar a Git勉強会

バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアルRyo Igarashi
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルComputational Materials Science Initiative
 
Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Koji Shinba
 
【アジャイル道場】Git運用勉強会
【アジャイル道場】Git運用勉強会【アジャイル道場】Git運用勉強会
【アジャイル道場】Git運用勉強会Sosuke Kimura
 
Git社内勉強会資料
Git社内勉強会資料Git社内勉強会資料
Git社内勉強会資料Kenji Takei
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 Hiro Yoshioka
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座Yusei Yamanaka
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜Takashi Uemura
 
Git_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdfGit_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdfYoshiki Tanaka
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発s_taichan
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発Taichi Shindo
 
バージョン管理とGit
バージョン管理とGitバージョン管理とGit
バージョン管理とGitsinsoku listy
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南Kouji Matsui
 

Similar a Git勉強会 (20)

バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
Git&GitHub入門
Git&GitHub入門Git&GitHub入門
Git&GitHub入門
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
Git -分散バージョン管理システム-
Git -分散バージョン管理システム-Git -分散バージョン管理システム-
Git -分散バージョン管理システム-
 
ゼミGit
ゼミGitゼミGit
ゼミGit
 
Git地図
Git地図Git地図
Git地図
 
Gitに触れよう
Gitに触れようGitに触れよう
Gitに触れよう
 
【アジャイル道場】Git運用勉強会
【アジャイル道場】Git運用勉強会【アジャイル道場】Git運用勉強会
【アジャイル道場】Git運用勉強会
 
Git社内勉強会資料
Git社内勉強会資料Git社内勉強会資料
Git社内勉強会資料
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 
Git勉強会 #01
Git勉強会 #01Git勉強会 #01
Git勉強会 #01
 
Git_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdfGit_GitHub 入門者向けスライド.pdf
Git_GitHub 入門者向けスライド.pdf
 
Git tutorial
Git tutorialGit tutorial
Git tutorial
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 
バージョン管理とGit
バージョン管理とGitバージョン管理とGit
バージョン管理とGit
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
 

Git勉強会