Gitってなに?現役エンジニアが徹底解説

プログラミング学習

 

01|バージョン管理

プログラミングを使って複数のファイルやフォルダを作成・更新する際に、ソースコードや画像などのファイル・データの変更履歴(バージョンという)を管理することを「バージョン管理」と言います。

皆さんも資料を作成したり修正するとき、元のデータを残したまま別のファイル名で新しく保存し直したりする経験があるのではないでしょうか?

  • 企画改善案提案資料.pdf
  • 企画改善案提案資料_2.pdf
  • 企画改善案提案資料_修正版.pdf
  • 企画改善案提案資料_確認版.pdf
  • 企画改善案提案資料_最新版.pdf
  • 企画改善案提案資料_最終版.pdf

しかしこれだと、どういった順番で更新されてきたのか分からなくなってしまいそうですね。

場合によっては更新順がわかるように、日付をつけて保存する場合もあると思います。

  • 企画改善案提案資料20220901.pdf
  • 企画改善案提案資料20220902.pdf
  • 企画改善案提案資料20220904.pdf
  • 企画改善案提案資料20220910.pdf
  • 企画改善案提案資料20220913.pdf
  • 企画改善案提案資料20220914.pdf

これだと更新順は把握しやすいですが、どこを修正したものか、確認や修正がどの段階まで進んでいるのかが把握できません。

個人で修正する資料であれば問題ないかもしれませんが、これが数十人規模のプロジェクトで扱うファイルであれば、管理が大変です。

複数のファイルが同時多発的に並行して修正や更新をされるため、同じファイル同士の更新情報が競合するなどのトラブルが発生しやすくなります。

Gitをはじめとするバージョン管理システムは、このような問題を解決するために利用されます。これには次のようなメリットがあります。

  • 多数のファイルが競合しないようにする
  • 新旧のファイルを更新順に一括管理できる
  • 変更・更新履歴を辿ったり比較したりできる

ファイルを追加したり、修正したりした際の履歴情報を管理することで

  • 過去の変更箇所を確認する
  • 特定の変更地点に戻す

などの操作が可能となります。

もしも「バージョン管理」というシステムがなければ、開発中にどのタイミングでエラーが発生したのかがわからなくなり、エラーの発見が遅れる、エラーがシステム全体に及ぼす影響の範囲が分からなくなるなど、開発と利用の双方におけるトラブルを招いてしまいかねません。

したがって、プログラミング、特にチーム開発において「バージョン管理」はきちんと理解し、活用できるようにしておく必要があります。

 

02|Gitとは

Gitとは、様々なバージョン管理システムの一つで、「分散型」のバージョン管理システムとして有名です。

 

03|リポジトリ

バージョン管理は「リポジトリ」と呼ばれる、ファイル自体やプログラム、設定情報、変更履歴を保存する場所に対して行われます。

英語における「repository(リポジトリ)」は「貯蔵庫、倉庫、集積所」といった意味です。

このリポジトリに対してフォルダやファイルの保存・更新・削除などの操作をすることで、バージョン管理を行うことができます。

 

分散型と集中型

バージョン管理には「集中型」と「分散型」の2種類があります。

「集中型」のバージョン管理システムとは、特定の一つのリポジトリにアクセスし、全員で共有してバージョン管理を行うシステムです。

集中型のバージョン管理システムでは、リポジトリがリモート環境のみ(オンライン上のみ)に存在します。

複数のメンバーが同じシステムを実装する場合、メンバーはリモート環境のリポジトリにアクセスをし、メンバーが自身のローカル環境(自身のコンピュータ上)にあるファイルを保存したり、リモート環境からローカル環境へ、ファイルを取得したりすることが可能です。

一方、「分散型」のバージョン管理システムでは、リポジトリがリモート環境のみでなく、メンバーそれぞれのローカル環境にも存在します。

メンバーは自分自身のローカル環境にあるリポジトリ に対してバージョン管理を行い、自分のタイミングでリモート環境のリポジトリへ更新状況などを保存することができます。

これにより、全体で共有したい更新内容と、メンバー自身が管理したい更新内容を分けて管理することができます。

また、リモート環境がないときでもローカル環境のみでバージョン管理が可能です。

Gitなどの「分散型」のバージョン管理システムは、個々人のマシン上にリポジトリを作成して開発を行い、お互いの更新状況を邪魔することなく効率的に開発できるシステムで、現在のチーム開発におけるバージョン管理の主流となっています。

 

04|Gitの使い方

ここからはGitの基本的な使い方について、簡単に解説していきます。

 

Gitのインストール(Mac)

Macでターミナルを起動します。
ターミナルは`アプリケーション → ユーティリティ → ターミナル.app`から起動できます。

ターミナルが起動したら以下のコマンドを入力しましょう。

(`$`マーク以降のコマンドを入力しましょう。)

 

$ git --version

以下のようにバージョン情報が表示された場合はすでにGitがインストールできていますので問題ありません。

 

$ git --version

git version 2.24.3 (Apple Git-128)

`Apple Git-128`というのは、Macにデフォルトで入っているGitであるということを示しています。

バージョンが表示されなかった場合は、`コマンドライン・デベロッパー・ツール`のインストールを促されるので、表示されるダイアログから「Xcodeを入手」もしくは「インストール」をクリックしましょう。(5GBの容量が必要です)

「Command Line Tools 使用許諾契約」という画面が出てくるので「同意する」をクリックして進めてください。

インストールが完了したら、Gitが使えるようになっているはずです。

改めてターミナルから以下のコマンドを入力しましょう。

$ git --version

バージョンが表示されればOKです。

macOSが「Mavericks (10.9)」以降のバージョンであれば、`git`をターミナルから実行しようとすると上記のようになり、「コマンドライン・デベロッパー・ツール」をインストールすると、同時にGitもインストールされます。

 

05|最新版のGitを入手する

Macに標準で入っているGitは、最新版への更新が遅く古いバージョンであることが多いため、常に最新版のバージョンが使えるように「Homebrew」というライブラリを用いてGitをインストールしましょう。

 

Homebrewをインストールする

Homebrewは、macOSでのパッケージインストールを簡単にするためのパッケージ管理システムです。

例えば今回のように、Gitをインストールする、アップデートするといった作業を簡単に実行できます。

まずは「Homebrew」がインストールされているか確認してみましょう。

ターミナルで以下のコマンドを入力しましょう。

$ brew list

Homebewがすでにインストールされていれば、以下のようにインストールされているパッケージのリストが表示されます。

まだHomebrewがインストールされていない場合は

-bash: brew: command not found

と返ってきます。この場合はまずHomebrewをインストールしましょう。

Homebrewのインストールは[Homebrewの公式サイト](https://brew.sh/index_ja.html)から以下のコマンドをコピーして、ターミナルに入力します。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

次のようにインストールが開始されます。(環境によって表示される内容は異なる場合があります)

==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The following existing directories will be made group writable:
/usr/local/bin
/usr/local/include
/usr/local/lib
/usr/local/share
/usr/local/lib/pkgconfig
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man3
/usr/local/share/man/man5
/usr/local/share/man/man7
==> The following existing directories will have their owner set to admin:
/usr/local/bin
/usr/local/include
/usr/local/lib
/usr/local/share
/usr/local/lib/pkgconfig
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man3
/usr/local/share/man/man5
/usr/local/share/man/man7
==> The following existing directories will have their group set to admin:
/usr/local/bin
/usr/local/include
/usr/local/lib
/usr/local/share
/usr/local/lib/pkgconfig
/usr/local/share/man
/usr/local/share/man/man1
/usr/local/share/man/man3
/usr/local/share/man/man5
/usr/local/share/man/man7
==> The following new directories will be created:
/usr/local/Cellar
/usr/local/Homebrew
/usr/local/Frameworks
/usr/local/etc
/usr/local/opt
/usr/local/sbin
/usr/local/share/zsh
/usr/local/share/zsh/site-functions
/usr/local/var

Press RETURN to continue or any other key to abort

 

ここで一旦止まりますので、`Enter`キーを押してください。

==> /usr/bin/sudo /bin/chmod u+rwx /usr/local/bin /usr/local/include /usr/local/lib /usr/local/share /usr/local/lib/pkgconfig /usr/local/share/man /usr/local/share/man/man1 /usr/local/share/man/man3 /usr/local/share/man/man5 /usr/local/share/man/man7
Password:
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/bin /usr/local/include /usr/local/lib /usr/local/share /usr/local/lib/pkgconfig /usr/local/share/man /usr/local/share/man/man1 /usr/local/share/man/man3 /usr/local/share/man/man5 /usr/local/share/man/man7
==> /usr/bin/sudo /usr/sbin/chown admin /usr/local/bin /usr/local/include /usr/local/lib /usr/local/share /usr/local/lib/pkgconfig /usr/local/share/man /usr/local/share/man/man1 /usr/local/share/man/man3 /usr/local/share/man/man5 /usr/local/share/man/man7
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/bin /usr/local/include /usr/local/lib /usr/local/share /usr/local/lib/pkgconfig /usr/local/share/man /usr/local/share/man/man1 /usr/local/share/man/man3 /usr/local/share/man/man5 /usr/local/share/man/man7
==> /usr/bin/sudo /bin/mkdir -p /usr/local/Cellar /usr/local/Homebrew /usr/local/Frameworks /usr/local/etc /usr/local/opt /usr/local/sbin /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/Cellar /usr/local/Homebrew /usr/local/Frameworks /usr/local/etc /usr/local/opt /usr/local/sbin /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var
==> /usr/bin/sudo /bin/chmod 755 /usr/local/share/zsh /usr/local/share/zsh/site-functions
==> /usr/bin/sudo /usr/sbin/chown admin /usr/local/Cellar /usr/local/Homebrew /usr/local/Frameworks /usr/local/etc /usr/local/opt /usr/local/sbin /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/Cellar /usr/local/Homebrew /usr/local/Frameworks /usr/local/etc /usr/local/opt /usr/local/sbin /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var
==> /usr/bin/sudo /bin/mkdir -p /Users/admin/Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Users/admin/Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown admin /Users/admin/Library/Caches/Homebrew
==> /usr/bin/sudo /bin/mkdir -p /Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown admin /Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Counting objects: 7040, done.
remote: Compressing objects: 100% (4180/4180), done.
remote: Total 7040 (delta 4218), reused 4638 (delta 2642), pack-reused 0
Receiving objects: 100% (7040/7040), 3.70 MiB | 786.00 KiB/s, done.
Resolving deltas: 100% (4218/4218), done.
From https://github.com/Homebrew/brew
* [new branch] master -> origin/master
* [new tag] 0.1 -> 0.1
* [new tag] 0.2 -> 0.2
* [new tag] 0.3 -> 0.3
* [new tag] 0.4 -> 0.4
* [new tag] 0.5 -> 0.5
* [new tag] 0.6 -> 0.6
* [new tag] 0.7 -> 0.7
* [new tag] 0.7.1 -> 0.7.1
* [new tag] 0.8 -> 0.8
* [new tag] 0.8.1 -> 0.8.1
* [new tag] 0.9 -> 0.9
* [new tag] 0.9.1 -> 0.9.1
* [new tag] 0.9.2 -> 0.9.2
* [new tag] 0.9.3 -> 0.9.3
* [new tag] 0.9.4 -> 0.9.4
* [new tag] 0.9.5 -> 0.9.5
* [new tag] 0.9.8 -> 0.9.8
* [new tag] 0.9.9 -> 0.9.9
* [new tag] 1.0.0 -> 1.0.0
* [new tag] 1.0.1 -> 1.0.1
* [new tag] 1.0.2 -> 1.0.2
* [new tag] 1.0.3 -> 1.0.3
* [new tag] 1.0.4 -> 1.0.4
* [new tag] 1.0.5 -> 1.0.5
* [new tag] 1.0.6 -> 1.0.6
* [new tag] 1.0.7 -> 1.0.7
* [new tag] 1.0.8 -> 1.0.8
* [new tag] 1.0.9 -> 1.0.9
* [new tag] 1.1.0 -> 1.1.0
* [new tag] 1.1.1 -> 1.1.1
* [new tag] 1.1.10 -> 1.1.10
* [new tag] 1.1.11 -> 1.1.11
* [new tag] 1.1.12 -> 1.1.12
* [new tag] 1.1.13 -> 1.1.13
* [new tag] 1.1.2 -> 1.1.2
* [new tag] 1.1.3 -> 1.1.3
* [new tag] 1.1.4 -> 1.1.4
* [new tag] 1.1.5 -> 1.1.5
* [new tag] 1.1.6 -> 1.1.6
* [new tag] 1.1.7 -> 1.1.7
* [new tag] 1.1.8 -> 1.1.8
* [new tag] 1.1.9 -> 1.1.9
* [new tag] 1.2.0 -> 1.2.0
* [new tag] 1.2.1 -> 1.2.1
* [new tag] 1.2.2 -> 1.2.2
* [new tag] 1.2.3 -> 1.2.3
* [new tag] 1.2.4 -> 1.2.4
* [new tag] 1.2.5 -> 1.2.5
* [new tag] 1.2.6 -> 1.2.6
* [new tag] 1.3.0 -> 1.3.0
* [new tag] 1.3.1 -> 1.3.1
* [new tag] 1.3.2 -> 1.3.2
HEAD is now at 5b04152 Merge pull request #3133 from MikeMcQuaid/travis-umask
==> Tapping homebrew/core
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core'...
remote: Counting objects: 4556, done.
remote: Compressing objects: 100% (4344/4344), done.
remote: Total 4556 (delta 36), reused 459 (delta 12), pack-reused 0
Receiving objects: 100% (4556/4556), 3.63 MiB | 233.00 KiB/s, done.
Resolving deltas: 100% (36/36), done.
Checking out files: 100% (4577/4577), done.
Tapped 4341 formulae (4,601 files, 11.3MB)
==> Cleaning up /Library/Caches/Homebrew...
==> Migrating /Library/Caches/Homebrew to /Users/admin/Library/Caches/Homebre
==> Deleting /Library/Caches/Homebrew...
Already up-to-date.
==> Installation successful!

==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
Anonymous Analytics
Documentation for the missing package manager for macOS (or Linux).
==> Next steps: - Run `brew help` to get started - Further documentation:
Documentation
Documentation for the missing package manager for macOS (or Linux).

“`

これでHomebrewのインストールが完了です。(環境によって表示される内容は異なる場合があります)

`brew`コマンドが通るか確認してみましょう。

`brew update`と入力して、以下のように返ってきたらOKです。

$ brew update
Already up-to-date.

HomebrewからGitをインストールする

Homebrewが無事にインストールできたら、HomebrewからGitをインストールしましょう。

ターミナルから以下のコマンドを入力します。

$ brew install git

次のようにダウンロードとインストールが始まります。(環境によって表示される内容は異なる場合があります)

==> Downloading https://ghcr.io/v2/homebrew/core/gettext/manifests/0.21.1
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gettext/blobs/sha256:aba2b94f406a9d8784bb08f9763440297c645a7ea99f4c4dbfeccb325053322a
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:aba2b94f406a9d8784bb08f9763440297c645a7ea99f4c4dbfeccb325053322a?se=2022-11-10T13%3A20%3A00Z&sig=v8A25aThdFrML9dhdPawCX
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/pcre2/manifests/10.40
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/pcre2/blobs/sha256:b25728793286a5fcd8a92d4a75033e20df74c60ffe1d5d886ea5ad719fe25927
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:b25728793286a5fcd8a92d4a75033e20df74c60ffe1d5d886ea5ad719fe25927?se=2022-11-10T13%3A20%3A00Z&sig=8tuoHBBmNhUPoFbh71Wo%2
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/git/manifests/2.38.1
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/git/blobs/sha256:aee350c1b369aad9aaaa22685321f5993cf656026be153f7b573a77f5f8d5446
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:aee350c1b369aad9aaaa22685321f5993cf656026be153f7b573a77f5f8d5446?se=2022-11-10T13%3A20%3A00Z&sig=qLCV9q29L0L3LAGG6HlajX
######################################################################## 100.0%
==> Installing dependencies for git: gettext and pcre2
==> Installing git dependency: gettext
==> Pouring gettext--0.21.1.catalina.bottle.tar.gz
 /usr/local/Cellar/gettext/0.21.1: 1,983 files, 20.5MB
==> Installing git dependency: pcre2
==> Pouring pcre2--10.40.catalina.bottle.tar.gz
 /usr/local/Cellar/pcre2/10.40: 230 files, 6.4MB
==> Installing git
==> Pouring git--2.38.1.catalina.bottle.tar.gz
==> Caveats
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula.
Subversion interoperability (git-svn) is now in the `git-svn` formula.

Bash completion has been installed to:
/usr/local/etc/bash_completion.d
==> Summary
 /usr/local/Cellar/git/2.38.1: 1,592 files, 47.6MB

これでインストールが完了です。

最後の`Summary`に表示されている1行が、Gitの保存場所とインストールされたGitのバージョンになります。

==> Summary
 /usr/local/Cellar/git/2.38.1: 1,592 files, 47.6MB
  • 場所:/usr/local/Cellar/git/2.38.1
  • インストールされた時点でのGitの最新バージョン:2.38.1

Gitのパスを通す

ここまでできたら再度Gitのバージョンを確認してみましょう。

$ git --version

先程のSummaryで表示された最新のバージョンが表示されていればOKです。

もしも最新のバージョンになっていない場合は、最新のバージョンを使えるようにするために「パス」を通す必要があります。

※ パスについての詳しい説明は「PATHを通すとは? (Mac OS X)」を参照

ターミナルから以下のコマンドでパスを通します。

$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile

※ `.bash_profile`が存在しなくてエラーとなる場合は、次のコマンドでルート直下に`.bash_profile`を作成してからパスを通します。

$ cd ~
$ touch .bash_profile

通したパスを反映するには以下のコマンドを実行します。

$ source .bash_profile

これで改めてバージョンを確認してみましょう。

$ git --version

git version 2.38.1

最新のバージョンが表示されていればOKです。

Gitが正しくインストールできたら、まず最初にユーザー名とEmailアドレスを設定しましょう。

`–global`オプションをつけることで、Gitはその後に行う全ての操作に対して常にこのユーザー名とメールアドレスが使われます。

$ git config --global user.name "ユーザー名" # 任意の名前を設定

$ git config --global user.email "メールアドレス" # 任意のメールアドレスを設定

 

もし、異なるユーザー名とEmailアドレスを特定のプロジェクトで上書きして使いたい場合は、そのプロジェクトの中で、`–global`オプション無しでコマンドを実行すればOKです。

$ git config user.name "ユーザー名"

$ git config user.email "メールアドレス"

 

登録した情報は`git config –list`コマンドで確認できます。このコマンドで全ての設定情報を確認できます。

$ git config --list
...
user.name="登録したユーザー名"
user.email="登録したメールアドレス"
...

 

05|まとめ

ここまででGitの初期設定は完了となります。

まずはバージョン管理システムとして非常に優秀なGitが使える環境を、自分のパソコンに導入してみてください。

Gitの基本的な使い方に関しては、別の記事で解説していますので、そちらをご参照ください。

 

さいごに

もしプログラミング学習にお困りなら、TechPro(テックプロ)にお任せください!

あなたの現状と目標に合わせて、最適な学習コースのご提案学習計画のプランニングをお手伝いします。

お問い合わせは以下のボタンからお気軽にお申し込みください!

TechProの体験会に申し込む

ご連絡お待ちしています!