GitHubワークショップ@kodam/github-id:oppai
アジェンダ• バージョン管理の基本 15分• GitHub/Gitの基本てきな使い方 30分• 応用編 15分
バージョン管理の基本
バージョン管理システムとは• コンピュータ上で作成・編集したファイルの変更履歴を管理するシステム記録A記録B記録C 記録E記録D 最新
バージョン管理システムとは• 特にソフトウェア開発のソースコードの管理に使われている• バージョン管理システムにはCVS・SVN・GITなどいろいろあるが、今回はGITについて取り扱う
バージョン管理システムとは• ファイルの各バージョン情報をデータベースで管理している• このデータベースのことをリポジトリと呼ぶ
バージョン管理システムとは• 既存のバージョン管理システムでは、リポジトリをサーバーのみに持つが、Gitではサーバーとクライアントの両方にリポジトリを持っている。
バージョン管理システムとは• サーバーのリポジトリをリモートリポジトリ、クライアントのリポジトリをローカルリポジトリと呼びます。
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C Dローカル環境にリポジトリの作成、ファイルの追加を行う(initialize)
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C Dリモートリポジトリへリポジトリの差分のコピー(push)リポジトリA B C D
バージョン管理システムの基本操作リポジトリA B C Dユーザー
バージョン管理システムの基本操作リポジトリA B C DA B C Dローカル環境にリポジトリをコピー(clone)リポジトリA B C Dユーザー
バージョン管理システムの基本操作リポジトリA B C DA B C DリポジトリA B C DユーザーE
バージョン管理システムの基本操作リポジトリA B C DA B C DリポジトリA B C DユーザーEローカルリポジトリに変更を通知(commit)E
バージョン管理システムの基本操作リポジトリA B C DA B C DリポジトリA B C DユーザーEリモートリポジトリへ差分をコピー(push)EE
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D Eローカルリポジトリへ差分をコピー(pull)EE
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FF
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FFローカルリポジトリへ差分をコピー(pull)EE
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FF差分だけがうまくマージされる!便利!EE
バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FFEEリモートリポジトリへ差分をコピー(push)F
バージョン管理システムとは• Gitの基本操作1. ローカルリポジトリの作成、ファイルを登録する2. ローカルリポジトリをリモートへコピーする3. 必要であれば、リモートリポジトリからローカルへ差分をコピーする(プル)4. ローカルリポジトリを...
ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B 記録C 記録E記録D 記録FMasterブランチバグ修正ブランチ
ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B Masterブランチバグが発生!でも、Masterブランチには影響させたくない!
ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B記録DMasterブランチバグフィックス用ブランチブランチを派生!(このことをブランチを切るという)
ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B 記録C記録DMasterブランチバグフィックス用ブランチ
ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
ブランチ• ブランチの切り方に明確なルールはない– しかし、習慣的なものはある– バグをまとめて管理したい時– リリースと開発を分けたい時、等々記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
ブランチ• ブランチはマージすることができる記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
ブランチ• バグ修正用ブランチでバグ修正が終わったとき記録A 記録B 記録C 記録E記録D 記録Fバグ修正完了!
ブランチ• マージすることでMasterのバグが修正される– これによってマージされたブランチは削除される記録A 記録B 記録C 記録E記録D修正完了!記録F記録G
ブランチ• Gitはマージの他にリベースという機能がある記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
ブランチ• リベースはマージとは異なり、記録C、記録Eの変更を先に適用する方法– リベースはいろんな機能があるのでこれでは不十分• イマイチ僕も理解してないので、自分で勉強してね(・ω<) てへぺろ記録C 記録E記録D 記録FMasterブラン...
バージョン管理システムのメリット• ソースコードを持ち歩く必要ない– ソースコードを渡すときにZIPとかUSBメモリで渡す必要がない– URLを教えれば、常に最新のソースコードを渡すことが出来る• バイナリやドキュメントも管理可能
バージョン管理システムのメリットダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録 最初のリビジョン• 過去のバージョンに戻したり、組み合わせし直せる– コミットのログを...
バージョン管理システムのメリット• 過去のバージョンに戻したり、組み合わせし直せる– 最新のリビジョンにバグがある例ダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録
バージョン管理システムのメリットダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録ここのリビジョンにアップデート可能• 一つ前のリビジョンにやり直すことが出来る– この作...
バージョン管理システムのメリット• 過去のバージョンに戻したり、組み合わせし直せる– 必要な分だけマージすることが出来るダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録...
バージョン管理システムのメリット• 複数人でのファイル編集が可能– モジュール単位で作業分担が可能– プロジェクトのドキュメントのTeXを管理するときも便利– ファイルの編集をコミットする時に、ローカル環境が最新の常態でないとコンフリクト(衝突...
バージョン管理システムのメリット• コンフリクトとは– ローカルの環境が古い状態でコミットした場合起こる現象– 最新の状態にアップデートしてからコミットすることで回避出来る ユーザーAユーザーBリポジトリA B C DA B C DA B C D
バージョン管理システムのメリット• コンフリクトとは– ローカルの環境が古い状態でコミットした場合起こる現象– 最新の状態にアップデートしてからコミットすることで回避出来るユーザーAユーザーBリポジトリA B C DA B C DA B C DEF
バージョン管理システムのメリット• コンフリクトとは– ローカルの環境が古い状態でコミットした場合起こる現象– 最新の状態にアップデートしてからコミットすることで回避出来る ユーザーAユーザーBリポジトリA B C DA B C DA B C ...
バージョン管理システムのメリットユーザーAユーザーBリポジトリA B C D A B C DA B C D Fコミットするが、コンフリクトするE E橙色の部分が一緒じゃないので最新ではない
バージョン管理システムのメリットユーザーAユーザーBリポジトリA B C D A B C DA B C DアップデートE EEアップデートすると自動的に差分がマージされるF
バージョン管理システムのメリットユーザーAユーザーBリポジトリA B C D A B C DA B C DコミットE EE FF
バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DA B C D Fコミットするが、コンフリクトするE E橙色の部分が一緒じゃないので最新ではない
バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DA B C D FE E作業ファイルを一時保存しておき、アップデートするA B C D E
バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DA B C D FE E保存したファイルを上書きするA B C D FE
バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DE EシステムはEが無いので、削除したと判断 A B C D FE
バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D EA B C D FEA B C D Fコミット
バージョン管理システムのメリット• コミットする際には必ず差分を見よう!
Gitのメリット• オフライン環境でもバージョン管理できる• マージが超賢い(ラインマージ)• コミットログを再編集することができる– git-rebaseやgit-resetなど• GitHubという強いバージョン管理インフラがある
GitのメリットやっとここでGitHub!やぁ
GitHubについて• 無料でGitの(リモート)リポジトリが作れる– 一部制約あり、学生には特典あり• チケット管理システムやWikiがくっついてる• GitHubならではの機能が素晴らしい– ForkやPullRequestOctocat
Fork• 他人の公開リポジトリを自分の公開リポジトリとしてコピーする– 自分のリポジトリのように編集できる– 相手のリポジトリには影響がないリポジトリ リポジトリ
PullRequest• 自分の改良したブランチをマージしてもらう為のリクエスト– OSS文化ではよくある形式– 自分でバグフィックスしたブランチを送る• 要はマージのリクエストリポジトリ リポジトリPullしてください♡
PullRequest• 自分の改良したブランチをマージしてもらう為のリクエスト– OSS文化ではよくある形式– 自分でバグフィックスしたブランチを送る• 要はマージのリクエストリポジトリ リポジトリPullしてください♡クソコードなんかマージ...
GITHUBを使った実践GIT
Git入門• このワークショップではWindows版の公式Gitクライアントを使っていることを想定• 主にCUIのGitBashを使うまだ入れてない人は大至急– http://git-scm.com/downloads
アプリの起動コンソール画面(GitBash)
Git入門• 今回の演習ではGitBashを中心に話をします• Windowsで他のクライアントを使ってる人• MacOSやLinux使ってる人、コマンドだけ把握してください
Git入門• WindowsのGitクライアントはGitBash以外にもTortoiseGitなどあるので各自調べてね☆
Git入門• まずは作業ディレクトリを作る– $ mkdir techfun && cd techfun• 作業ディレクトリの確認– $ explorer .
Git入門
既存のリポジトリについて• 既にリモートリポジトリがある場合– $ git clone https://github.com/oppai/homo.sh
リポジトリを作ろう• 初期化作業をする
リポジトリを作る• 作業フォルダを作成・移動– $ mkdir hello && cd hello• 初期化作業をする– $ git initスクリーンショットはtechfunディレクトリの中で作業してるけど、helloディレクトリだと思ってく...
変更の確認• 今までの状態を確認をしてみる– $ git status
ファイルの追加• Hello.txtというファイルを追加しよう
変更の確認• ステータスの確認– $ git status
ファイルの追加• リポジトリにHello.txtを追加することを通知(ステージ)– $ git add Hello.txt• 確認をしてみる– $ git status
内容をリポジトリに反映• ステージした内容をリポジトリに反映– $ git commit –m “init and add hello.txt”• なんか怒られた!
ユーザーの登録• メールアドレスの登録– $ git config --global user.email “your[at]email.com”• ユーザー名の登録– $ git config --global user.name “hoge”
内容をリポジトリに反映• ステージした内容をリポジトリに反映– $ git commit –m “init and add hello.txt”• この作業をコミットと呼ぶ
変更の確認• ステータス確認– $ git status• コミットログを確認– $ git log
ここまでのまとめリポジトリリポジトリを初期化する$ git init
ここまでのまとめリポジトリファイルを作業フォルダに追加するA
ここまでのまとめリポジトリファイルのステージ$ git add <file…> Aファイルをコミット出来る状態にするA
ここまでのまとめリポジトリ変更のコミット$ git commit –m “hogehoge”A変更をリポジトリに登録するA
次の作業• ローカルリポジトリをリモートリポジトリへコピーする
リモートリポジトリの作成• GitHubのDashboardを開く
リモートリポジトリの作成• New Repositoryをクリック
リモートリポジトリの作成• Repository nameはhelloにしてください
リモートリポジトリの作成• 基本は書いている事そのまま
リモートリポジトリの作成• 基本は書いている事そのまま– $ git remote add origin your_url– $ git push -u origin masterGithubのidとpassが要求される
リモートリポジトリの作成• さっきのリポジトリのページを確認
ここまでのまとめ• リモートリポジトリの作成(GitHubで作成)• ローカルリポジトリをリモートリポジトリへコピーする(push)
次の作業• バグフィックス用のブランチを作り、現行ブランチにPull Requestを送るPull Request
ブランチを作成これ
ブランチを作成• fix-01というブランチを作成する
ブランチを作成• masterブランチとfix-01ブランチがある
ブランチを変更• ブランチの確認– *は現在見ているブランチ– $ git branch –a• 情報を取得– $ git fetch– $ git branch –a
ブランチを変更• fix-01に使用するブランチを変更– $ git checkout fix-01– $ git branch –a
ファイルの更新• README.mdファイルを作成– マークダウン記法で書かれた説明書– HTMLやCSSのようにGitHub上で見やすい
ファイルの更新• 前回と同じように追加– $ git add README.md– $ git commit –m “add README.md”• コミットログを確認
ファイルの更新• もし間違ったコミットをしてしまった場合– 一つ前のコミットに戻す– $ git reset --soft HEAD^• 作業ファイルを綺麗にしたい場合– 最新のコミットの状態に戻す– $ git reset --hard HEAD
ブランチの変更• ブランチをmasterに切り替えてみる– $ git checkout master• ファイル構造が変わったのを確認– README.mdが消える– fix-01ブランチに戻しておこう
ブランチの変更• ブランチがfix-01か確認– $ git branch– もし違っていたらcheckoutしてfix-01に切り替える• リモートのfix-01にローカルのfix-01の変更をコピー– $ git push origin f...
変更の確認
ここまでのまとめ• ブランチを確認– $ git branch [-a]• ブランチの変更– $ git checkout branch_name• ローカルの変更をリモートへ適用– $ git push origin branch_name•...
PullRequestを送る「バグ直したんでMasterにマージさせてくださーーーい」
PullRequestを送る• 今回は自分自身に出しているが、通常他人のブランチに対して出す「バグ直したんでMasterにマージさせてくださーーーい」
PullRequestを送る• これにより変更点のレビューや議論をGitHub上で行い易くなっている「バグ直したんでMasterにマージさせてくださーーーい」
PullRequestを送る
PullRequestを送る
PullRequestを送る
PullRequestを送るちゃんと動くか確認しましょう!
ブランチのマージ• ブランチがmasterか確認– $ git branch– もし違っていたらcheckoutしてmasterに切り替える• リモートのfix-01の変更点をローカルのmasterにマージ– $ git pull origin...
ブランチのマージ• ファイルが壊れていないか確認
PullRequestを処理• このPullRequestは大丈夫そう!
PullRequestを処理• GitHub上でマージして、コミットされた!
PullRequestを処理• GitHub上でマージして、コミットされた!PullRequest
PullRequestを処理• fix-01ブランチはもういらないから消す
PullRequestを処理• Masterに変更が適用されてるか確認
PullRequestを処理• ローカルでマージしたものを破棄– $ git reset --hard HEAD^• リモートサーバから新しく差分をコピーする– $ git pull origin master
まとめ• PullRequestを送る場合、専用ブランチを作成する– Githubからでもコンソールからでも作成可能– $ git checkout –b new_branch– $ git push origin new_branch• Pu...
応用編時間があれば
git-reset• マニュアル便利– $ man git-reset• 広島Git勉強会 201306 - やりなおせるGit入門– http://blog.eiel.info/blog/2013/06/02/hiroshima-git/
git-reflog• [技術][Git]Git初心者が絶対に覚えておくべきコマンド– http://d.hatena.ne.jp/idesaku/20091106/1257507849• いざという時のためのgit reflog - Qiit...
Bitbucket• Bitbucket– https://bitbucket.org/• 無料のプライベートリポジトリが無限に作れる!• もちろん公開リポジトリも作成可能• グループでの開発に人数規制がある• 日本語にほとんど対応してる• マ...
.gitignore• 管理対象外のファイルを指定できる– .o,.swpなどのゴミファイルを管理対象外に• 開発環境に合わせて、作成すると便利– VisualStudioなら.objやbinフォルダなどを指定• ググるとたくさん出てくるので参考に
マークダウン記法• Markdown記法– マークダウン記法をマスターするためのサイト・チートシート・ツール。 http://bamka.info/3765/• GithubではいろんなところでMarkdown記法を使う• README.mdを...
フォーク• 他人のリポジトリをコピーして自分のリポジトリの様に扱う機能– GitHubの機能で、人のリポジトリはいじれないので一度フォークし、ブランチを切って、PullRequestを送るのが良い。• フォーク元が削除されると一緒になって消える
Issue管理• GitHubについてるチケット管理システム– 詳しくはググって
Issue管理
Issue管理
Issue管理• GitHubについてるチケット管理システム– 詳しくはググって• PullRequestもIssueとして管理される– コミットコメントに#番号と付けるとそのIssueのコメントとしてコミットが表示されるので便利• $ git...
もっと勉強したい• Git公式(日本語)– http://git-scm.com/book/ja/• LearnGitBranching (ヤバイ)– http://pcottle.github.io/learnGitBranching/• サ...
本日はお疲れ様でした
Upcoming SlideShare
Loading in …5
×

GitHubワークショップ

1,620 views

Published on

TechFUNで行ったGitHubのワークショップの資料

Published in: Technology
0 Comments
18 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,620
On SlideShare
0
From Embeds
0
Number of Embeds
100
Actions
Shares
0
Downloads
18
Comments
0
Likes
18
Embeds 0
No embeds

No notes for slide

GitHubワークショップ

  1. 1. GitHubワークショップ@kodam/github-id:oppai
  2. 2. アジェンダ• バージョン管理の基本 15分• GitHub/Gitの基本てきな使い方 30分• 応用編 15分
  3. 3. バージョン管理の基本
  4. 4. バージョン管理システムとは• コンピュータ上で作成・編集したファイルの変更履歴を管理するシステム記録A記録B記録C 記録E記録D 最新
  5. 5. バージョン管理システムとは• 特にソフトウェア開発のソースコードの管理に使われている• バージョン管理システムにはCVS・SVN・GITなどいろいろあるが、今回はGITについて取り扱う
  6. 6. バージョン管理システムとは• ファイルの各バージョン情報をデータベースで管理している• このデータベースのことをリポジトリと呼ぶ
  7. 7. バージョン管理システムとは• 既存のバージョン管理システムでは、リポジトリをサーバーのみに持つが、Gitではサーバーとクライアントの両方にリポジトリを持っている。
  8. 8. バージョン管理システムとは• サーバーのリポジトリをリモートリポジトリ、クライアントのリポジトリをローカルリポジトリと呼びます。
  9. 9. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C Dローカル環境にリポジトリの作成、ファイルの追加を行う(initialize)
  10. 10. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C Dリモートリポジトリへリポジトリの差分のコピー(push)リポジトリA B C D
  11. 11. バージョン管理システムの基本操作リポジトリA B C Dユーザー
  12. 12. バージョン管理システムの基本操作リポジトリA B C DA B C Dローカル環境にリポジトリをコピー(clone)リポジトリA B C Dユーザー
  13. 13. バージョン管理システムの基本操作リポジトリA B C DA B C DリポジトリA B C DユーザーE
  14. 14. バージョン管理システムの基本操作リポジトリA B C DA B C DリポジトリA B C DユーザーEローカルリポジトリに変更を通知(commit)E
  15. 15. バージョン管理システムの基本操作リポジトリA B C DA B C DリポジトリA B C DユーザーEリモートリポジトリへ差分をコピー(push)EE
  16. 16. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E
  17. 17. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D Eローカルリポジトリへ差分をコピー(pull)EE
  18. 18. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FF
  19. 19. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FFローカルリポジトリへ差分をコピー(pull)EE
  20. 20. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FF差分だけがうまくマージされる!便利!EE
  21. 21. バージョン管理システムの基本操作リポジトリの管理者リポジトリA B C DA B C DリポジトリA B C D E FFEEリモートリポジトリへ差分をコピー(push)F
  22. 22. バージョン管理システムとは• Gitの基本操作1. ローカルリポジトリの作成、ファイルを登録する2. ローカルリポジトリをリモートへコピーする3. 必要であれば、リモートリポジトリからローカルへ差分をコピーする(プル)4. ローカルリポジトリを編集する(コミット)5. ローカルリポジトリの差分をリモートへコピーする(プッシュ)2〜5を繰り返えす。
  23. 23. ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B 記録C 記録E記録D 記録FMasterブランチバグ修正ブランチ
  24. 24. ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B Masterブランチバグが発生!でも、Masterブランチには影響させたくない!
  25. 25. ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B記録DMasterブランチバグフィックス用ブランチブランチを派生!(このことをブランチを切るという)
  26. 26. ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B 記録C記録DMasterブランチバグフィックス用ブランチ
  27. 27. ブランチ• 変更履歴の束をブランチと呼ぶ• Gitはブランチを複数管理できる記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
  28. 28. ブランチ• ブランチの切り方に明確なルールはない– しかし、習慣的なものはある– バグをまとめて管理したい時– リリースと開発を分けたい時、等々記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
  29. 29. ブランチ• ブランチはマージすることができる記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
  30. 30. ブランチ• バグ修正用ブランチでバグ修正が終わったとき記録A 記録B 記録C 記録E記録D 記録Fバグ修正完了!
  31. 31. ブランチ• マージすることでMasterのバグが修正される– これによってマージされたブランチは削除される記録A 記録B 記録C 記録E記録D修正完了!記録F記録G
  32. 32. ブランチ• Gitはマージの他にリベースという機能がある記録A 記録B 記録C 記録E記録D 最新Masterブランチバグフィックス用ブランチ
  33. 33. ブランチ• リベースはマージとは異なり、記録C、記録Eの変更を先に適用する方法– リベースはいろんな機能があるのでこれでは不十分• イマイチ僕も理解してないので、自分で勉強してね(・ω<) てへぺろ記録C 記録E記録D 記録FMasterブランチバグフィックス用ブランチ
  34. 34. バージョン管理システムのメリット• ソースコードを持ち歩く必要ない– ソースコードを渡すときにZIPとかUSBメモリで渡す必要がない– URLを教えれば、常に最新のソースコードを渡すことが出来る• バイナリやドキュメントも管理可能
  35. 35. バージョン管理システムのメリットダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録 最初のリビジョン• 過去のバージョンに戻したり、組み合わせし直せる– コミットのログをリビジョンという最新のリビジョン
  36. 36. バージョン管理システムのメリット• 過去のバージョンに戻したり、組み合わせし直せる– 最新のリビジョンにバグがある例ダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録
  37. 37. バージョン管理システムのメリットダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録ここのリビジョンにアップデート可能• 一つ前のリビジョンにやり直すことが出来る– この作業の事し、コミットし直すことをロールバックという
  38. 38. バージョン管理システムのメリット• 過去のバージョンに戻したり、組み合わせし直せる– 必要な分だけマージすることが出来るダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装フォロー機能の実装お気に入り機能の実装ユーザーの登録ダイレクトメール機能の実装つぶやき型SNSのリポジトリタイムラインの実装ユーザーの登録
  39. 39. バージョン管理システムのメリット• 複数人でのファイル編集が可能– モジュール単位で作業分担が可能– プロジェクトのドキュメントのTeXを管理するときも便利– ファイルの編集をコミットする時に、ローカル環境が最新の常態でないとコンフリクト(衝突)する
  40. 40. バージョン管理システムのメリット• コンフリクトとは– ローカルの環境が古い状態でコミットした場合起こる現象– 最新の状態にアップデートしてからコミットすることで回避出来る ユーザーAユーザーBリポジトリA B C DA B C DA B C D
  41. 41. バージョン管理システムのメリット• コンフリクトとは– ローカルの環境が古い状態でコミットした場合起こる現象– 最新の状態にアップデートしてからコミットすることで回避出来るユーザーAユーザーBリポジトリA B C DA B C DA B C DEF
  42. 42. バージョン管理システムのメリット• コンフリクトとは– ローカルの環境が古い状態でコミットした場合起こる現象– 最新の状態にアップデートしてからコミットすることで回避出来る ユーザーAユーザーBリポジトリA B C DA B C DA B C DEFコミットE
  43. 43. バージョン管理システムのメリットユーザーAユーザーBリポジトリA B C D A B C DA B C D Fコミットするが、コンフリクトするE E橙色の部分が一緒じゃないので最新ではない
  44. 44. バージョン管理システムのメリットユーザーAユーザーBリポジトリA B C D A B C DA B C DアップデートE EEアップデートすると自動的に差分がマージされるF
  45. 45. バージョン管理システムのメリットユーザーAユーザーBリポジトリA B C D A B C DA B C DコミットE EE FF
  46. 46. バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DA B C D Fコミットするが、コンフリクトするE E橙色の部分が一緒じゃないので最新ではない
  47. 47. バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DA B C D FE E作業ファイルを一時保存しておき、アップデートするA B C D E
  48. 48. バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DA B C D FE E保存したファイルを上書きするA B C D FE
  49. 49. バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D A B C DE EシステムはEが無いので、削除したと判断 A B C D FE
  50. 50. バージョン管理システムのメリット• 絶対してはいけないこと!!– よくやる人がいるので注意ユーザーAユーザーBリポジトリA B C D EA B C D FEA B C D Fコミット
  51. 51. バージョン管理システムのメリット• コミットする際には必ず差分を見よう!
  52. 52. Gitのメリット• オフライン環境でもバージョン管理できる• マージが超賢い(ラインマージ)• コミットログを再編集することができる– git-rebaseやgit-resetなど• GitHubという強いバージョン管理インフラがある
  53. 53. GitのメリットやっとここでGitHub!やぁ
  54. 54. GitHubについて• 無料でGitの(リモート)リポジトリが作れる– 一部制約あり、学生には特典あり• チケット管理システムやWikiがくっついてる• GitHubならではの機能が素晴らしい– ForkやPullRequestOctocat
  55. 55. Fork• 他人の公開リポジトリを自分の公開リポジトリとしてコピーする– 自分のリポジトリのように編集できる– 相手のリポジトリには影響がないリポジトリ リポジトリ
  56. 56. PullRequest• 自分の改良したブランチをマージしてもらう為のリクエスト– OSS文化ではよくある形式– 自分でバグフィックスしたブランチを送る• 要はマージのリクエストリポジトリ リポジトリPullしてください♡
  57. 57. PullRequest• 自分の改良したブランチをマージしてもらう為のリクエスト– OSS文化ではよくある形式– 自分でバグフィックスしたブランチを送る• 要はマージのリクエストリポジトリ リポジトリPullしてください♡クソコードなんかマージしねぇよ
  58. 58. GITHUBを使った実践GIT
  59. 59. Git入門• このワークショップではWindows版の公式Gitクライアントを使っていることを想定• 主にCUIのGitBashを使うまだ入れてない人は大至急– http://git-scm.com/downloads
  60. 60. アプリの起動コンソール画面(GitBash)
  61. 61. Git入門• 今回の演習ではGitBashを中心に話をします• Windowsで他のクライアントを使ってる人• MacOSやLinux使ってる人、コマンドだけ把握してください
  62. 62. Git入門• WindowsのGitクライアントはGitBash以外にもTortoiseGitなどあるので各自調べてね☆
  63. 63. Git入門• まずは作業ディレクトリを作る– $ mkdir techfun && cd techfun• 作業ディレクトリの確認– $ explorer .
  64. 64. Git入門
  65. 65. 既存のリポジトリについて• 既にリモートリポジトリがある場合– $ git clone https://github.com/oppai/homo.sh
  66. 66. リポジトリを作ろう• 初期化作業をする
  67. 67. リポジトリを作る• 作業フォルダを作成・移動– $ mkdir hello && cd hello• 初期化作業をする– $ git initスクリーンショットはtechfunディレクトリの中で作業してるけど、helloディレクトリだと思ってください><
  68. 68. 変更の確認• 今までの状態を確認をしてみる– $ git status
  69. 69. ファイルの追加• Hello.txtというファイルを追加しよう
  70. 70. 変更の確認• ステータスの確認– $ git status
  71. 71. ファイルの追加• リポジトリにHello.txtを追加することを通知(ステージ)– $ git add Hello.txt• 確認をしてみる– $ git status
  72. 72. 内容をリポジトリに反映• ステージした内容をリポジトリに反映– $ git commit –m “init and add hello.txt”• なんか怒られた!
  73. 73. ユーザーの登録• メールアドレスの登録– $ git config --global user.email “your[at]email.com”• ユーザー名の登録– $ git config --global user.name “hoge”
  74. 74. 内容をリポジトリに反映• ステージした内容をリポジトリに反映– $ git commit –m “init and add hello.txt”• この作業をコミットと呼ぶ
  75. 75. 変更の確認• ステータス確認– $ git status• コミットログを確認– $ git log
  76. 76. ここまでのまとめリポジトリリポジトリを初期化する$ git init
  77. 77. ここまでのまとめリポジトリファイルを作業フォルダに追加するA
  78. 78. ここまでのまとめリポジトリファイルのステージ$ git add <file…> Aファイルをコミット出来る状態にするA
  79. 79. ここまでのまとめリポジトリ変更のコミット$ git commit –m “hogehoge”A変更をリポジトリに登録するA
  80. 80. 次の作業• ローカルリポジトリをリモートリポジトリへコピーする
  81. 81. リモートリポジトリの作成• GitHubのDashboardを開く
  82. 82. リモートリポジトリの作成• New Repositoryをクリック
  83. 83. リモートリポジトリの作成• Repository nameはhelloにしてください
  84. 84. リモートリポジトリの作成• 基本は書いている事そのまま
  85. 85. リモートリポジトリの作成• 基本は書いている事そのまま– $ git remote add origin your_url– $ git push -u origin masterGithubのidとpassが要求される
  86. 86. リモートリポジトリの作成• さっきのリポジトリのページを確認
  87. 87. ここまでのまとめ• リモートリポジトリの作成(GitHubで作成)• ローカルリポジトリをリモートリポジトリへコピーする(push)
  88. 88. 次の作業• バグフィックス用のブランチを作り、現行ブランチにPull Requestを送るPull Request
  89. 89. ブランチを作成これ
  90. 90. ブランチを作成• fix-01というブランチを作成する
  91. 91. ブランチを作成• masterブランチとfix-01ブランチがある
  92. 92. ブランチを変更• ブランチの確認– *は現在見ているブランチ– $ git branch –a• 情報を取得– $ git fetch– $ git branch –a
  93. 93. ブランチを変更• fix-01に使用するブランチを変更– $ git checkout fix-01– $ git branch –a
  94. 94. ファイルの更新• README.mdファイルを作成– マークダウン記法で書かれた説明書– HTMLやCSSのようにGitHub上で見やすい
  95. 95. ファイルの更新• 前回と同じように追加– $ git add README.md– $ git commit –m “add README.md”• コミットログを確認
  96. 96. ファイルの更新• もし間違ったコミットをしてしまった場合– 一つ前のコミットに戻す– $ git reset --soft HEAD^• 作業ファイルを綺麗にしたい場合– 最新のコミットの状態に戻す– $ git reset --hard HEAD
  97. 97. ブランチの変更• ブランチをmasterに切り替えてみる– $ git checkout master• ファイル構造が変わったのを確認– README.mdが消える– fix-01ブランチに戻しておこう
  98. 98. ブランチの変更• ブランチがfix-01か確認– $ git branch– もし違っていたらcheckoutしてfix-01に切り替える• リモートのfix-01にローカルのfix-01の変更をコピー– $ git push origin fix-01
  99. 99. 変更の確認
  100. 100. ここまでのまとめ• ブランチを確認– $ git branch [-a]• ブランチの変更– $ git checkout branch_name• ローカルの変更をリモートへ適用– $ git push origin branch_name• コミットを1つ戻す– $ git reset --soft HEAD^
  101. 101. PullRequestを送る「バグ直したんでMasterにマージさせてくださーーーい」
  102. 102. PullRequestを送る• 今回は自分自身に出しているが、通常他人のブランチに対して出す「バグ直したんでMasterにマージさせてくださーーーい」
  103. 103. PullRequestを送る• これにより変更点のレビューや議論をGitHub上で行い易くなっている「バグ直したんでMasterにマージさせてくださーーーい」
  104. 104. PullRequestを送る
  105. 105. PullRequestを送る
  106. 106. PullRequestを送る
  107. 107. PullRequestを送るちゃんと動くか確認しましょう!
  108. 108. ブランチのマージ• ブランチがmasterか確認– $ git branch– もし違っていたらcheckoutしてmasterに切り替える• リモートのfix-01の変更点をローカルのmasterにマージ– $ git pull origin fix-01
  109. 109. ブランチのマージ• ファイルが壊れていないか確認
  110. 110. PullRequestを処理• このPullRequestは大丈夫そう!
  111. 111. PullRequestを処理• GitHub上でマージして、コミットされた!
  112. 112. PullRequestを処理• GitHub上でマージして、コミットされた!PullRequest
  113. 113. PullRequestを処理• fix-01ブランチはもういらないから消す
  114. 114. PullRequestを処理• Masterに変更が適用されてるか確認
  115. 115. PullRequestを処理• ローカルでマージしたものを破棄– $ git reset --hard HEAD^• リモートサーバから新しく差分をコピーする– $ git pull origin master
  116. 116. まとめ• PullRequestを送る場合、専用ブランチを作成する– Githubからでもコンソールからでも作成可能– $ git checkout –b new_branch– $ git push origin new_branch• PullRequestを受け取ったらマージして動作確認する– $ git pull target_url target_branch• OKならマージをPush (Github上でマージ)– $ git push origin main_branch
  117. 117. 応用編時間があれば
  118. 118. git-reset• マニュアル便利– $ man git-reset• 広島Git勉強会 201306 - やりなおせるGit入門– http://blog.eiel.info/blog/2013/06/02/hiroshima-git/
  119. 119. git-reflog• [技術][Git]Git初心者が絶対に覚えておくべきコマンド– http://d.hatena.ne.jp/idesaku/20091106/1257507849• いざという時のためのgit reflog - Qiita [キータ]– http://qiita.com/items/e37c707938847aee671b
  120. 120. Bitbucket• Bitbucket– https://bitbucket.org/• 無料のプライベートリポジトリが無限に作れる!• もちろん公開リポジトリも作成可能• グループでの開発に人数規制がある• 日本語にほとんど対応してる• マジ優良サービス
  121. 121. .gitignore• 管理対象外のファイルを指定できる– .o,.swpなどのゴミファイルを管理対象外に• 開発環境に合わせて、作成すると便利– VisualStudioなら.objやbinフォルダなどを指定• ググるとたくさん出てくるので参考に
  122. 122. マークダウン記法• Markdown記法– マークダウン記法をマスターするためのサイト・チートシート・ツール。 http://bamka.info/3765/• GithubではいろんなところでMarkdown記法を使う• README.mdをMarkdownで書いておくとWebから見たときに綺麗に見れる• その他にもレビューなどにも使える• 最初はめんどくさいけど、覚えると便利
  123. 123. フォーク• 他人のリポジトリをコピーして自分のリポジトリの様に扱う機能– GitHubの機能で、人のリポジトリはいじれないので一度フォークし、ブランチを切って、PullRequestを送るのが良い。• フォーク元が削除されると一緒になって消える
  124. 124. Issue管理• GitHubについてるチケット管理システム– 詳しくはググって
  125. 125. Issue管理
  126. 126. Issue管理
  127. 127. Issue管理• GitHubについてるチケット管理システム– 詳しくはググって• PullRequestもIssueとして管理される– コミットコメントに#番号と付けるとそのIssueのコメントとしてコミットが表示されるので便利• $ git commit –m “#1 fix expressions”
  128. 128. もっと勉強したい• Git公式(日本語)– http://git-scm.com/book/ja/• LearnGitBranching (ヤバイ)– http://pcottle.github.io/learnGitBranching/• サルでも分かるGit入門– http://www.backlog.jp/git-guide/• 自分でガンガン使うのが近道!
  129. 129. 本日はお疲れ様でした

×