GitとGitHub
はじめに
Git(ギット)は、Linux開発者のLinusさんがLinuxのソースコードを管理するために開発し始めたGPLv2の高性能な分散型バージョン管理システムです。GitHubは、代表的なGitのホスティングサービスです。
この記事では、GitやGitHubのツールとサービスとチュートリアルとGitHub Pagesを紹介します。
ツール
Gitのツールには、Gitの基礎となるGitコマンドプログラムと、それを利用しているGUIツールがあります。
主な無料のGUIツールに、GitHub製のGitHub Desktop(GitHub 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 WindowsやSourceTreeをインストールすると一緒にGit for Windows(msysGit)やより高機能なツールがインストールされるので、別にインストールする必要はありません。
GitHub Desktop
GitHub Desktopは、GitHub製のGUIツールで、GitHub for WindowsとGitHub 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 Diff:エディタの左端にDiff情報表示
- Language Git:Gitのシンタックスハイライト
- Open On GitHub:ファイルをGitHubで見る
その他多数のGit向けのパッケージの一例:
- Gist It:AtomでGist作成
- Git History:旧バージョンを表示
- Git Tab Status:Git Statusによりタブに色
- Gitignore Snippets:.gitignoreのテンプレートを出力
サービス
Gitリポジトリのホスティングやバグ管理システムや開発者のコラボレーション機能などを提供するサービスに、GitHubやBitbucketなどがあります。
GitHub
GitHubは、パブリックなリポジトリは無料で、プライベート(非公開)なリポジトリは有料になります(Plans and pricing)。GitHub Pagesという静的なWebサイトを公開できる機能もあります。Markdownで大体の文書を記述できます。多くの著名なオープンソースソフトウェアがGitHubで管理されています。GitHub Enterpriseを使えば、GitHubを自分で用意したサーバーで動かせます。
Bitbucket
Atlassianの提供するBitbucketでは、パブリックでもプライベートでもリポジトリが作れ、5ユーザーまで無料です。静的なWebサイトを公開できる機能もあります。
チュートリアル
次の幾つかを実践したり読んだりすれば基本操作は理解できます。ターミナル(コマンドライン)、GitHub Desktop、SourceTreeとエディタを起動して動作確認すると理解が深まります。
- Code School - Try Git:ブラウザでコマンド入力
- GitHub Bootcamp:GitHubにログインすると表示されるチュートリアル
- GitHub Guides:GitHubのガイド
- AtlassianのGitチュートリアル
- AtlassianのGitワークフローのチュートリアル
- BacklogのサルでもわかるGit入門の入門編
- BacklogのサルでもわかるGit入門の発展編
- BacklogのサルでもわかるGit入門の逆引きGit
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またはSSHでGitHubと認証する必要があります。
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 init
、git clone
、git config
、git add
、git commit
、git status
、git log
- 2: Git の変更を元に戻す
git checkout
、git revert
、git reset
、git clean
- 3: Git ブランチ
git branch
、git checkout
、git merge
- 4: Git における履歴の書き換え
git commit --amend
、git rebase
、git rebase -i
、git reflog
- 5: リモート Git リポジトリ
git remote
、git fetch
、git pull
、git push
AtlassianのGitワークフローのチュートリアル
様々なGitワークフローなどのチュートリアル(中央管理型ワークフロー、フィーチャーブランチワークフロー、Gitflowワークフロー、フォーク型ワークフロー、プルリクエスト)
BacklogのサルでもわかるGit入門の入門編
図解入りの分かりやすい解説です。操作方法は、Mac(SourceTree使用)、Windows(TortoiseGit使用)、コンソールの解説があります。
- Gitの基本:バージョン管理、リポジトリ、コミット、ワークツリー(ワーキングディレクトリ)やインデックス(Stage)の解説
- チュートリアル1 Gitの基本
- Gitのインストール
- 初期設定:ユーザー名とメールアドレスの設定
- 新しいリポジトリを作成する
git init
- ファイルをコミットする
git status
、git add <file>
、git commit -m "<コメント>"
、git log
- リポジトリの共有
- チュートリアル2 リポジトリの共有
- 変更履歴の統合
- 変更履歴のマージ
- 競合の解決
- チュートリアル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 reset
、git 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です。面白そうな感じがしますが未調査です。
参考資料
- Git
- About:機能の説明
- Documentation:Reference, Book, Videos, External Links
- Downloads
- Git for Windows(msysGit)
- GitHub
- GitHub Bootcamp:GitHubにログインすると表示されるチュートリアル
- GitHub Help
- GitHub Glossary
- GitHub for Windows / GitHub for Mac
- GitHub Guides:資料
- Plans and pricing
- GitHub Enterprise
- Resources:Videos, PDF(Cheat Sheet等), Guides
- GitHub Pages
- hub・command-line wrapper for git
- Atlassian / 日本語
- SourceTree / 日本語
- Bitbucket / 日本語
- Gitチュートリアルとトレーニング
- Gitチュートリアル:Gitコマンドによる基本操作の解説
- Gitワークフロー:Gitの利用パターン、Branch、Fork、Pull Request
- Backlog
- サルでもわかるGit入門:コマンドライン・SourceTreeを使った解説
- Code School - Try Git, Git Real:擬似的に操作して学習
- Windowsユーザー向けGit入門:Codezine
- A successful Git branching model / 日本語:Git Flow
- GitHub Flow - Scott Chacon / 日本語:GitHub Flow
予定
寒くなって布団に潜り込んで寝てしまったのもあり、ずいぶん更新間隔が空いてしまいました。今月は、それなりに頑張りたいです。
次回は、HTML5アプリ開発計画の記事を予定しています。
また、アイコンデザインの若干の変更や過去の記事の段落のサイズを大きくする(Markdownの###
を#
にする)などの細かな修正を行うつもりです。(20141208訂正:timeline-minimalテーマでは見易くないので、元通りに###
中心で利用することにします。)