WHAT'S NEW?
Loading...

Gitをおさらいしよう【3/6】

■早速始めよう

さて、今回は実際に作業して見ながらGitでのバージョン管理をおさらいしていこうと思う。

早速デスクトップに『mygit』という名前でフォルダを作ってみよう。


この中にファイルを作っていき、全てをバージョン管理下に置く予定だ。

まずこのフォルダを開き、フォルダ内を右クリックメニューし、新規作成でテキストファイルを追加し、『index.html』という名前に変更しよう。


俺はGoogle Chromeをデフォルトのブラウザにしているので、htmlファイルを作成するとChromeのアイコンになる。FireFoxやIEならまた別のアイコンになるだろうけど、ここではこのアイコンで話をすすめるよ。

次にこのhtmlファイルをテキストエディタで開こう。

俺の場合は秀丸というプロ向けのテキストエディタ(ちゃんとお金払った)を使ってるけど、とりあえず!という方は、例えばNotePad++やさくらエディタなんかを使えばいいだろう。EmEditorは開発が止まってるので、フリー版を使ってる人で有償版に乗り換えない人は、上記のテキストエディタに移行することをすすめるよ。

以下にリンク先を書いておくので、どちらか好きな方を使っておくれ。
さて、テキストエディタでindex.htmlを開いたら、中にHTMLを記述してみよう。
まずは簡単に、以下の様な感じだ。

画面にmygitと表示するだけのシンプルすぎるHTML。保存したらindex.htmlをダブルクリックし、ブラウザで見てみよう。


ブラウザで見ると想定通り、mygitと表示されてる。
さて、これでまずは準備が整ったということだ。

早速Gitの管理下においてしまおう。

■Git初期設定

まずはGit Bashを起動しよう。

その後デスクトップに作ったmygitフォルダに移動する。
今現在どこにいるのかは、『pdw』コマンドを打てば良い。Print Working Direstoryの略だ。

叩いてみると、『/c/Users/Ogaaaan』であることがわかる。つまり今Windowsにログインしているユーザの『ホーム』にいるということだね。
通常Windowsでコマンドプロンプトで作業する場合、フォルダをドラッグするとフォルダのパスが自動的に入力されるが、よく見るとドライブ部分が違う。通常は『C:\』となるが、Git Bashでは『/c/』となる。これは、Linuxではドライブという概念がなく、すべてファイル扱いとなるため、ただのフォルダとして表示されるからだ。Git BashにフォルダをドラッグするとC:\から始まるパスになるので、この部分は手で治す必要がある。
で、このホームの中には『Desktop』というフォルダがあり、その中身がデスクトップなんだ。だからそこにある『mygit』フォルダまで移動すればいいことになる。

今いる場所から別の場所に移動するには、『cd』コマンドを使う。Change Directoryの略だ。
で、移動先は、『/Desktop/mygit』なんだけど、実は入力支援として、途中まで入力した状態で『TAB』キーを押すと、残りを補完してくれるんだ。
試しに『cd』のあとスペースを1個あけ、『Desk』とだけ入力し、その後『TAB』キーを叩いて欲しい。瞬時に『Desktop』になったはずだ。

今いる場所からみて、先頭が『Desk』ではじまるファイルやフォルダが『Desktop』しかなないので、このように確定までしてくれるわけだ。

さて、続けて『/』をタイプしたあと、『my』とタイプして『TAB』キーを叩いてみよう。
デスクトップに『my』から始まるファイルやフォルダが『mygit』以外になければ、『mygit』が確定されるはずだ。他にもあるなら何度かTABキーを叩いて選択し、確定しよう。

最終的に『cd Desktop/mygit』というコマンドになったはずなので、Enterしよう。


Gitは複数人数で作業できるため、予めメールアドレスやユーザ名を登録しておくことをすすめる。
登録しておけば、誰がコミットした作業なのかなどがわかるので、みんなが緩く突っ込める状態を常に維持することができ、それにより逆に精神的負担を減らすことが可能になっている。俺が突っ込まれるということは、あいつも突っ込まれるということだ!これは『日常』だ!となる(はずwww)。

というわけだけど、プロジェクト毎にいちいち名前やメールアドレスを登録するのは面倒くさいので、オプションにglobalをつけ、常にこの設定を使うようにしてみよう。

登録しておくと便利な(と言うよりほぼ必須と言って良い)項目として、以下がある。

user.nameユーザ名
user.emailユーザのメールアドレス
color.ui出力のカラーリング

上記3つの設定は忘れずにやっておこう。
実際のコマンドはこういう感じ。


『git config --global user.name "Seiji Ogawa"』と打ったあと、次の行でキーボードの『↑』を叩くと、直前に入力した内容が表示される。何度もタイプすれば、タイプした分だけ履歴を遡れる。
この機能を利用して、1つ前の状態にし、BSキーで変更するところだけを直してまたEnterすると、入力が早い。
名前などに空白を含む場合、必ずダブルクオート『”』でくくろう。念のためメールアドレスもくくってあるが、ただの俺の癖なので入れなくてもいい。

このコマンドは『--global』オプションが付いているので、Git全般の設定となった。
登録されてる内容を確認したかったら、『git config --list』と打ってみよう。


さて、次に『mygit』の初期設定を行おう。まずはイニシャライズだ。

Git管理下に置きたいホームで『git init』コマンドを叩くと、Git管理下になる。現状、すでに『/Desktop/mygit』にいるので、『git init』とだけタイプしよう。
『.git』フォルダが作られる。


Explorerの設定で隠しフォルダが表示されない設定になってると『.git』フォルダは見えないので、コマンドラインでの確認方法を優先する。

『ls -la』とタイプすると、今いる場所のフォルダ、ファイルを一覧してくれる。


『.』と『..』は取り敢えず無視していい。
一覧には『.git』と『index.html』が表示されたはずだ。

これでGitの初期設定は終わり。
さてさて、いきなり本番でつかれただろうか。ちょっと屁でもこいててリラックするといいよ。

■Gitでの作業の流れ

Gitというのは、だいたい簡単に説明すると、以下の3工程からなる。
  1. ファイルの追加、編集、削除など
  2. インデックスに作業内容を登録(ステージングに置く)
  3. インデックスにあるもの(ステージング状態のもの)を作業履歴として確定(コミット)させる
さぁ、新しい言葉がじゃんじゃん出てきたぞ。
順を追って説明するよ。

まず、一度Gitの管理下に置いた状態(git initしたフォルダ)では、ファイルを開いて編集しようが、ファイルを追加しようが、ファイルを消そうが、通常通りいつもの作業をしてもらって構わない。これが1の部分だ。

2は、そういった作業をある程度行って、これ以上分割できないし、する必要も無いであろう一区切りになったら軽く行うような感覚だ。つまり世間一般で言われる『キリの良い所』で行う。

『俺はこんなファイルを追加して、中身をこんな風に書いたよ!』とか、『今までここにあったファイルは新たに作ったこっちのフォルダに移動したんだぜ!?』とか、そういった作業内容がひと通り区切りがついたら、その作業内容をGitがGit流に解釈し、メモとしてまとめてくれる。そのメモをインデックスという。

ただし、実際に現場では、そのメモの『置き場』であるステージという言葉がよく使われる。
だからメモを取る、ではなく、イデックスに書き込む、でもなく、単にステージングに反映、などと言われる事が多い。

さて、2までだと、どんな作業をしてようが、自分の脳内とインデックスにしか無いわけで、いわばGitからすれば、バージョン管理になってないわけだ。その1歩手前状態ということになる。
というわけで、ステージング状態にある作業内容を1つのバージョンとして登録、つまりコミットするのが3だ。これで、コミットした場所にいつでも戻れるようになる。


だいたいわかったかな?
なんでいちいちステージングなんか用意されてるの?面倒くさいじゃん!いきなりコミットしようぜ!とおもった人、こう考えて欲しい。
もし貴様がホームセンターやコンビニで買い物する場合。そう、10個ほど買うとした場合、1個選んですぐにレジに並ぶか?と。
まずは幾つか商品をかごに入れるだろう。この場合は10個だ。そしてその後レジにいき、一度の支払いで買い物を済ますだろう。そのカゴがステージで、レジがコミットだ、と。
多くのGitの説明では、2のインデックスに関する説明が抜けてたり、説明があっても内容が省略されてたりする。実際Git入門者が作業してるのを見てると、いきなりコミットしようとして失敗してることが多いんだ。

とにかくコミットするのが目的ではあるけど、一旦Gitにメモとして作業内容を渡しておき、その後コミットするという流れをしっかり覚えていただきたい。

で、実際にこの1、2、3をやってみようじゃないか。

その前に、今Gitって、どういうふうにこのフォルダを解釈してるわけ?というのを確認してみようと思う。
そのためのコマンドは、『git status』だ。


さて、でましたよでました。『index.html』が。そして、赤い。

『git config --global color.ui auto』コマンドを叩いておいたので、こういうコマンド結果がカラーリングされる。これは便利。

そして説明すると、このファイルやフォルダ名が赤いということは、Gitが『あれ?なんか新しくなってね?俺きいてねーよ!!』状態ということだ。つまり、インデックスに登録されてないということだ。

Git『俺のメモはインデックスという名前で、ステージに置いてある。俺はこれをみて、全てを決めてるんだ。で、ちゃんとフォルダもみてるけど、おいおいちょっとまてよ、インデックスに書いてる状態と、今のフォルダの中身、げんじょー違ってね?』

Git『って、作業中か?まぁいいか。』

Git『俺はインデックスを更新するコマンドが叩かれるまで、そっと見守るだけだぜ?』

という感じであるわけよ。

この時点でGitに何かお知らせする事となると、先ほどの手順でいうと、2になる。
つまりインデックスに、『index.htmlというファイルをバージョン管理下に置きたいから追加してね!』というコマンドを叩けば良い話になる。
git initしたからといって、そこにあるファイル、フォルダが全部ステージングはされない。いちいち手で登録する必要があるんだ。
さて、実際にコマンドを叩いてみよう。コマンドは簡単だ。『git add index.html』だ。
もちろん入力中の補完も聞くので、『index』とタイプした後『TAB』キーを押すことを忘れずに。


はい、なんだかそっけないけど、git addコマンドでステージングした、という状態になった。
早速Gitがどういう解釈をしてるのか、git statusコマンドで調べてみよう。

『git status』とタイプするか、『↑』を何度かタイプして(今回だと1回でOKかな)、先ほど入力したコマンドを探し出し、Enterしよう。


はいはい来ました。
緑でましたー!!!

緑は『ステージングされてる!』証拠。これでGitは『index.htmlというファイルを俺は知っている』となる。『index.html』の見出しが『new file:』と書いてあるのも覚えておいてね。


というわけで、ちょっと脱線してみよう。

今回はindex.htmlだけしかファイルがなかったけど、既存のフォルダ、そうだな、例えばファイルが1,000個あるとかの場合、ステージングするのにいちいち『git add index.php』とか『git add /img/title.png』などと打ってると、10分後にビョーキになると思う。

できれば一括で一気に勢い良くイケてる感じでステージングしたいものだ。

実はそのためのコマンドも用意されている。コマンドというよりオプションだ。『git add -A』だ。
これはGitに対して『ここにあるステージングされてないやつ全部ステージングしてね~』という内容になる。

もし不要なファイルもあるようだったら、この方法で一旦全部追加しておいて、後述する方法でステージングされたインデックスから、特定のファイルやフォルダを削除し、3のコミットを行えば良い。
2013.08.30追記
Gitでファイル名を変更するときには、『git mv <変更したいファイル名> <変更後のファイル名>』とする(mvはmoveの略)のだが、実際には『git add <変更後のファイル名>』と、古いファイルの削除である『git rm <変更したいファイル名>』を(rmはremoveの略)同時に行ってくれるようだ。
ちなみにこの『git rm』だが、更にオプションをつけると、実際にはファイルは削除せず、インデックスからだけ削除という事ができる。それが『git rm --cached <インデックスから抜きたいファイル名>』だ。
というわけで、コミットしよう。
コミットする際、先程も書いたけど、複数人数で作業することが前提であるので、必ずコミット時には『何をしたのか』を他のメンバーに対してメッセージとして記述する必要がある。
要するにいかに短く、そしてわかりやすい概要を記述できるのかが試されるわけだ。

間違っても『今日調子悪いからここまで』とか『後はよろしく頼む』とか、何をしたのか分からない内容を書いてはいけない。
それはいわば、『赤信号だけどウンコもれそうだから先に行かせて!』と言ってるのと同じだ。
警察が許しても、俺はゆるさん。
俺に許されないとどうなるかというと、ちょっと直接会って酒でも飲めばわかる。もちろんお前の金で。良い店があるんだよ。


というわけで、こんなふうに書く癖をつけよう。

英語では
  • first git
  • add index.html
など。

日本語では
  • プロジェクト開始
  • チケット321の不具合対応。完了。
などなど。

という訳で、早速ステージングされたindex.htmlをコミットだ!!

『git commit -m "add index.html"』とタイプしよう。『-m』はメッセージを残すという意味だ。その後に記述したコメントがメッセージとなる。
このコメントを入れないとGitに怒られる。強制的にエディタが開き、そこに書き込むことになる。


さて、これで、このコミットという作業で始めて、バージョンが作られた。
もし更に作業を繰り返し、最終的に何か大きな問題がおこり、いつかのバージョンに戻したい時のリストに加えられた、ということだ。

コミットして初めて枕を高くして眠れるし、寝覚めも良くなるということになる。

ちなみに再度、『git status』を見てみると、まるで何もなかったかのような結果になる。これは、すでにバージョンが確定してるわけで、それから何も作業されてない、ということになるからだ。


Git『masterってブランチ(誰もが最初のinitでmasterブランチにいることになる、とおぼえて良い)にいる。そして今コミットできるものは何もない。貴様の作業フォルダは、綺麗なままだ!』

的な。

■続く

次回はバージョンの進め方や戻し方なんかをやってみようと思う。
最後まで読んでくれてどうもです。