この記事を書くきっかけ
私はプログラミング初心者です。昨年から勉強を始めました。毎日少しずつ、技術書を読んだり、プログラムを書いたりして、3月にはじめてWebアプリをデプロイしました。具体的には、Pythonを利用してDjangoでWebアプリを開発しました。利用したサービスはPostgresql、Git(SourceTree)、GitHub、Nginx、Gunicorn、AWSなどです。
独自のアイディアを盛り込んだオリジナルのコードを書く努力をしましたが、GitやNginxなどのサービスとその設定方法はすべて書籍を参考にしました。そのため、それぞれのサービスへの理解に不安があります。そのサービスがどういうもので、どんなコマンドを使えばいいのかがわからなければ、トラブルが起きたときに対処できません。そこで、自分が利用したサービスを最低限でも理解したいと思い、記事にしました。今回はGitについて勉強したいと思います。
Gitとは
私たちは日々ファイルにいろいろな変更を加えています。ファイルを新規作成したり、下書きしたり、修正したり、加筆したり。このように、変化を加えられたファイルの状態のことを「バージョン」と言います。同じファイルの複数のファイルの状態(バージョン)を持っておくことをバージョン管理といいます。少しずつ変化した状態のファイルの情報を全て記録しておくのですね。
Gitは、このバージョン管理システムの一つです。いつ、誰が、どこを、なぜ修正したのか等、コードの修正履歴を記録するためのサービスです。ファイルの変更をバージョンとして記録することで、記録した地点へいつでも戻れる仕組みを提供しています。記録した地点の間を自由に行き来できるのはとても便利です。
一言で言えば、Gitはプログラム開発の作業履歴を記録するツールです。
Gitができること
- コードの変更を記録する (add, commit)
- 状態や変更箇所を確認する (log, diff)
- 前の状態を復活させる (reset, revert)
- 作業箇所を分岐する (branch, checkout)
- 作業結果を統合する (push, merge)
Gitのいいところ
- 古いバージョンから新しいバージョンのファイルまで管理できること
- 簡単に前のバージョンに戻せること
- 複数のメンバーでファイルや変更履歴をスムーズに共有できること
バージョン管理の基礎知識
- コミット
- コミットとは、ユーザーが好きなタイミングでファイルの状態を記録する操作のことです。その記録自体のことも「コミット」と呼びます。 この記録は「.git」という隠し領域に保存されます。
- リポジトリ(貯蔵庫)
- コミットを貯めていく場所のことです。
- リポジトリを作成する方法は、①リポジトリを新規作成するか、②既存のリポジトリをコピー(クローン)する2つの方法があります。
- リポジトリには、ローカルリポジトリとリモートリポジトリがの2種類のリポジトリがあります。
- ローカルリポジトリは、手元で使っているパソコンに作成する自分専用のリポジトリです。
- リモートリポジトリは、インターネットなどのネットワークのサーバー内にあるリポジトリです。 複数人で作業する時に、各人のローカルリポジトリと同期をとるために使用します。
- プッシュ/プル
- プッシュとは、コミットをローカルリポジトリからリモートリポジトリへ反映させることです。プッシュを行うことで、ローカルリポジトリ上のファイルや変更履歴が、リモートリポジトリへアップロードされます。
- プルとは、リモートリポジトリのコミットを、ローカルリポジトリへ反映させることです。プルを行うことで、リモートリポジトリ上のファイルや変更履歴が、ローカルリポジトリへダウンロードされます。
- ブランチ
- ブランチとは、変更履歴の流れを分岐させておくことです。アプリに新機能をつける作業のためのブランチを作っておけば、うまくいかなくなればブランチごと捨て、うまく行った場合はブランチを統合(マージ)することができます。
- クローン
- リモートリポジトリからローカルリポジトリを作成することです。誰かが作ったリモートリポジトリから、それと連携するローカルリポジトリを作成して作業するときにこの作業を行います。
- コンフリクト(競合)
- 複数人が同じファイルの同じ場所に変更を加えてしまうことです。
- プルリクエスト
- 共同開発者とブランチをマージしていいかを話し合うことです。分岐させて作成したファイルを統合させても問題がないかどうか、確認をするためのコミュニケーションゾーンです。
Gitでよく使うコマンド(ざっくり)
リポジトリの作成
コマンド | 内容 |
---|---|
git init | ローカルリポジトリを新規作成する |
コミットの作成
コマンド | 内容 |
---|---|
git add | ステージングエリアに仮登録する |
git commit | コミットを作成する |
git rm | Git管理下のファイルやディレクトリを削除する |
状態の確認
コマンド | 内容 |
---|---|
git status | ローカルリポジトリの状態を確認する |
git diff | 各エリアの違い(差分)を確認する |
git log | コミットの履歴を確認する |
状態の復元
コマンド | 内容 |
---|---|
git checkout | ワーキングディレクトリの変更を取り消す |
git reset | ステージングエリアに追加した変更をワーキングディレクトリへ戻す |
まとめ
Gitとは、変更した箇所やその情報を記録するためのサービス。一度変更しても前の状態に戻すことができる。複数人で開発するときに便利。シェルコマンドで操作する。