【基礎】今更だけどGitについて学んでみる | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

また久しぶりの更新になりました。

個人的な話ですが、4月から娘が保育園に通うことになり、育休からついに仕事復帰します('ω')ノ

 

が。

1年3か月もの間、エンジニアの仕事から遠ざかっていたために、IT知識がごっそり抜けてしまった…w

ということで今回は、今更ながらGitの基本的な知識についてまとめてみます。(文字通り基本的な内容しか扱っていません)

 

もくじ

1.Gitとは

2.リポジトリ

3.リモート⇔ローカル間での基本操作

4.ローカルリポジトリ内での基本操作

5.補足

 

1.Gitとは

そもそもGitとは、バージョン管理の概念である。

世界中で、主にプログラムソースコードファイルの管理などに使われている。

 

Gitの管理下にディレクトリやファイルを配置し、更新していくことで、

 ・いつ(When)

 ・誰が(Who)

 ・どのファイルのどの箇所(Where, What)を

 ・なぜ(Why)

 ・どのように更新(新規作成・変更・削除)したか(How)

という、5W1Hの更新履歴が記録されていく。

 

なお、Gitはあくまでバージョン管理の概念であり、

Gitの概念をソフトウェアシステムとして使えるようにしたものに、

GitHubやGitLab、Bitbucketなどがある。

  

 

2.リポジトリ

Gitを使って作業するときは、2種類のリポジトリを使い分けることになる。

Gitでいう「リポジトリ」とは、ファイル/ディレクトリ本体や、それらの変更履歴データを入れておくハコのようなものだと考えればよい。

 

リポジトリの種類は以下の通りである。

種類 説明
リモートリポジトリ Gitサーバに配置された、データ原本の格納先となるリポジトリ。
ローカルリポジトリ リモートリポジトリの中身を、自分の操作端末内に複製して作るリポジトリ。
複数人がデータを更新する場合は、それぞれが自分の操作端末にローカルリポジトリを作る。

 

これらリポジトリを用いた作業手順は、以下のようになる。

 

①リモートリポジトリからローカルリポジトリにデータを取り込む。

※リモートリポジトリを複製してローカルリポジトリを新規作成する。

または、リモートリポジトリから、他の人の更新分(差分)を、既存のローカルリポジトリに反映する。

 

②各人がローカルリポジトリにて、データの更新作業を行う。

(ファイルやディレクトリの新規作成、編集、削除など)

 

③ローカルリポジトリの更新内容を、リモートリポジトリに反映する。

 

 

3.リモート⇔ローカル間での基本操作

リモートリポジトリとローカルリポジトリ間で行う操作(リモート→ローカルへの複製など)のうち、基本的な操作は以下3つである。

 

操作 説明
クローン(clone) リモートリポジトリの中身を、ローカル環境(自分の操作端末環境)に複製すること。
プル(pull) リモートリポジトリの最新の更新内容(要はリモートとローカルの差分)を、ローカルリポジトリに反映すること。
プッシュ(push) ローカルリポジトリで更新した内容を、リモートリポジトリに反映すること。

 

 

4.ローカルリポジトリ内での基本操作

ローカルリポジトリ内の更新内容を、正式に履歴として残すための操作を、コミットと呼ぶ。

 

Gitでは、ファイルやディレクトリを更新(作成・編集・削除)する毎に履歴が自動でつくわけではない。(もし更新毎に履歴がついたとすると、膨大な履歴が残り、履歴データが重くなるだけでなく、履歴を遡るのも大変になる。)

更新のキリのいいタイミングで、利用者が自ら、更新内容のメモとともに履歴をつけることになる。この、履歴をつける操作が、コミットである。

 

なお、Gitのどのソフトウェア・サービスを使うかにもよるが、更新内容のメモを添えるのは必須なことが多い。

「バグ×××の修正」や、「○○APIの仕様変更に伴う修正」、「設定ファイル△△の追加」などといったメモを残しておけば、

後から見返したときに、一目で何のための更新なのかが分かるので便利である。

※メモの書き方は、開発現場によってはフォーマットが決まっているため、それにならう。

 

5.補足

今回はGitの基本的な内容を扱った。

 

補足として、実際のシステム開発においては、今回紹介した操作内容に加えて、

以下のような対処が必要となったり、発展的な機能を利用することも多い。

 ・競合の対処(競合:他の人と更新箇所がかぶってしまうこと)

 ・ブランチ作成とマージ(履歴を分岐させ、各履歴を並行して記録していく操作)

 ・プルリクエスト(ローカルの変更内容をリモートに反映する前に、他の人に通知する機能)

 

 

内容薄いですが(^-^; 今回は以上!