GitHub の使い方
今年の都知事選では,GitHub をうまく用いた選挙活動が盛り上がりました.本ブログのように,個々人が情報発信をするプラットフォームを自分で持つことの意義は,今後ますます増していくでしょう(Note や Qiita などの文章共有サービスはいつ終了するかわかりません).その際,GitHub は極めて便利なツールになります.法律家の方など,GitHub をはじめとして技術に詳しくなかった方も,これを機に GitHub に入門するためのチュートリアルをここにまとめていきたいと思います.
1 GitHub とは何か
1.1 一言で言うと……
まず,GitHub と Git は別物です.一言で言えば,GitHub がコードに特化した Google Drive,Git が Google Document にあたります.
1.2 バージョン管理システム
Gitとは,.git
に「スナップショットのストリーム」を保存する形で動く分散型(全てのユーザーがデータベース=リポジトリのミラーリングを持つ形)のバージョン管理システムである.ここに独自の形式でsnapshotが保存される.
1.3 変更の統合機構
Gitで2つのブランチを統合する方法は3つある.なお,git pull
はgit fetch
とgit merge
(またはgit rebase
)の合成である.
1.3.1 fast-forward
2つのブランチに違いがあると言っても,「リモートのmain
ブランチがローカルのmain
ブランチよりも進んでいる」などの単純な状況である場合は,ただブランチのポインターを「前に進める」だけで良い.
基本,一人で開発しており,別の環境から作業を再開したい場合や,レポジトリが単一のブランチのみで開発が進んでいる場合などはこれで十分.
git fast-forward
というコマンドがある訳ではなく,ブランチに分岐がない場合にgit merge
を実行した際に自動的に起こる.
1.3.2 rebase
コミットを「基底状態(base)からの差分」だとすれば,このコミットを,別のブランチに取り込んで足並みを揃える際にはrebase
が行われる.
他のブランチに適用したいところのコミットが存在するブランチに移動し,適用したいブランチ(例えばtarget
ブランチ)に対して,
git rebase target
と実行する.ローカルでrebase
の引数を省略した場合はrefs/heads/main
に適用される.
1.3.3 merge
2つのブランチの変更を組み合わせて,1つの新しいブランチにまとめる.
git merge
により自動で統合を試みるが,失敗した場合は手動で解決する必要あり.
1.4 参考
2 仕組み
2.1 .git
ディレクトリの中身
HEAD
: 現在チェックアウトしているブランチを指します。これは通常、最新のコミットを指すリファレンスです。config
: プロジェクト固有のGit設定を含みます。これには、リモートリポジトリのURL、ブランチの設定などが含まれます。description
: GitWebプログラムで使用される説明ファイルですが、一般的なGit操作では使用されません。hooks/
: クライアント側またはサーバー側のフックスクリプトを格納するディレクトリです。これらのスクリプトは、特定のイベント(例えばコミットやプッシュ)が発生した際に自動的に実行されます。info/
:.gitignore
ファイルに追跡しないパターンをグローバルに除外するためのファイルを含みます。objects/
: すべてのコンテンツ(コミット、ツリー、ブロブなど)が格納されるディレクトリです。これらはGitによって一意のハッシュ値で識別されます。refs/
: コミットオブジェクトを指し示すポインター(ブランチ、タグ、リモートなど)を含むディレクトリです。index
: ステージングエリアの情報を格納するファイルです。これは、git add
などのコマンドでステージングされた変更を追跡します。