このブログ記事では、Git/GitHubを始めるために必要な基本的な概念を紹介します。
この記事を読んでいる皆さんのほとんどは、Git や GitHub という名前を聞いたことがあるでしょう。これらは、 プログラミングプロジェクトを進める上で最も重要で広く使われているツールの一つです。しかし、初心者の多くは、 「GitとGitHubとは何か?」「どのように動作するのか?」「どう使えばよいのか?」といった疑問を持つことがよくあるように見受けられます。 本記事シリーズでは、GitとGitHubをできるだけ分かりやすく解説し、基本的な使い方を習得することを目的とします。
【注釈】本記事シリーズの構成は、Net NinjaのGit & GitHub Tutorial for Beginnersのチュートリアルシリーズから大きく影響を受けています。 また、もし特定の概念が理解しにくい場合や、コマンドについてさらに詳しく学びたい場合は、公式本をチェックすることをおすすめします。
GitとGitHubとは?
Git は、Linuxカーネルの開発者である ライナス・トーバルズ(Linus Torvalds) によって作られた分散型バージョン管理システムです。 プロジェクトのファイルの変更を記録し、過去のバージョンをいつでも復元できるようにします。また、複数の開発者が同じプロジェクトに携わる際、 それぞれが独自のコードのコピーを管理しながら作業できる仕組みを提供します。
GitHub は、Gitをベースに構築されたプラットフォームで、クラウド上でプロジェクトをホスティングし、追加のコラボレーション機能を提供します。 GitHubは、WebベースのGUIを提供し、Gitの操作をより直感的にし、プロジェクトの管理や共有を容易にします。GitHubがなければ、 開発者はGitのリモートリポジトリをホスティングするために、自前のサーバーをセットアップする必要があります。
上記の説明は、あえて抽象的な表現に留め、全体像を把握しやすくしています。詳細については、GitとGitHubの仕組みを学びながら理解を深めていきます。 まずは、Gitの基本的な機能 から説明し、その後 GitHubの役割 について解説します。Gitを使い始めるには、公式サイトの手順に従ってインストールを行ってください。
Gitのバージョン管理
Gitは、 リポジトリ と呼ばれるプロジェクトフォルダを管理するためのツールです。Gitは、プロジェクトフォルダ内に.gitという隠しフォルダを作成し、
そこにバージョン管理に必要なすべての情報を保存します。新しいGitリポジトリを作成するには、まずmkdir repoコマンドを使いプロジェクトディレクトリを作成します。
次に、git initコマンドを実行してリポジトリ内に.gitを作成します。すると、Initialized empty Git repository in /repo/.git/のようなメッセージが表示されます。
Gitの機能はすべて、この.gitディレクトリ内の情報を読み書きすることで実現されています。
開発者は、 コミット(commit) と呼ばれる変更履歴を作成し、それを過去の状態に戻すことができます。
コミットの履歴は.gitフォルダに保存され、管理されます。また、コミットには開発者が識別しやすいようにコメントをつける必要があります。
しかし、コミットを作成する前に、開発者は ステージング(staging) という作業を行なわなければなりません。
ステージングとは、「どの変更を次のコミットに含めるか」 を選択するプロセスです。これにより、大きな変更を加えた場合でも、
小さな単位でコミットを作成できます。
ステージングとコミット
ステージングとコミットの概念を理解するために、リポジトリ内にa.txtとb.txtという2つのファイルを作成します。
その後、git statusコマンドを実行して、Gitがこれらのファイルを認識しているかを確認します。
すると、Untracked files:ようなメッセージが表示されます。赤字で表示されたファイルは、
変更があるがステージングされていないことを意味します。ファイルをステージングするには、
git add a.txtコマンドを実行します。再度git statusを実行すると、Changes to be committedというセクションが追加され、
ファイル名が緑色で表示されます。これは、ステージングが完了しコミットの準備が完了したことを意味します。
もし、ステージングしたファイルをコミット対象から外したい場合は、git rm --cached <filepath>コマンドで解除できます。
一度a.txtをステージングした後に、ファイルを編集してから再度git statusを実行すると、a.txtが再び赤字で表示されます。
これは、「ファイルが変更されたため、再ステージングが必要」であることを意味します。変更を取り消したい場合は、
git restore <filepath>コマンドを実行できます。ここでは、a.txtとb.txtを別々にコミットし、後でa.txtだけの状態に戻せるようにしたいです。
そのため、まずa.txtだけをステージングしてコミットします。コミットはgit commit -m "Added a.txt"のように実行できます。
メッセージはコミットの情報を表すものであることが理想です。
ただし、最初のコミットを行う前に、ユーザー名とメールをgit config --global user.name "<name>"とgit config --global user.email "<email>"
を用いて設定する必要があります。設定後、コミットを実行すると、[master (root-commit) <commit-id>] Added a.txtようなメッセージが表示されます。
これで、a.txtのコミットを完了できました。同様に、b.txtもステージングしコミットしてみましょう。その後、git logコマンドを実行すると、
これまでのコミット履歴を確認できます。これにより、コミットの作成者、コメント、コミットID、日付などが一覧表示されます。この情報をもとに、
過去の状態へ戻す方法については、次の記事で解説します。
結論
この記事では、GitとGitHubの基本的な特徴、Gitがどのように.gitファイルを使ってバージョン管理を行うか、そして基本的なコマンドを紹介しました。
次回の記事では、さらに重要なGitの概念やコマンドについて解説し、理解を深めていきます。
リソース
- Net Ninja. 2018. Git & GitHub Tutorial for Beginners #1 - Why Use Git?. YouTube.