GitHub の使い方

Tech
著者

ぷに Draft

日付

7/16/2024

はじめに

今年の都知事選では,GitHub をうまく用いた選挙活動が盛り上がりました.本ブログのように,個々人が情報発信をするプラットフォームを自分で持つことの意義は,今後ますます増していくでしょう(Note や Qiita などの文章共有サービスはいつ終了するかわかりません).その際,GitHub は極めて便利なツールになります.法律家の方など,GitHub をはじめとして技術に詳しくなかった方も,これを機に GitHub に入門するためのチュートリアルをここにまとめていきたいと思います.

1 GitHub とは何か

1.1 一言で言うと……

まず,GitHub と Git は別物です.一言で言えば,GitHub がコードに特化した Google Drive,Git が Google Document にあたります.

  • GitHub = コードに特化した Google Drive
  • Git = コードベースで動く,ローカル上の Google Drive

ローカル上の Google Drive のスクリーンショット

1.2 バージョン管理システム

Gitとは,.gitに「スナップショットのストリーム」を保存する形で動く分散型(全てのユーザーがデータベース=リポジトリのミラーリングを持つ形)のバージョン管理システムである.ここに独自の形式でsnapshotが保存される.

Workflow

1.3 変更の統合機構

Gitで2つのブランチを統合する方法は3つある.なお,git pullgit fetchgit 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 などのコマンドでステージングされた変更を追跡します。