Eyes, JAPAN Blog > 【用語解説編】Gitの理解に苦労したので、解説してみる

【用語解説編】Gitの理解に苦労したので、解説してみる

kenji

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

こんにちは、takaiです。仕事の中でGitを理解することに大変苦労したので、自分の頭の整理がてら解説記事を書いてみることにしました。今回は用語に関する解説を行い、別途、実際の操作の流れを解説する記事を公開する予定です。同じ気持ちの方の少しでも助けになればと思います。

<Gitについて>
Gitとは何か、簡単に説明したいと思います。
Gitはバージョン管理ツールです。それは知っているという方は多くいるかもしれません。
私もバージョン管理ツールということ知ってはいました、理解するのにこんなに時間がかかるとは、正直思っていませんでした。

では具体的に、何を管理するのか、というと
「いつ誰が何をどのように変更したのか」ということを管理してくれます。

<Gitのメリット>
Gitを使っていない場合と使っている場合を比較しながら、Gitのメリットを説明したいと思います。
簡単なイメージ図も書いてみました。

このように、従来では自分たちでファイル名に日付、開発者などを入れて、管理していたかもしれません。しかし、Gitを使うと、自動で「いつ誰が何をどのように変更したのか」を管理してくれます。
これが、Gitを使ってバージョン管理をするメリットの一つだと思います。

memo.txtというファイルに「△△△」を追加、続けて「⚪︎⚪︎⚪︎⚪︎」と、、、、20回追加し、上書きしていったとします。このような場合で、もし「13回目の状態に戻して」と頼まれたとします。
従来のやり方では、変更のたびにバックアップをとっていれば、探すことができるかもしれませんが、おそらく簡単ではないと思います。しかし、Gitを使っていた場合は、すぐに13回目のファイルに戻すことが可能です。これは、Gitが変更前後のファイルの状態を、隠しファイルで管理しているという機能から実現することができます。

この機能は、複数人で開発をしている時に大きく役立つことだと思います。重大なエラーが発生した際に、開発のどの過程で起きたのかがわかれば、エラーが起きる前の状態に戻すことができます。「いつ誰が何をどのように変更したのか」を時系列順に保存しているため、編集内容の確認や、編集前編集後の状態に戻すことが容易にできます。

これがGitの素晴らしいところだと思います。

<Gitでよく出る用語と機能の解説>
実際に私がbitbucketとSourceTreeを使って作業をした際に、行った手順通りに解説していきたいと思います。

BitbucketとSourceTreeについて
Bitbucketとは、Atlassian社が開発したGitのホスティングサービスです。同じようなサービスでGitHubがあります。
SourceTreeとは、同じくAtlassian社が開発したGitクライアントです。

 

・リポジトリとは、データや編集履歴を保存しておく場所です。

・リモートリポジトリとは、サーバー上に置かれているリポジトリのことです。自分の編集履歴を他人に共有したり、他の人の編集内容を取得したりする時に使用します。

・ローカルリポジトリとは、パソコン上のローカル環境に保存されたリポジトリのことです。

①クローン
クローンをすると、リモートリポジトリの内容を、自分の作業端末に複製します。
つまり、開発中のプロジェクトの環境をそのままローカルリポジトリに複製します。

②ブランチの作成

ブランチは、一つのタスクに対して一つの環境を作るイメージです。
なぜ一つのタスクに対して一つの環境を作らなければいけないかというと、他の作業の影響を受けないようにするためです。
タスクAの時はAという環境。タスクBのときはBという環境。その環境を切り替えるための目印のようなものがブランチです。

③タスクの実行(ファイルを書き換える)

④コミットする
Git初心者が混乱する要素の一つだと思います。私もコミットが何をしているのかを理解するのに時間かかりました。

解説します。

コミットは「セーブする行為」と私は捉えています。。そう考えると、『何をセーブするのか』と疑問に思いませんか。⌘+sと何が違うのか、何をセーブするのかがわかりませんでした。

答えは、変更前のファイルと変更後のファイルの状態です。

答え聞いてスッキリしましたか?

つまり、コミットとは、変更前のファイルと変更後のファイルの状態を自分のローカルリポジトリ内に保存することです。(ローカル環境でコミットした場合の話です。)

Gitは隠しファイルとして、.gitフォルダに変更前のファイルの状態も保存しています。
そのため、変更前のファイルは見えません。

⑤プッシュ
プッシュはローカルリポジトリの内容を、リモートリポジトリに反映することです。

⑥プルリクエスト

プルリクエストは、「自分で作ったブランチの変更を、元のブランチに反映させて良いですか」と管理者に許可をもらう事です。
プルリクエストをすることで、管理者などの上の人のチェックが入ります。自分が行った変更に間違いはないか、元のブランチに本当にマージして良いのか確認してもらいます。
画像作る

⑦マージ
プルリクエストが承認されると、管理者がマージしてくれます。
マージとは、自分が作成したブランチを元のブランチに統合することです。

⑧フェッチ
フェッチをする事で、リモートリポジトリとローカルリポジトリの状態を比較して、変更(更新)があるか、ある場合には、何コミット遅れているか教えてくれます。
複数人で開発を進めていたら、私が休んでいる間に他の人が、コミットをしているかもしれません。そうするとリモートリポジトリと自分のローカルリポジトリの状態にズレが生まれてしまいます。ズレがあるかどうかを確認するのが、フェッチです。

⑨プル
プルをすることで、フェッチで見つかったコミット遅れをローカルリポジトリ内に取り込みます。
つまり、フェッチで確認されたリモートリポジトリと自分のローカルリポジトリの状態のズレをなくすことができます。

以上が、私が実際に作業した際に使ったGitの用語と動きです。

作業を始めたばかりの頃は、与えられたタスク(ソースを書く)よりも、Gitの仕組みが理解できず、進行が遅かったです。同じ悩みを抱えている方がいて、少しでも理解に繋がったら嬉しいです。
最後まで読んでいただきありがとうございます。

Comments are closed.