本当に超超超初心者のためのGit入門(実践編)

前記事「本当に超超超初心者のためのGit入門(導入編)」では、Gitのインストールからリポジトリの作成までやりました。今回は、いよいよ実際にバージョン管理をしてみます。

Gitの操作は、前回使用したGit Bashというツールから行うため、慣れないうちは戸惑うかもしれません。その場合は、同時にインストールされている、Git GUIというツールを使うとより視覚的にGitを操作する事ができます。
また、Visual Studio CodeなどのGitに対応したコードエディタを使うことで、Git操作が簡単にできるようになります。
はじめは勉強のためにも、Git Bashを使うことをおすすめします。

全体の流れ

Gitでは、3つのエリアに分けて管理する基本的な考え方があります。

ワークツリー(ワーキングツリーとか作業ディレクトリとも呼ばれる)
インデックス(またはステージングエリア)
リポジトリ(最終保存場所)

ワークツリーで作業して、完成したものをインデックスへ登録し、登録したものをリポジトリへ保存するという流れです。
この3つのエリアは、実際にフォルダ内で別れているわけではなく、仮想的な空間?での話だと考えてください。

ワークツリー

これは仮想ではなく、単純に作業ディレクトリの事です。実際に存在しているファイルがあるエリア。

インデックス

リポジトリへ保存する前に一旦置いておく場所って感じです。実は重要なエリアですが、はじめのうちは必要性がわかりません。(自分もわかってません)

リポジトリ

3つのエリアの中では一応最終保存エリア。完成したファイルや作業途中のファイルでも履歴を残すなどの目的で一時的に保存したりできる場所。
保存すると、その時点のファイルの内容やファイル構成などプロジェクト全体を記録できます。あとでこの時点に戻したりできます。
前回の記事で書いた「.git」フォルダの中にうまく管理されて保存されます。

余談…
自分が最初に疑問だったのは、リポジトリに保存したファイルはどこ?リポジトリのファイルが欲しいんだけど・・・って事でした。でもインデックスエリアとリポジトリエリアにあるファイルは、通常のファイルとしては存在していません。(取り出す方法はあります)Git上でのファイルはあくまでも情報のみの存在なんですね。

ファイルの用意

現在の作業ディレクトリにはファイルがありますか?
進行中のプロジェクトフォルダにリポジトリを作った場合以外は、まだ空(「.git」のみ)のはずですね。どこかからプログラムファイルを持ってきてもいいですし、新規に作成してもかまいません。なにかファイルを用意しましょう。

新規に作る場合は、Git Bashを起動して作業ディレクトリまで移動してから以下のコマンドを打ちます。

作業ディレクトリ内にtest.htmlというファイルが出来ていれば成功です。

ワークツリーからインデックスへ(add)

作った「test.html」ファイルをリポジトリに保存する前に、インデックスに登録する必要があります。

ワークツリーからインデックスにファイルを登録することを、ステージするとかステージングと言います。

以下のコマンドでステージングします。

ファイルが複数ある場合は、以下のコマンドで新規または変更されたファイルを一括で登録できます。

ここで、指定したファイルがちゃんとステージングされたかどうかを、以下のコマンドを打って確認してみましょう。

以下のように表示されるはずです。

一番下の行を見ると、 new fileとしてステージングされたファイル名が確認できます。

インデックスからリポジトリへ(commit)

次にステージングされたファイルをリポジトリに保存します。この事を、コミットすると言います。

以下のコマンドでコミットします。

-mオプションの後にダブルクォーテーションで囲ってコメントを書きます。

コメント?何書けばいいの?
ってなりますが、何でもOKです。例えば今回なら、”first commit”とか、あとで見た時にわかりやすいものがいいですね。

必要ない場合は、省略する書き方もありますが、コメントすることに慣れた方がよいかもしれません。
単純に、-m "コメント"を省略して、$ git commitと打っても省略はできません。

最後にもう一度、statusコマンドでリポジトリ内の状況を見てみると、

最後の行に、コミットするものがない、ワーキングツリーはクリーンです。(直訳…)と出ました。

これで無事にファイルをリポジトリに保存することができました。これを繰り返しながらプロジェクトをすすめていく事になります。

まとめ

リポジトリに保存されたファイルはGitにより管理されるようになり、いつ誰がどのファイルをどうのように書き換えたかなど、詳細なデータをリポジトリ内に保持してくれます。つまり、プロジェクトのバージョンを自動的に管理してくれるわけです。Gitとは何なのか、なんとなくわかってきましたね。

今回は、とても基本的な部分しか触れていませんが、Gitにはもっとたくさんの機能があります。
リポジトリを分岐させて並行して作業をしたり、自分のパソコン以外(例えばサーバやGithubなど)のリポジトリ(リモートリポジトリ)とファイルのやり取りをしたり、コピーしたり、合体させたり。

プログラミングで開発する場合の必須アイテムになると思うので、自分ももっと勉強していきたいと思います。