代表的なリポジトリホスティングサービスのひとつが、GitHubです。
数あるリポジトリホスティングサービスの中でも最も利用者が多く、2008年にリリースされて以来、主に開発者から絶大な人気を集め、今では広範に普及しています。皆さんも、どこかで一度はGitという言葉を聞いたことがあるのではないでしょうか。
ただ、ひとくちにGitと言っても、厳密にはGitHubとGitは、全く別物です。Gitは、バージョン管理システムそのもののことです。Gitでは、リポジトリと呼ばれるデータの貯蔵庫にソースコードやテキストファイルなどを置いて、更新履歴ごとデータを管理します。このGitリポジトリを、Web上で扱えるようにしたWebサービスがGitHubです。
GitHubは、創業者の1人が、Gitで管理しているソースコードを友人と手軽に共有したいと思ったことがキッカケで開発されており、コマンド操作は勿論のこと、GUIで視覚的に操作をすることも可能です。アカウントを作成すれば、誰でも利用することができる為、近年ではエンジニアのみならず、雑誌や書籍のライター、編集者といった方が記事管理ツールとして使用しているケースも見受けられるようになりました。
AWSエンジニアは、ソフトウェアエンジニアよりもソースコードを書く機会は少ないとは思いますが、CloudFormationのバージョン管理にGitやGitHubを利用することが想定されますので、基本的なコマンド操作には慣れておきましょう。
~Git 基本操作~
先述の通り、GitHubはWebサービスである為、GUIによる視覚的な操作が可能です。しかし、実際の業務ではコマンド操作を行うことが一般的ですので、ここでは基本的な操作コマンドをいくつかご紹介し、コマンド操作に慣れて頂きたいと思います。
1.ローカルリポジトリの作成
自分のクライアント上に、ローカルリポジトリを作成します。ローカルリ ポジトリは、自分の作業用リポジトリです。管理しているソースコードな どに何らかの変更を加える場合は、まずこのローカルリポジトリ上で作業 し、その後、複数のメンバーと共有しているリモートリポジトリへ内容を 反映します。ローカルリポジトリは、以下のコマンドで作成できます。
$ git init
git initコマンドを実行すると、現在のディレクトリ内に「.git」という名前のサブディレクトリが作成され、その中に管理するリポジトリデータが配置されます。git initコマンドを実行する際、ディレクトリを指定することもでき、その場合は以下の形式でコマンドを実行します。
$ git init [指定するディレクトリのパス]
例えば、git init /Users/mygitとすると、Usersの下にあるmygitディレクトリに.gitディレクトリが作成されることになります。
2.リモートリポジトリの作成
複数のメンバーと共有するリモートリポジトリを作成します。
$ git init –bare –shared
git initコマンドに「–bare」オプションを付与すると、リモートリポジトリが作成でき「–shared」オプションを付与することで、作成したリポジトリに対するグループ書き込み権限を同時に追加することができます。
3.ファイルの作成や変更などをインデックスに追加する
インデックスとは、リポジトリにコミットする前準備として、一時的に ファイルを保存する場所のことです。Gitでは、作業ディレクトリ上でファイルに変更を加えた後、いきなりコミットするのではなく、コミット対象ファイルをインデックスに登録する仕組みになっており、これをステージングと呼びます。そうすることで、本当にコミットするべきファイルだけを選別したり、コミット予定のファイルを保護しておくことができます。
$ git add [ファイル名]
4.ブランチを作成する
Gitでは、管理しているファイルに修正を加える際、ブランチを作成してから、そのブランチ上で作業を行います。ブランチとは「枝」という意味ですが、その名の通り、リポジトリの変更履歴を枝分かれさせたものです。
実務では、複数人のチームで同じファイルを共有し、各自タスクに沿って内容を更新していきます。皆が同じファイルを同時に操作して障害が起きないよう、元のプロジェクトから分岐させたブランチを作成し、そのブランチ上で作業を行います。分岐させたブランチは、元のプロジェクトに統合されるまで、他のブランチに影響を与えない為、安心して作業を行うことができます。リポジトリへの初回コミット時、元となるmainブランチが作成される仕組みになっており、以下のコマンドを実行することで、このmainブランチから作業用のブランチを作成します。
$ git branch [作成するブランチ名]
5.ローカルリポジトリへファイルの変更を反映する
ステージングされたファイルのコミットを実行することで、まずローカルリポジトリにファイルの変更が反映されます。コミットを行う時は、コミットメッセージを付与しなければいけません。コミットメッセージとは、そのファイルが何故コミットされたのかを、誰が見てもわかるよう、簡潔に記載したメッセージです。一般的には、修正した箇所や内容などを記載します。
$ git commit -m [コミットメッセージ]
6.コミットした内容をリモートリポジトリへ反映する
ローカルリポジトリへの変更を実行した後、リモートリポジトリにも同じ様に変更内容の反映を行います。これをプッシュと呼びます。
$git push
プッシュする先のリモートリポジトリを指定することが可能ですが、上記の様に指定しなかった場合、上流ブランチとして設定されているリモートリポジトリのブランチに反映されます。プッシュ先を指定する場合は、以下のコマンドを使用します。
$git push [リモートリポジトリ名] [ブランチ名]
7.現在の状態を確認する
リポジトリの現在の状態を確認するコマンドは、非常によく使用します。業務では多くのファイルを扱う為、ステージングした後にコミットを忘れていた、ステージングしたと思っていたが出来ていなかったなど、抜け漏れが発生する場合もあります。特に慣れないうちは、何かファイル操作を行った後に、必ずその状態を確認する癖を付けておいた方が、問題の早期発見に繋がります。以下のコマンドを実行すると、変更されたファイルの状態を確認することができます。
$git status
8.既に存在するリポジトリを複製する
指定したディレクトリに、既存のリポジトリを複製することをクローンと呼びます。新しく参加したプロジェクトにリモートリポジトリが存在する場合などは、既存のリモートリポジトリのクローンを作業ディレクトリに配置して業務を行うのが一般的です。また、ローカルリポジトリのクローンを作成することも可能です。
$git clone [リポジトリ名] [複製を配置するディレクトリ]
9.リモートリポジトリの最新状態を取り込む
チームで業務を行っている以上、自分が何も手を加えていなくとも、リモートリポジトリの内容は日々変化していきます。最初にクローンしたリポジトリの内容が変化しているのに、いつまでも古い内容のままでいると、他の人が行った変更を反映しないままとなってしまい、業務に支障が生じます。誰かがリポジトリを変更した際には、その内容を自分の作業ディレクトリ内にも取込み、最新の状態を保つようにしましょう。
また、逆に自分がリポジトリを変更した際には、その変更を反映してもらえるようリクエストを行い、取り込んでもらいます。これをプルリクエストと呼びます。
$git pull [リモートリポジトリのパス] [ブランチ名]
10.作業しているブランチを切り替える
現在のブランチから、別のブランチへ移動して作業するといった場合、以下のコマンドを実行することでブランチを切り替える事ができます。
$git checkout [切替先のブランチ名]
11.コミットログを確認する
それまでに行ったコミット履歴を確認することができ、ログと呼びます。ログは、行ったコミットのコミットメッセージを一覧にすることで、その履歴がわかるというものです。以下のコマンドを実行すると、コミットメッセージの一覧が表示されます。
$git log
Gitの操作やコマンドは、それだけで1冊の書籍ができてしまうくらい、多く存在します。ここでは、ごく基本的なコマンドや操作のみのご紹介となりますが、必要に応じてGitに関する様々な書籍や記事を参考に、知識を深めてみましょう。