チャチャチャおもちゃの抹茶っちゃ

ゲームのこととかプログラミングのこととか。気が向いたら書く。ブログタイトルは友人が考えました。

【Git入門】Gitを使い始めたい人へ「ローカルリポジトリの操作1」 ~A Beginner to Beginners~ 【その2】

【Git入門】Gitを使い始めたい人へ「Gitの導入」 ~A Beginner to Beginners~ 【その1】 : 前 次 : 【Git入門】Gitを使い始めたい人へ「ローカルリポジトリの操作2」 ~A Beginner to Beginners~ 【その3】

目次

実際にGitの操作をしてみる

インストールも終わったので実際にGitを操作してみよう、と行きたいところだがその前に少し準備をしなければならない。ついでにせっかくなのでコマンド操作に慣れる練習もしていこう

Gitの初期設定

Gitはバージョン管理ソフトなので誰が更新したかを覚えておく必要がある。そこで、最初にユーザー情報を設定しておく。これは一度設定しておけば今後変える必要はない。登録するのはユーザ名とメールアドレスなのであとから変更は可能。
Gitの設定をするにあたって、コマンドを入力できるものを起動する必要がある。
まずはコマンドプロンプト(端末、ターミナル)を起動しよう。Windowsなら「Windowsキー+R」で「ファイル名を指定して実行」がでるのでそこに「cmd」と打ち込めば出る。
f:id:mattyan1053:20180720174238p:plain
Macはよくわからない。左上の方からターミナル起動してるのを他人ので見たことがある。 Linuxはデスクトップで「右クリック」→「端末」とかメニューから「アクセサリ」→「端末」とかで開けたと思う。
開くことができたら次のように入力しよう。

$ git config --global user.name "username"
$ git config --global user.email "example@example.com"

と入力すればよい。「username」「example@example.com」のところは自分のものにあわせて入力しよう。
ちなみに、色がないとちょっとさみしいので、

$ git --global color.ui auto

と入力すると少しだけ色がついて賑やかになる(ほんの気持ちだけ)。

Gitを使いたい場所を作る

バージョン管理したい、ソースコードをおいたりするフォルダーを作っておかねばならない。今回練習用のフォルダーとして好きなところに「git-test」というフォルダーを作ることにする。
通常、マウスとか使って新しくフォルダーを作るときは作りたい場所までダブルクリックとかして移動したあと、「右クリック」→「新規作成」→「フォルダー」とかやるだろう(Windowsならこれ)。これと同じことをコマンドでやる。わざわざ説明されなくてもできるぜ!って方はスキップスキップ。Gitを使ってみる

コマンドプロンプト(ターミナル、端末)を起動することができたら、次のように入力してみてほしい。

> dir
$ ls

これをすることで現在のディレクトリの中身が表示される。ディレクトリとはフォルダーとか言われてたりするあれのこと。 以後ディレクトリというとおもうので覚えてほしい。面倒だったらフォルダーとかわかりやすいように読み替えて構わない。 次に、自分が今いるディレクトリを移動するコマンドを入力してみる

$ cd <現在の位置からみた移動先のディレクトリ>

とすることで移動できる。たとえば、現在ドキュメント(Documents)にいて、その中の「test」の中の、更に「in_test」ディレクトリに移動したいときは

$ cd test\in_test

とすることで移動できる。また、今の場所より上の場所に移動したいとき、例えば先程の流れで「in_test」ディレクトリから「test」ディレクトリに戻りたいときは

$ cd ../

とすれば移動できる。
この2つのコマンドを駆使して、自分が使いたいディレクトリの場所に移動しよう。今回の例ではDドライブ直下にディレクトリを作成した(スクショしてもユーザー名が写らないとか楽できる事情があった)
次に、ここに新しくディレクトリを作成する。次のように入力してみる。

$ mkdir git-test

これで新しく「git-test」というディレクトリが作成された。dirlsといったコマンドを利用してうまく作れていることを確認してほしい。確認できたら、cdコマンドで「git-test」の中に移動しよう。

-Windows,Mac,Linux共通

$ cd git-test

これで新しく練習用のフォルダを作成してそのディレクトリに移動することができた。うまくいっていれば次のような感じになるはずである。
f:id:mattyan1053:20180720182320p:plain
今回利用したコマンドはごくごく一部だし、使ったコマンドですらもっと便利な使い方があったりする。気になる人は「<OS名> コマンド」とかでググればたくさん出てくるので調べてみるとよい。

Gitを使ってみる

さて準備も整ったのでGitを使っていこう。

作ったディレクトリにローカルリポジトリを設定する

Git操作

リポジトリとはなんなのかというのは後回しにして、とりあえず次のように入力してみてほしい

  • OS共通
$ git init

これでディレクトリにリポジトリが作成された。実際に確かめてみよう。

> dir /a
$ ls -a

/a-aが後ろについているのは、「隠しファイル」を表示するためだ。作られるディレクトリが隠しファイルなので、単純にdirlsしただけでは表示してくれない。
さて、先程のように入力すると、「.git」というディレクトリが作成されているはずだ。
f:id:mattyan1053:20180720183442p:plain
この「.git」というのが先程スルーした「リポジトリ」、特に「ローカルリポジトリ」というものになる。
次に、Gitの状態を確認できるコマンドがある。次のように入力する。

git status

これから頻繁に入力することになるコマンドなので絶対に覚えよう。すると、次のように表示されるはずである。

$ git status
On branch master  
  
No commits yet  
  
nothing to commit (create/copy files and use "git add" to track)

一文目から「今のブランチはmasterです」、二文目「まだ何もcommitしていません」、三文目「commitするものがありません。(作成またはコピーしてgit addコマンドを使ってtrackに追加してください)」という文章になる。英語にふるえてはいけない。まだこれらの意味はわからなくて構わない。

リポジトリって何よ?

リポジトリとは、ファイルやディレクトリの状態を保存する場所である。ファイルを変更したりしても、変更前の状態をリポジトリが覚えてくれるわけだ。操作のできるバックアップに近い感覚。
f:id:mattyan1053:20180720184734j:plain
新しくプロジェクトを始めたりしてGitを使うときはまずバージョン管理したいディレクトリでリポジトリを作ることになる。git initコマンドは覚えよう。

ローカルリポジトリ
今回作成したのはリポジトリ、その中でも特に「ローカルリポジトリ」と呼ばれているものだ。詳しいことはローカルでないリポジトリを扱うときに説明するが、簡単に言うとそのPCだけ、そのディレクトリだけで有効なリポジトリということになる。

ファイルをコミットする

ファイルのコミットとは

例のごとくコミットという言葉は一旦スルー。Gitはこういう覚える言葉が多くていけない。コミットなんてRIZAPくらいでしか普段聞かない。
リポジトリでバージョンを管理する過程を説明する。工程は2段階で、まず「バージョン管理したいファイルをリストアップ」したあと、「現在の状態をリポジトリに保存する(覚えさせる)」ということを行う。
f:id:mattyan1053:20180720201304j:plain
上記の図でいうと、今の状態を保存しておきたいもの(バージョン管理したいファイル)として「sample.c」と「sample2.c」を「バージョン管理に追加したいものリスト(変更したものリスト)」に追加して、そのあと「追加したいものリスト」にあるファイルを「リポジトリに覚えさせる」ということになる。 このとき、「test.c」には何もしていないので記憶されない。 ここでの「作業しているディレクトリ」のことをワークツリー、「変更したものリスト」のことをインデックスと呼ぶ。
さて、Gitはバージョン管理ソフトである。なので、このあとなにか作業をしたあとどうするのかにも触れておく。 上の図のように「sample.c」と「sample2.c」を記憶したあと、「sample.c」だけ変更を行って新しくなった。そこで、今の変更点をリポジトリに保存したい。
f:id:mattyan1053:20180720201909j:plain
そのときは「変更したものリスト」に書き換えた「sample.c」だけを追加して、リポジトリに記憶してもらえば良い。変更してない部分は考えなくていいからだ。更に、リポジトリは一回目の保存も破棄しないので、両方のバージョンを記憶しておくことができるというわけだ。そして、実はここでの「変更したものリストに追加」することをステージすると言い、「リポジトリにリストに追加されたものの変更点を保存」することをコミットするという。  つまり「ファイルをコミットする」とは「変更したファイルをリポジトリに記憶する」ということを言うわけだ。

さて、カタカナ語リポジトリ、ワークツリー、インデックス・・・・・・と立て続けに出てきて混乱してきた。ここで一旦まとめて簡単に確認しておこう。

  • リポジトリ : 作業の状態を記憶するところ
  • ワークツリー : 作業しているディレクト
  • インデックス : 変更したものリスト
  • ステージ : 変更したものリストに加える
  • コミット : 変更したものリストにあるファイルの変更点をリポジトリに記憶する

これらの用語はこれから頻出し、一度「ん?」となるとどんどんわからなくなっていく。本記事ではできるだけ後者の言葉を使ったあと括弧書き()をしてその中に用語を書いておこうとおもう。タイトルはあとから振り返りやすいようにあえて用語を使っている。

実際のGit操作

何はともあれ一つファイルを作ってみなければならない。適当なテキストファイルでもいいのだが、なんだか雰囲気がでないのでそれっぽいファイルを用意してみる。お好みのテキストエディタを使って以下の内容のファイルを作って作業しているディレクトリ(ワークツリー)に保存してほしい。

#include<stdio.h>
int main(){
    printf("Gitコマンド一覧\n");
    printf("git init : リポジトリを作成\n");
    printf("git status : Gitの状態を確認\n");
    return 0;
}

C言語Hello World的ファイル。コンパイルとかは別にしなくていいです。何も中身がないのも寂しいので使ったコマンドをprintf();していってみる。そんなのコマンドを羅列したテキストファイルをcatすればいいじゃないかとおもったそこのアナタ。そのとおりです。ほら、雰囲気大事だよ雰囲気。ソースコードをGitで管理したらそれっぽいじゃん? ちなみにPATH設定してあるテキストエディタならコマンドから起動できる。例えば

$ vi sample.c

とか

> notepad sample.c

とかで。
ここで

$ git status

とすると

$ git status
On branch master

No commits yet

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

    sample.c

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

と表示されたのではないだろうか。上2つの文は前回のgit statusと同じだが、その次が異なる。内容は「ステージされていないファイルがあります。git add ...を入力してコミットしたいものをステージしてください。そのファイルは「sample.c」です。コミットすべきファイルはありませんがステージされていないファイルがあります。」頭がいたくなりそうな話だが、要は「変更したのに「変更したものリスト」に追加(ステージ)されてないものがあるよ、追加してね」ってことである。つまり、git statusコマンドを使えば変更したのに「変更したものリスト」に加え(ステージし)てないものがあるときは教えてくれるということである。

ステージする

さて、では言われたとおり作った「sample.c」を「変更したものリスト」に追加(ステージ)をしてみよう。次のようにコマンドで入力する。

$ git add sample.c

git add <filename>はファイルを「変更したものリスト」に追加(ステージ)するコマンドだ。
ちなみに

$ git add sample.c
warning: CRLF will be replaced by LF in sample.c.
The file will have its original line endings in your working directory.

って出た人は改行コードの違いで勝手に改行コード書き換わって保存されただけなのでよくわからなければ気にしないでOK。元ファイルのほうは何も書き換わっていない。
そのあと、git statusコマンドを使うことで今どうなってくれるか教えてくれる。 やってみると

$ git status
On branch master

No commits yet

Changes to be committed:
 (use  "git rm --cached <file>..." to unstage)
    newfile : sample.c

と表示されると思う。下に「Untracked~」で始まる文字が表示されているときは、エディタの一時ファイルかなんかだと思うので気にしないで問題ない。

複数のファイルをまとめてステージしたい

通常、一つのファイルだけ書き換えることもあれば、複数のファイルを一気に書き換えることもあるだろう。そういうときは書き換えたものをすべて「変更したものリスト」に追加(ステージ)しなければならない。一つ一つのファイルをいちいちgit addしていくのは面倒であるが、git addは次のように一気に複数のファイルを指定できる。

$ git add <filename1> <filename2> <filename3>...

こうすることで一度に複数のファイルをステージすることができる。更に

$ git add .

と最後をドットにすることでそのディレクトリ内のすべてのファイルをステージする(リストに追加する)ことができる。またこのコマンドを使ったりしてもステージしない方法として「.gitignore」ファイルを作り同じディレクトリにいれておく方法がある。テキストエディタ

*~
test.c

などこのファイルにかかれているファイルは無視されるようになる。
f:id:mattyan1053:20180720234437p:plain

もし間違えてリストに追加(ステージ)してしまったときは

ここでバージョン管理するつもりのないファイルを間違って追加してしまったときも慌てなくてOK。
新しく作成したファイルをaddしたときは

$ git rm --cached <filename>...

と入力すればリストから取り消すことができる。
また、もともとあったファイルを変更してaddしたときは

$ git reset HEAD <filename>...

とすればリストから取り消すことができる。

コミットする

これで「変更したものリスト」に追加(ステージ)が完了した。あとはこれをリポジトリに記憶してもらう(コミット)だけである。そのためには次のコマンドを入力する。

$ git commit

これを入力すると何かしらのテキストエディタが起動するだろう。そこにはコミットの内容を少なくとも1行記入しておく必要がある。通常

コミットの内容

変更した理由など (なくても可)

を記入する。日本語が通常のままだと入力できないので頑張って英語で。要約でいいので簡単な英語で問題ない。「Fix A in B」とかそんな感じ。今回は

First commit

で良いかと思う。いちいちテキストエディタで書くのが面倒、というときは

$ git commit -m "First commit"

というように、「-m」オプションをつけて後ろにコメントを書くことでも代用できる。
これでリポジトリに記憶が完了した。

なんで最初からコミットしないで一回ステージしてからコミットするの?

ここまで読んだ人で疑問に思った人もいるだろう。「変更したところをコミット(記憶)するに決まっているんだからステージ(リストに追加)はしなくていいんではないか」と。基本的にはそれで問題ないかもしれない。実際にaddとcommitをまとめてしまう方法がある。

$ git commit -a -m "Commit collectively"

-aオプションをつけることでコミットまで一気にやってくれる。しかしコミットしたくないものまでコミットしてしまったり、一気に変更を行ったけれどコミットメッセージを分けて別々にコミットしたいときがある。そういうときに、「add」と「commit」を分けて行うようにしておけば融通が効くということである。

コミット履歴をみる

自分の記憶履歴(コミット履歴)を見るには次のコマンドがある。

$ git log

こうすることでcommit履歴が見られる。入力してみるとよくわからんIDと「HEAD->master」、コミット(記憶)した人とそのメールアドレス、コミットの日時、コミットメッセージが表示されるだろう。これからはこのコマンドを使うことで履歴を確認することができる。

$ git log --oneline

とすれば一回のコミットにつき1行で履歴が表示される。

$ git log --graph

とするとツリー状に履歴が表示される。詳しくは次回。大抵の場合--graphオプションは--onelineオプションと一緒に使うことになると思う。

まとめ

今回はGitでコミットするまでの流れとやり方を説明した。 まずGitを使うために作業しているディレクトリにリポジトリを作る必要があり、そのリポジトリにデータをコミット(記憶)していく。リポジトリを作るのは作業ディレクトリを作った初回だけで良い。

結局コミットとは変更点を保存するだけである。
そのためには

  1. ファイルを変更する
  2. ファイルをステージする(変更したものリストに加える)
  3. ファイルをコミットする(変更点を保存する)

の3手順(変更する部分を抜けば2手順)を行うことになり、バージョンアップするたびに繰り返すことになる。

まだここまでではデータのバックアップがとれるようになっただけでGitの便利なところはわからないだろう。次回はリポジトリにコミットを繰り返していったあとのデータの扱いについて説明する。

【Git入門】Gitを使い始めたい人へ「Gitの導入」 ~A Beginner to Beginners~ 【その1】 : 前 次 : 【Git入門】Gitを使い始めたい人へ「ローカルリポジトリの操作2」 ~A Beginner to Beginners~ 【その3】