理系ジン

しばらくPythonに力を入れる予定です。

GitとGitHub

はじめに

Git(ギット)は、Linux開発者のLinusさんがLinuxソースコードを管理するために開発し始めたGPLv2の高性能な分散型バージョン管理システムです。GitHubは、代表的なGitのホスティングサービスです。

この記事では、GitやGitHubツールとサービスとチュートリアルGitHub Pagesを紹介します。

ツール

Gitのツールには、Gitの基礎となるGitコマンドプログラムと、それを利用しているGUIツールがあります。

主な無料のGUIツールに、GitHub製のGitHub DesktopGitHub for Windows / GitHub for Mac)とAtlassian製のSourceTreeがあります。

GitHub Desktopは簡易なGUIツールで、SourceTreeはGitのほとんどの操作を行えるGUIツールです。

GitHubなどのGitホスティングサービスに特有なForkやPull Requestといった操作は、基本的にはGUIツールではなくGitHubなどのWebサイトから行います。

理系ジンは、チュートリアルで学んでいるときは、ターミナル(コマンドライン)、GitHub Desktop、SourceTreeを全て起動し動作を比較しました。普段は、GitHubのWebサイトとSourceTree中心に使うのが良さそうに思います(Atomエディタも使います)。

他に、GitHubをターミナル(コマンドライン)から使う(と思われる)hubコマンドや、その他のGUIクライアント(Git - GUI Clients)がありますが、理系ジンは使いません。

Gitコマンドプログラム

Macの場合は、Gitコマンドプログラムはインストール済みです。

Windowsの場合は、Git for Windows(msysGit)をインストールすればGitコマンドプログラムとGit Bashという高機能なコマンド実行ツールもインストールされます。ただし、GitHub for WindowsSourceTreeをインストールすると一緒にGit for Windows(msysGit)やより高機能なツールがインストールされるので、別にインストールする必要はありません。

GitHub Desktop

GitHub Desktopは、GitHub製のGUIツールで、GitHub for WindowsGitHub for Macがあり、簡単にインストールできます。

簡易なGUIツールで、文字による操作内容の説明も少なめです。GitHubのWebサイトからGitHub Desktopを起動したり、GitHub DesktopからGitHubのWebサイトを開く程度の連携機能はあります。

SourceTree

SourceTreeは、Atlassian製のGUIツールで、簡単にインストールできます。高機能でGitのほとんどの機能が使え、グラフィカルに表示され、Git Flowワークフローにも対応しています。

SourceTreeを起動すると、コミットで使うユーザー情報(ユーザー名とメールアドレス)の入力を求められます。GitHubやBitbucketのユーザー情報も登録できます。

使い続けるには、上のユーザー情報とは別に、My Atlassianへの登録が必要です。SourceTreeのメニューから登録を行えます。

発展的なrevert、reset、cherry-pick、rebaseといった操作は、右クリックしてコンテキストメニューから行うことになると思います。

Atom

GitHub製のエディタAtomには、それなりにGitやGitHub向けの機能があります。

Atom標準のパッケージのGit関連機能には次のものがあります。

その他多数のGit向けのパッケージの一例:

サービス

Gitリポジトリホスティングやバグ管理システムや開発者のコラボレーション機能などを提供するサービスに、GitHubBitbucketなどがあります。

GitHub

GitHubは、パブリックなリポジトリは無料で、プライベート(非公開)なリポジトリは有料になります(Plans and pricing)。GitHub Pagesという静的なWebサイトを公開できる機能もあります。Markdownで大体の文書を記述できます。多くの著名なオープンソースソフトウェアがGitHubで管理されています。GitHub Enterpriseを使えば、GitHubを自分で用意したサーバーで動かせます。

Bitbucket

Atlassianの提供するBitbucketでは、パブリックでもプライベートでもリポジトリが作れ、5ユーザーまで無料です。静的なWebサイトを公開できる機能もあります。

チュートリアル

GitやGitHubチュートリアルを紹介します。

次の幾つかを実践したり読んだりすれば基本操作は理解できます。ターミナル(コマンドライン)、GitHub Desktop、SourceTreeとエディタを起動して動作確認すると理解が深まります。

Code School - Try Git

ブラウザ上でGitコマンドを入力して、ファイルや動作結果を確認しながら、GitとGitHubの基礎を短時間で学べます。簡単に内容を書きます。

  • 1.1.ディレクトリでgit initして初期化
  • 1.2. git statusで状態確認
  • 1.3.ディレクトリにファイルを追加してgit statusで状態確認
  • 1.4.git add <ファイル>でファイルをコミット対象のStaging Areaに置き追跡(tracking)
  • 1.5.git statusで状態確認
  • 1.6.git commit -m "メッセージ"でコミットしリポジトリに置く
  • 1.7.git add '*.txt'複数のファイルをまとめてStaging Areaに置き追跡
  • 1.8.git commit -m "メッセージ"でコミット
  • 1.9.git logでコミットの履歴表示
  • 1.10.GitHubリポジトリを作成し、git remote add <リモートリポジトリ名> <リモートリポジトリURL>で登録
  • 1.11.git push -u <リモートリポジトリ名> <ローカルリポジトリのブランチ名>で、ローカルのコミットをリモートリポジトリに置く(push)。<ローカルリポジトリのブランチ名>はデフォルトのmasterブランチ
  • 1.12.時間が経ち、他の人のリモートリポジトリの変更をgit pull <リモートリポジトリ名> <ローカルリポジトリのブランチ名>で取得
  • 1.13.git diff HEADで、最新のコミットを指すHEADとの変更確認
  • 1.14.別のファイルをgit add <別ファイル>で、Staging Areaに置く
  • 1.15.git diff --stagedで、今Stagedした変更を見る
  • 1.16.git reset <別ファイル>で、別ファイルをStaging Areaから外す
  • 1.17.git checkout -- <ファイル><ファイル>を前回コミットのものに戻す
  • 1.18.git branch <branch>でブランチ<branch>作成(機能追加やバグ修正用に、ブランチというコピーを作り分離してコミットでき、作業が完了したらメインのmasterブランチに統合(merge)できます。)
  • 1.19.git checkout <branch>で、<branch>ブランチに切り替え
  • 1.20.git rm '*.txt'で、不要なファイルを削除し、stageから取り除きます(むしろファイルのない状態をStageか)
  • 1.21.git commit -m "メッセージ"によりファイルの無い状態をコミット
  • 1.22.git checkout masterで、masterブランチに切り替えて戻る(チェックアウト)
  • 1.23.git merge <branch>で、<branch>ブランチを(チェックアウト中の)masterブランチに統合(merge)。この場合ファイルが全部削除。
  • 1.24.git branch -d <branch>で、不要になった<branch>ブランチを削除
  • 1.25.git pushで、リモートリポジトリに変更を反映

続けて、Git Realコースを学べます。

GitHub Bootcamp

GitHub Bootcampは、GitHubにログインすると表示されるチュートリアルです。簡単に説明します。

1.Set Up Git

ターミナルで、コミットに使う名前と(GitHubに設定したのと同じ)メールアドレスを設定する方法が書かれています。

GitからGitHubリポジトリに接続するには、HTTPSまたはSSHGitHubと認証する必要があります。

HTTPSを使う場合はGitにGitHubのパスワードをキャッシュし、SSHを使う場合はパソコンにSSHキーを生成し、公開鍵をGitHubに登録する必要があります。

SourceTreeやGitHub Desktopを使う場合は設定不要かもしれません。Macの場合は気づいたらSSHキーが設定されていました。理系ジンはそれを削除して別に作ったのを設定しました。

2.Create A Repo

GitHubリポジトリを作るには、GitHubアカウントを作成し、GitHubの画面の右上の+>[New Repository]をクリックして、適当に入力してリポジトリを作成します。プロジェクトの説明やインストール方法や使い方などを記述するREADMEファイル、Gitリポジトリで管理しないファイルやディレクトリを設定する.gitignoreファイル、ライセンスファイルを追加できます。

ブラウザからファイルを変更しコミットする方法が書かれています。

3.Fork A Repo

GitHubにある他人のリポジトリForkして、自分のGitHubリポジトリにコピーを作り自由に扱えるようになります。バグ修正などを行った時は、リポジトリのオーナーにPull Requestして、オーナーが気に入ればPullしてリポジトリに取り込んでくれます。

サンプルリポジトリが用意されており操作を試すことができます。ここでは、ターミナル(コマンドライン)での操作が書かれています。GitHub DesktopやSourceTreeをインストールしておくとGUIで簡単に操作できるので、この解説は読むだけでいいと思います。解説は、URLの指しているのが、他人のGitHubリポジトリか、Forkした自分のGitHubリポジトリかに注意するといいです。

Syncing a forkには、ターミナル(コマンドライン)で、ローカルへリモートリポジトリをfetchしてmergeする方法が書かれています。これも、SourceTreeやGitHub DesktopではGUIからできます。

次のステップとして、新機能のブランチを作ること、自分の変更をオリジナルリポジトリに取り込んでもらうようにPull Requestすること、他のリポジトリを見つけることに言及されています。

4.Be Social

他人の活動を追うFollow、プロジェクトのWatch、Pull Request、Issue、Organization、プロジェクトの探索について説明されています。

GitHub Guides

色々な資料があります。GitHub BootcampをGitHub Desktopで操作するような内容が多いです。簡単に説明します。

Understanding the GitHub Flow

  • GitHub Flowはブランチを基礎とした軽量のワークフロー
  • masterブランチは常にデプロイされる
  • 他のブランチは追加機能やバグの意味がわかるように命名
  • コミットメッセージは重要
  • 追加・修正はPull Requestを申請して議論してmerge

Getting your project on GitHub

自分のプロジェクトをGitHubで公開する方法

  • GitHubの概要
  • GitHub Desktop
  • GitHub Desktopでプロジェクトを設定しコミット
  • GitHub Desktopでプロジェクトを公開
  • GitHub DesktopでPullやClone

Contributing to Open Source on GitHub

  • プロジェクトの見つけ方
  • 典型的なプロジェクトの説明
  • プロジェクトへの貢献の仕方

Hello World

GitHubでプロジェクトを作り、Branchを作り、修正し、Pull Request

  • リポジトリ作成
  • Issue開設
  • Branch作成
  • Commit
  • Pull Request
  • Pull RequestのMerge

Forking Projects

GitHubで見つけたプロジェクトにForkして貢献

  • GitHubのプロジェクトのページからFork
  • GitHubをForkした自分のページからGitHub Desktopを起動してclone
  • 変更をGitHub DesktopでCommitし、[Sync]クリックでGitHub上のForkした自分のページへPush
  • GitHubのプロジェクトをForkした自分のページからPull Request

Be Social

GitHubでの人やプロジェクトとの関わり方

  • 人をFollow
  • プロジェクトをWatch

Making Your Code Citable

GitHubリポジトリにDigital Object Identifierを割り当てアカデミックな文献から引用可能に

Mastering Issues

Issueのマスター

Mastering Markdown

Markdownのマスター

Mastering Wikis

Wikiのマスター

Getting Started with GitHub Pages

アカウント用のGitHub Pagesの始め方(プロジェクト用のGitHub Pagesの解説はGitHub Pagesを参照)

リポジトリ<username>.github.ioリポジトリを作成してリポジトリのページで[Settings]タブに行き[Automatic Page Generator]をクリックして設定ページに行き[Continue to layouts]をクリックしてテーマ選択のページに行きテーマを選択して[Publish page]をクリックしてページを作成

GitHub<username>.github.ioリポジトリのmaster branchのページから直接index.htmlなどを修正してCommitも可能

AtlassianのGitチュートリアル

Gitコマンドのチュートリアルです。Gitコマンドの図解付きの詳細な動作を知りたい場合に参考になります。SourceTreeのようなGUIツールの解説はされていません。

  • 1: Git の基本
    • git initgit clonegit configgit addgit commitgit statusgit log
  • 2: Git の変更を元に戻す
    • git checkoutgit revertgit resetgit clean
  • 3: Git ブランチ
    • git branchgit checkoutgit merge
  • 4: Git における履歴の書き換え
    • git commit --amendgit rebasegit rebase -igit reflog
  • 5: リモート Git リポジトリ
    • git remotegit fetchgit pullgit push

AtlassianのGitワークフローのチュートリアル

様々なGitワークフローなどのチュートリアル(中央管理型ワークフロー、フィーチャーブランチワークフロー、Gitflowワークフロー、フォーク型ワークフロー、プルリクエスト)

BacklogのサルでもわかるGit入門の入門編

図解入りの分かりやすい解説です。操作方法は、Mac(SourceTree使用)、Windows(TortoiseGit使用)、コンソールの解説があります。

  • Gitの基本:バージョン管理、リポジトリ、コミット、ワークツリー(ワーキングディレクトリ)やインデックス(Stage)の解説
  • チュートリアル1 Gitの基本
    • Gitのインストール
    • 初期設定:ユーザー名とメールアドレスの設定
    • 新しいリポジトリを作成する
      • git init
    • ファイルをコミットする
      • git statusgit add <file>git commit -m "<コメント>"git log
  • リポジトリの共有
  • チュートリアル2 リポジトリの共有
    • リモートリポジトリをBacklog上に作成する
    • リモートリポジトリにプッシュする
      • git remote add <リモートリポジトリ名> <リモートリポジトリのURL>git push <リモートリポジトリ名> <ブランチ名>
    • リモートリポジトリをクローンする
      • git clone <リモートリポジトリのURL> <ディレクトリのパス>
    • クローンしたリポジトリからプッシュする
      • git add <追加ファイル>git commit -m "コメント"git push
    • リモートリポジトリからプルする
      • git pull <リモートリポジトリ名> <ブランチ名>git log
  • 変更履歴の統合
    • 変更履歴のマージ
    • 競合の解決
  • チュートリアル3 変更履歴の統合
    • 競合状態でプッシュする
    • 競合を解決する

BacklogのサルでもわかるGit入門の発展編

主にブランチについての解説です。操作方法は、コンソールを使った解説です。チュートリアル3ではサンプルファイルを利用して実践できます。

  • ブランチ
    • ブランチとは
    • ブランチの運用
    • ブランチの切り替え:HEAD, stashの解説
    • ブランチの統合:merge, rebaseの解説
    • トピックブランチと統合ブランチでの運用例:Git Flowの紹介
  • チュートリアル1 ブランチを使ってみよう!
    • 0: 前準備
    • 1: ブランチを作成する:git branch <ブランチ名>
    • 2: ブランチを切り替える:git checkout <ブランチ名>
    • 3: ブランチをマージする:git merge <ブランチ名>
    • 4: ブランチを削除する
    • 5: 並行で作業する
    • 6: マージでの衝突を解決する
    • 7: rebaseでマージする:git resetgit rebase
  • リモートリポジトリ
    • pull
    • fetch
    • push
  • タグ
  • チュートリアル2 タグを使ってみよう!
    • 0: 前準備
    • 1: 軽量タグを追加する:git tag <タグ名>
    • 2: 注釈付きタグを追加する
    • 3: タグを削除する
  • コミットの書き換え
    • 直前のコミットを修正する
    • 過去のコミットを打ち消す
    • コミットを捨てる
    • コミットを抜き取る
    • コミットの履歴を書き換える
    • ブランチ上のコミットを一つにまとめてマージする
  • チュートリアル3 コミットを書き換えよう!:サンプルファイルをダウンロードしてコミットの書き換えのコンソール操作を実践できます。
    • 1: commit --amend
    • 2: revert
    • 3: reset
    • 4: cherry-pick
    • 5: rebase -i でコミットをまとめる
    • 6: rebase -i でコミットを修正する
    • 7: merge --squash

BacklogのサルでもわかるGit入門の逆引きGit

やりたい事から方法を調べる逆引きリファレンスです。操作方法は、コンソールを使った解説です。

GitHub Pages

GitHubには、アカウント用とリポジトリ用に静的なサイトを表示する機能GitHub Pagesがあります。Bitbucketにも同様の機能があります。

GitHub Pages

アカウント用のサイト(http://username.github.io)やリポジトリ用のサイト(http://username.github.io/repository)の作成方法

  • ユーザーや組織アカウント用のサイトを次のように作成
  • プロジェクト用のサイトを次のように作成(gh-pagesブランチが利用されます)
    • プロジェクトのリポジトリのページの[Settings]タブから[Automatic Page Generator]をクリックして設定ページに行き[Continue to layouts]をクリックしてテーマ選択のページに行きテーマを選択して[Publish page]をクリック
  • プロジェクト用のサイトを次のように作成
    • gh-pagesブランチを作成し[Settings]タブからDefault branchをgh-pagesにしてindex.htmlファイルを作成しコミット

他に、Jekyllでブログを作成する方法、URLをカスタマイズする方法、基本的な情報へのリンクがあります。

静的サイトジェネレータ一

Jekyllや他の静的サイトジェネレータ一を利用して、GitHub Pagesでサイトを作る方法があります。

Static Site Generatorsにリストがあります。★の数の上位は、Jekyll、Octopress、Pelican、Middleman、Hexo、Metalsmith、Hugoです。面白そうな感じがしますが未調査です。

参考資料

予定

寒くなって布団に潜り込んで寝てしまったのもあり、ずいぶん更新間隔が空いてしまいました。今月は、それなりに頑張りたいです。

次回は、HTML5アプリ開発計画の記事を予定しています。

また、アイコンデザインの若干の変更や過去の記事の段落のサイズを大きくする(Markdownの####にする)などの細かな修正を行うつもりです。(20141208訂正:timeline-minimalテーマでは見易くないので、元通りに###中心で利用することにします。)