Git

2016-05-06 TSG 2016年度初心者分科会 第1回講義

はじめの一歩

@hakatashi

Agenda

  • Gitって何?
  • なぜGitを使うの?
  • 実践編1: Try Git
  • 実践編2: TSGウェブサイト編集

自己紹介

博多市(hakatashi)

  • 理科一類2年
    • 精神と時の部屋の影響により
      駒場生活も4年目
  • ピクシブ株式会社でバイト中
  • 好きなもの
    • Web
    • OSS
    • JavaScript
  • 最近オレンジジュースにハマる
    • 購買のポンジュースはいいぞ

巨人の肩

インターネット上で読める優秀なGit入門講座たち

  • サルでもわかるGit入門
    • 定番。イラスト豊富で基本的なことからちょっと突っ込んだことまでだいたいわかる。
  • Pro Git
    • Gitの公式ガイド。最も正しく理解するならこれ。
  • いつやるの?Git入門
    • おもにSVNとの違いからGitの仕組みを紹介。
  • こわくない Git
    • Git初心者から中級者へのステップアップ。つまずきやすいブランチとマージの基本の仕組みを解説。

今回の講義で

カバーすること

  • Gitとは何か
  • ​なぜGitを使うのか
  • Gitの基本的な考え方
  • GitHubとの関係と使い方

今回の講義で

カバーしないこと

  • Gitの細かい使い方
  • 他のVCSとの違い
    • 分散型の利点など

Gitって何?

What is “Git”?

Gitって何?

バージョン管理システム(VCS)の1つ

  • CVS
  • Subversion(SVN)
  • Mercurial
  • etc...

Gitのバージョン管理

  • Gitは管理する対象のディレクトリ(フォルダ)全体の歴史を保存する仕組み
    • 管理する対象のディレクトリをリポジトリと呼ぶ
  • ユーザーは好きなタイミングでリポジトリの状態をGit上に保存する
    • 保存されたリポジトリの状態ひとつひとつをコミットと呼ぶ
    • またこの保存する行為をコミットすると呼ぶ

Gitの歴史は分岐する

  • Gitの最大の特徴は歴史を分岐させる仕組みを持っていること
  • 分岐した歴史は好きなタイミングで元の歴史と統合することができる
    • 分岐したコミットの先端をブランチ、ブランチを統合することをマージと呼ぶ

なぜGitを使うの?

Why “Git”?

1. 世界中で使用されるVCSとして

  • プログラムを書く上で、どの変更いつ行ったかを把握することは重要
    • 変更の差し戻し
    • バグの混入時期推定
    • リリース管理
    • などなど……
  • それを叶えるVCSの中でも、Gitは世界中で活発に使われているデファクトスタンダードなソフトウェア
    • 機能的にも非常に洗練されている
    • 小さなプロジェクトから巨大なプロジェクトまで手広く使える

2. 共同開発の基盤として

  • ブランチとマージの機能を用いると、1つのプロジェクトにおける複数人での共同作業が容易になる
    • それぞれのブランチは独立している
      • マージするまでは各人が好き勝手にコミットできる
  • Gitは他のVCSと比較してブランチ操作が軽量
    • 軽い気持ちでほいほいブランチを作ることができる
    • マージ機能も優秀

3. GitHubへの参加手段として

  • GitHubはGitリポジトリとしてプログラムをホスティングするウェブサービス
    • 同時に、世界中のオープンソース開発を支える相互コミュニティでもある
  • 近年は何かしらのプログラムを公開する際にはGitHubにアップロードするのが普通のこと
    • Gitが使えなくてはGitHubも使えない
  • 単に自分一人だけのプログラムを書くだけでなく、オープンソース開発にも視野を広げてほしい

実践編1: Try Git

Practice 1: Try Git

ここでは実践編として、

ブラウザ上からGitコマンドを使いながら

Gitの基本を習得する、Try Git というサイトを使って

Gitの基本を解説していく。

にアクセス。

なお、手元のGitコマンドを使って

同じ手順を追っていく方法も解説するので、

手元のGit環境を使いたい人はそちらでも構わない。

実践編2: TSGウェブサイト

Practice 2: TSG Website

TSGのウェブサイトのソースコードも、

例に漏れずGitで管理されており、

リモートリポジトリはGitHub

ホスティングしている。

今回は、実際にTSGのウェブサイトのソースコードに触れ、

  • 自分のGitHubアカウントにForkし、
  • 「自分を名簿に追加する」という機能を実装し、
  • Pull Request を作成し、
  • Mergeを見届ける

という手順で GitHub Flow を経験する。

1. GitHub上のTSGのウェブサイトの
ソースコードにアクセスする

※プライベートリポジトリなのでTSGの
​GitHubグループに加入してないと見れません

2. Forkする

右上の「Fork」ボタンをクリック

アカウント選択画面が出たら自分の個人アカウントを選択

3. 名簿に自分を追加する
(手元で作業する場合)

  1. Forkしたリポジトリを手元にcloneする
    • git clone https://github.com/xxx/jekyll-tsg.git
  2. _data/member.yamlを適当なエディタで編集する

    • 他の列を見ながら先頭に自分の情報を追加する

  3. _data/member.yamlをステージングして、コミットする

    • masterでOK

    • コミットメッセージはとりあえず英語で

      • “Add xxx in member.yaml” とかそんな感じ

  4. リモートリポジトリにpushする

    • たぶんGitHubのユーザー名とパスワードを聞かれるので、入力する

    • ニ段階認証を設定している人は個別に相談

3. 名簿に自分を追加する
(GitHub上で作業する場合)

  1. Forkした先のリポジトリで、_data/member.yamlを開く
  2. 右上の鉛筆マーク(Edit this file)をクリック
  3. 編集する
    • 他の列を見ながら先頭に自分の情報を追加する
  4. コミットする

    • コミットメッセージはとりあえず英語で入力

      • “Add xxx in member.yaml” とかそんな感じ

    • Commit directly to the master branch.を選択

4. Pull Request を送信する

  1. Forkしたリポジトリのトップページに戻る
  2. ファイルリストの右上の Pull Request をクリック
    • その左には This branch is 1 commit ahead of tsg-ut:master. とか表示されてるはず
  3. 変更内容を確認して、Create Pull Request をクリック
    • うまくいっていれば、さっき追加した4行が緑色で表示されるはず 
  4. Pull Request の内容を記入して、送信
    • ​タイトルは日本語でも英語でも。たぶん変更しないのが楽
    • 本文には、この Pull Request の意図などを記入する
      • 初心者分科会での練習で行った変更であることを書いておこう

5. Merge されるのを待つ

たぶん博多市が必死で

送られてきた Pull Request をマージしていきます。

しばらく待っててね

お疲れさまです!