【シェル】Gitをはじめよう【macOS】

【シェル】Gitをはじめよう【macOS】

この記事では、はじめてGitにふれる方や、いままでにGitを使ったことがない方などが、Gitの全体のイメージをつかめるよう、そしてGitの基本的な操作ができるようにGitについて解説しました。

はじめに

はじめに
はじめに

Gitとは

Gitとは、プログラムのソースコードなどの変更履歴を記録管理するための分散型バージョン管理システムです。もともとは、Linuxの開発者であるリーナス・トーバルズさんが、カーネルのソースコードを管理するために開発されたものです。Gitは快速に動きとても使いやすいので、今では多くの人々に使われるようになりました。

ちなみに、GitHub(ギットハブ)は、ソースコードをホスティングするサービスです。コードのバージョン管理システムにGitを使用してます。他のGitホスティングサービスではBitBucketあたりが有名です。どちらも基本は無料で利用できますし、リポジトリを非公開にすることも可能です。Gitの基本を押さえたら、これらのGitホスティングサービスを利用してみると良いでしょう。

Gitでできること

Gitでできることは次のとおりです。

  • ファイルの変更履歴を管理できる
  • 過去のファイルに簡単に戻れる
  • チームで共有できる
  • Githubと連携する
  • いろんなファイルを管理できる

ファイルの変更履歴を管理できる

Gitを使えばバックアップファイルを新たに作る必要がないので、管理がラクになります。Gitを使えば更新記録がひと目で分かるようになります。別にサーバーへアップしなければならない訳ではないので、プライベートなファイルにも利用できます。

過去のファイルに簡単に戻れる

Gitは過去のファイルに戻ることも得意です。Gitでは、変更した際のメモを残すことができますので、それを手がかりにすればいつでも過去のある時点の状態を復元することが可能です。もちろん、それからまた現在の最新状態に戻ることもできます。

チームで共有できる

複数人でプロジェクトを共有する場合にもGitは便利です。チーム内で変更履歴を共有できます。

Githubと連携する

Githubを使えばGitがさらに便利になるでしょう。Githubではリポジトリを非公開に設定できますので、バックアップ的な置き場所としても活用できます。

いろんなファイルを管理できる

Gitで管理できるのは、プログラミングのソースコードだけではありません。画像だったりテキストファイルやExcelの管理にも向いてます。

私はアプリ開発者でもあるので、プロジェクトの管理にGitやGithubを大いに活用してます。また、このブログ記事の元になるMarkDownファイルなどもGitで管理してます。さらには、私の好きなRaspberry PiArduinoなどのソースコード管理にも便利です。

Gitをこれから学ぶ人におすすめの本

Gitの使い方を学ぶにあたって、初心者でもわかりやすい入門的な教科書を探しました。Amazonで評判がよかったわかばちゃんと学ぶ Git使い方入門の本を選んで読んでみました。

マンガ形式でやさしく理解することができたので、Gitの全体の流れをサクッとつかめます。またシェルを使って具体的なコマンドも覚えられるのでおすすめな本です!

本を読むと、Gitにはたくさんの機能があります。リバート、チェリーピク、Stashなどなど、本記事では紹介しきれないものもあります。さらに詳しくしりたい方は、ぜひ書籍をご覧ください。一緒にGitを学んでいきましょう!

Gitの全体の流れと仕組み

まずはGitの全体の流れと仕組みを説明ます。Gitのイメージを掴んでいきましょう。

アドしてコミットする(git add / git commit)

はじめに、Gitを使う上で次の図のように「ワーキングディレクトリ」「ステージ」「ローカルリポジトリ」という概念に分けて考えることが大事になります。

アドしてコミットする
アドしてコミットする

ファイルを編集したりしている場所を、ワーキングディレクトリと呼びます。また、Gitで管理するためにはローカルリポジトリへ変更内容を書き込まなければなりません。ファイルを変更しただけでは、ローカルリポジトリへは反映されないのです。

そこで、変更したファイルをいったんステージという場所へ追加します。そして、ステージ上に上がったものをコミットすることではじめてローカルリポジトリに変更内容を保存できます。

具体的には、$ git add$git commitコマンドを使って編集ファイルをローカルリポジトリへ反映させます。

また、$git commit -m "メモ"のようにして、変更内容などのコミットメッセージを記録できます。コミットメッセージは、のちのち過去の編集時点に戻りたい時の頼りになりますので、分かりやすいかたちで残すようにしましょう。

▼ コミットメッセージの書き方

コミットの変更内容の要約
(空行)
変更した理由

フォークしてクローンする

GitHubなどで公開されているリモートリポジトリなどを、自分のリモートリポジトリへ保存することを「フォーク」と呼びます。また、リモートレポジトリからローカルレポジトリに反映させることを「クローン」と呼びます。

フォークしてクローンする
フォークしてクローンする

ブランチしてマージする

Gitには「ブランチ」という概念があります。ブランチとは「枝」という意味で、バグを修正したり、新機能を追加するような時に、本家と枝分かれして作業を進めたい場合に便利な機能です。masterブランチとは別の新規ブランチを作成して、作業を進める形になります。作業後、プログラムの動作に問題なければmasterブランチに合流、合体させます。このことを「マージ」と呼びます。masterブランチは常に最新リリース(本番用)を保つようにします。

ブランチしてマージする
ブランチしてマージする

プッシュとプル

ローカルリポジトリの状態を、リモートリポジトリへ反映させたいときは「プッシュ」を使います。また、リモートリポジトリの内容が変更された時、ローカルリポジトリへその内容を反映させるには「プル」を使います。

プッシュとプル
プッシュとプル

Gitの使い方(シェル)

ここからは、シェルコマンドでのGitの基本的な操作を説明します。

ローカルリポジトリの作成

管理するプロジェクトのディレクトリへ移動し、$ git init でリポジトリを作成します。$ ls -alなどで確認すると.git/という隠しディレクトリが生成されているはずです。この中がローカルリポジトリになります。

ローカルリポジトリの状態を確認する

たとえば、なにか適当なファイルを$ git initを実行した場所に保存してみてください。そして$ git statusを実行します。

$ git status

すると、ワーキングツリーの状態を確認できます。ここでは「Untracked files」となり、「Gitで追跡管理されないファイルが存在しますよ」という警告が表示されました。

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	try_git_with_cui.md

nothing added to commit but untracked files present (use "git add" to track)

Gitで追跡対象にする

Gitで追加したファイルを追跡の対象とするため、$ git addを使ってステージエリアへ登録します。

$ git add .

.の指定で、すべてのファイルを追跡対象に指定できます。

コミットする

ステージエリアへ上げることができたら、コミットします。

$ git commit -m "マークダウンファイルを新規に追加した"

過去のコミットに戻りたい(チェックアウト)

過去のコミットに戻ることを「チェックアウト」と呼びます。

まず、$ git logを実行して、日付やコミットメッセージの内容を手がかりに、戻りたい地点を探します。戻りたいコミットが見つかったら、commitのハッシュコードをコピーし、$ git checkoutでチェックアウトします。

$ git checkout d1c54df01ba043ef08d3f3fec4885e43088c8912

これで、ワーキングディレクトリの状態が、過去のコミット地点の状態に戻っているはずです。

最新のコミットの状態に戻りたい

最新のコミットの状態に戻るには次のコマンドを実行します。

$ git checkout maste

.gitignore

実際にGitを導入していくと、Gitの管理対象から外したいファイルやディレクトリがでてくる場合があります。その時は、.gitignoreというファイルを.gitと同じディレクトリに用意し、無視したいファイルやディレクトリを記述します。

*.jpg
*.JPG
*.PNG
*.png
*.JPEG
*.jpeg
*.gif
*.GIF
html/
Inbox/
.vscode/
.idea/

以降、これらのファイルがステージに上がらなくなります。

もしも.gitignoreの内容が反映されない場合は、git rm -r --cached .でファイル全体のキャッシュを削除してみてください。

▶︎ 類似した記事を探す #MacBook #macOS
 

この記事が参考になりましたら
シェアをよろしくお願いします!

関連記事