Git用語解説
Git
Gitとは、バージョン管理システムです。
Gitを用いることにより、ファイルごとの変更履歴を保存してファイルの変更履歴を管理することが可能です。
ファイルの変更履歴を残すことにより、過去の変更履歴をさかのぼって編集することができたりコードを見比べることが可能です。
また複数人で開発する場合にだれがどこをどのように変更したかが一目でわかる点やコミットメッセージによる編集の意図の伝達が可能である点、同じファイルを同時に編集することが可能である点など様々な利点があります。
バージョン
バージョンとはプロジェクトの変更履歴のことを指すことがほとんどです。
具体例を挙げるとソフトウェアのバージョンがあります。ソフトウェアのバージョンが上がると新機能が追加されるかと思いますが、これはひとつ前のバージョンから新しい要素が追加されたことを指します。
リポジトリ
リポジトリとは、ファイルやデータを管理する場所の事を指します。
簡単に表現すればリポジトリはファイルを管理する司令部のような場所です。
リポジトリとわざわざ表現するときはGitなどのバージョン管理ソフトによって管理する場所を指していることがほとんどです。リポジトリには変更履歴やブランチなどの情報を管理しているファイルが存在します。
Windowsの隠しファイル表示機能をONにするとみることができると思いますが、Gitが使用されているフォルダ内には「.git」と書かれたフォルダがあるかと思います。これがリポジトリで、この中にGitで管理するのに必要なデータが格納されています。
リポジトリの名前は通常、一目見てそのプロジェクトが何をしているのかわかりやすいものが望ましいです。
ローカルリポジトリという、自分のパソコンやUSBメモリなどで扱えるリポジトリと、リモートリポジトリというGithubをはじめとしたクラウド上にあるデータを扱うリポジトリがあります。
ローカルリポジトリはリポジトリが手元にある状況でしか編集ができませんが、リモートリポジトリはその名の通りリモートで操作が可能です。
Github
Githubとは、Gitのローカルリポジトリをアップロードし、編集することができるサービスです。Git単体とは違い、Githubにアップロードしたデータを複製して編集することが可能です。
Githubの強みはGoogleドライブのようにファイルデータのバックアップをすることができるところにあります。
複数人で開発している場合やほかのパソコンにデータを移したい場合などにネット環境さえあればGithubからデータを複製できるので、USBメモリに保存して移動させたり、わざわざ開発者からデータを直接受け渡しする必要がなくなります。
.gitignore
.gitignoreは「gitで操作したくないファイル・フォルダ・拡張子」を指定するファイルです。
「*.log」は.logという拡張子のファ イルを無視するものです。
「project/」はprojectというフォルダの中身は無視するものです。
「project/test.txt」はprojectファイルの中のtest.txtを無視するものです 「file.txt」はfile.txtという名前のファイルを無視するものです。
「!help.txt」はhelp.txtは無視しないでという例外処理です。
コミット
コミット(英語表記::commit)は、リポジトリに変更データを書き込み、ファイルを更新することです。
ファイルごとに変更された部分をリストアップして、ファイルの内容を更新し、コミットメッセージと呼ばれる変更内容のメモをつけてデータを保存することです。
本質的には異なりますが、やってること自体はアップロードと同じです。
変更のステージング(Staging)
変更のステージング(英語表記::Staging)は、単純に変更のステージとも呼ばれます。
変更されているファイルを、コミットしたい場合に変更のステージを行います。
例えるならばロケットを発射台に置くのが変更のステージ、発射するのがコミットです。
VSCodeでGitを扱う場合、VSCode側が勝手に変更のステージをしてくれるので、VSCodeでは変更のステージ=コミットの認識でも生きていけます。
ブランチ(branch)
ブランチ(英語表記::branch)とは、メインで作業している線から分岐させて作業をする場所です。
mainブランチをおおもととして、mainブランチの内容をmainブランチに影響しないように別の場所で作業するために作成します。
また複数人で作業をしている場合、例を挙げるとAさんBさんで同じファイルを編集している場合Aさんの編集した部分とBさんの編集した部分は異なるので、最新のバージョンがAさんverとBさんverで存在することになります。
これをバージョンの競合と呼びます。Aさんがmainブランチにコミットした後、後からBさんがコミットするとAさんの編集内容が消し飛んでBさんの編集内容のみが残ります。
何故かというと、Bさんの編集しているファイルにはAさんの編集した部分がないのでBさんが後からコミットした時に「Aさんの変更内容を削除し、Bさんの変更を追加する」処理が行われます。
ここでAさんとBさんでブランチを分けて、それぞれ編集した内容をmainブランチに採用していく方法をとると、ブランチを統合する際に変更された部分を書き込む処理(マージ)が行われます。
また処理で同じ行を編集してしまっていた場合バージョン競合が発生するため、mainブランチと統合しようとしているブランチのどちらのバージョンを採用されるかを確認されます。
このことをコンフリクトと呼ぶらしいですがよっぽどのことがない限り競合の解決と呼びます。何でもかんでも横文字にすればいいってわけじゃないと思います。
マージ(merge)
マージ(英語表記::merge)とは、元のブランチと分岐したブランチを統合する処理の事を指します。
最終的にブランチはmainブランチ1本にすることが望ましいので、変更が確定され次第ブランチを統合していきます。
ブランチのファイルの競合を解決して問題がないとなればマージされたデータを元にコミットされます。
ブランチをアップデートしていく動作には必ずコミットが含まれます。
プル(pull)
プル(英語表記::pull)とは、リモートリポジトリから最新の変更を取得して、作業しているローカルリポジトリにマージすることです。
プルを行うことで、「その時点でのリモートリポジトリの最新履歴」=「作業しているローカルリポジトリ」となります。
要はリモートリポジトリからデータを丸ごとダウンロードして保存する処理を行います。
プルリクエスト(pullrequest)
プルリクエスト(英語表記::pullrequest)とは、mainブランチとは別のブランチで作業していてマージをするとき、直接マージせずに「こういう内容で変更したんで確認お願いします」といった用途で使う機能です。
複数人で編集しているときにマージしてもいいか怪しいときにやっておくものです。
フェッチ(fetch)
フェッチ(英語表記::fetch)とは、リモートリポジトリの最新情報を取得することです。
ここでわけがわからなくなるのですが、プルと違う点は「フェッチはただリモートリポジトリの最新情報を取得するだけであり、ローカルリポジトリのの更新は行わない」点です。
プルは作業環境を揃える目的で使いますが、フェッチは「俺はこうやって編集したけど、みんなどう編集したのかな?」という用途で使います。
プッシュ(push)
プッシュ(英語表記::push)は、ローカルリポジトリの変更内容をリモートリポジトリに反映させることです。 まずローカルリポジトリでコミットを行ってから、リモートリポジトリのブランチにコミットします。このリモートリポジトリのブランチにコミットすることをプッシュと呼びます。
クローン(clone)
クローン(英語表記::clone)とは、リモートリポジトリのコピーを作ることです。
クローンしたい場所にフォルダを作ってその中にコピーを配置します。
GitのコマンドではリモートリポジトリのURLが必要になりますが、VSCode行う場合はGithubのアカウントで認証を行っているため勝手にURLを取得してクローンしてくれます。
クローンするリポジトリには最低1つファイルが存在している必要があります。
スタッシュ(stash)
スタッシュ(英語表記::stash)とは、コミットしたいけどコミットしたくないファイルがあるときに変更のステージから退避させる処理です。
使い道が分からないのでChatGPTに聞いてみましたが、曰く「作業中に別の作業をするときに変更内容を退避させたりコミットするにはまだ早いファイルを退避させる事に使う」そうです。
筆者はコミットメッセージかコード内のコメント文で現在編集中である旨を連絡すればいいじゃんと思っているので使いどころが分かりません。
タグ(tag)
タグ(英語表記::tag)は、コミットメッセージを強調表示するやつです。
一応VSCode上で操作できる機能を解説してるので書かないといけないので書いてますが、使ったことないです。
用途としては完成したからリリースするときにこのバージョンは完成されたものですよと知らせるなど、そのコミットに特別な意味を持たせる機能 です。
使ったことないです。忘れてもいいと思います。