ジーニアスブログ – WEB制作会社ジーニアスウェブのお役立ちブログ

ソースのバージョン管理をしたいなら、この木何の木?Gitの木!-基本編-


みなさん、こんにちは。
ジーニアスウェブの中武です。

蝉の声が一段と大きくなり、ますます夏らしくなって参りました。
陽射しも強く、先日友人達とバーベキューを行なったのですが、1日外に居ただけでかなり日焼けをしてしまいました。
クーラーにより室内外の温度差もありますので、体調管理に気をつけましょう。

さて、今回はSourceTreeというアプリを用いてGitについてお話させて頂きたいと思います。

まずGitとは、プログラムのソースコードなどの変更履歴を記録したりするシステムのことです。
例えば、

といった場合、逐一コミットを行うと上から順番に「誰がいつどんなことを行ったか」がそれぞれで確認できるようになります。
※コミットについてはまた後程ご説明します。

ここからはそれぞれの機能について見ていきたいと思います。
こちらがSource Treeで用意されている機能です。

本来ならターミナルなどコマンド上で行いますが、SourceTreeは視覚的に表現してくれるため、かなり構造やそれぞれの機能もわかりやくすなっています。
基本編ではこの中の3つについて取り上げたいと思います。

Ⅰ. masterとbranch(ブランチ)


修正や追加など何か操作を行う場合、大元のソース(master)を直接触ると途中で何か問題が起きた際に戻すのが大変になります。
Gitではそれを防ぐためにbranchを切るということを行います。Branchを切ると、その時点でのmasterの複製が出来上がります。あくまでも複製なので、branch内で行っている作業はmasterに影響を与えません。

文章だけではなかなか伝わりづらいかと思いますので、なぜGitを木に例えたのか。それも踏まえて下の図をご覧ください。

Gitの構造はこのようになっております。どうですか?木に見えませんか?
つまり、簡単に言うと master=幹、branch=枝 と表すことができます。
もし複数人同じページで違う作業をする場合は、たくさん枝分かれした木となりますね。
サルが枝から枝へ飛び移るように、branchからbranch、branchからmasterと切り替えてその時の状態を確認することが可能です。
※作業中のbranchから移動する場合は、コミットをお忘れなく!

ただし、最終的にはbranchで行った作業をmasterへ反映させる必要があります。これをmargeと言います。
Margeする場合いくつか注意点がありますが、これについてはⅢ.マージのところで説明したいと思います。

Ⅱ.コミット


一言で表すと、コミット=確定(保存) ということです。
先程の木の図で枝の途中に膨らんでいる部分があったのにお気づきでしょうか?
これはコミットした形跡になります。コミットをすればする程、この丸が増えていきます。
先にもお話しましたが、誰がいつ、どのようなことを行なったのか。これをコミット毎に確認することができます。

例えば下の図のように、ログイン時の処理をそれぞれ細かく分けてコミットします。

コミット間もダブルクリックすることで移動することができます。
一目でどこで何をしたかがわかるので、問題が起きて困った時は各コミットを確認しましょう。

Ⅲ.マージ


Gitを使う上で一番注意するところは、このマージの部分になります。
マージとは、その名の通り、合併する=1つにまとめるという意味です。
例えば、同じファイルに複数人が同時に操作を行った場合、マージを行うと競合が発生してしまいます。
競合した時に間違ったことをすると、必要な記述がなくなってしまい表示がおかしくなった。修正した内容が反映されていない、ということが起こります。

競合が起こった場合は、発生した旨の警告があり、競合しているファイルと対象の箇所が下の図のように表示されます。

図の場合は、「<<<<HEAD」ここから競合が発生しています。対象は「======」から下「>>>>>test」までがtestブランチの内容です。という意味になります。
これを全て反映させるのであれば、pタグ以外の「<<<、===、>>>」を削除してコミットすればOKです。
先にも述べましたが、マージする場合は十分に注意して行うようにしてください。
チーム内でコミュニケーションを取り合い、なるべく競合を発生させない環境を作るというのも良いですね。

まとめ


いかがでしたでしょうか?
今回説明させて頂いたのは3つの基本的な機能だけでしたが、Gitには他にも色々な機能があります。
ローカルでのみの作業の場合は、バックアップと実作業のみとなり、あまりGit本来の使い方と言えないかもしれません。
ローカルからリモート(実環境)に反映させる時などについては、次回応用編にてお話したいと思います。

どこでどんなことをしたか確認したい、この作業があるのとないのとでどう違うか比較したい、前のバージョンにすぐ戻せるようにして作業を行いたい。そんな時は、Gitを使用してみるのはいかがでしょうか?