このエントリーはイノベーター・ジャパン Advent Calendar 2021 3日目の記事です。 こんにちは、株式会社イノベーター・ジャパン ウェブエンジニアの小野寺です。 エンジニア枠で10月に入社して約2ヶ月経過しました。 職場が変わればもろもろの環境は大きく変わりますね。 働く場所、働く人、いただく給与、開発環境、etc。 エンジニアにとって開発環境は重要なポイントです。
僕の場合はGitに苦労しました。 Gitはもはや新しい技術ではないですし、バージョン管理システムでは圧倒的シェアですが、反面、昔の名残でSVNを使い続けている企業も多く存在します。 僕も5年ほどアサインしていたプロジェクトではSVNを使っていました。 SVNはリモートリポジトリのファイルをcheckoutして、ファイルに追加・変更を加えたらcommitする。シンプルな仕組みなので手軽に導入できます。
一方で、Gitはもう少し細かい作業が必要になります。 この記事ではSVNを使っていた方がGitで躓くであろう点について書こうと思います。
SVNのcommit ≠ Gitのcommit
SVN経験者がGitを使い始めるときにおそらく最初に戸惑う点がcommitの使い方です。 SVNにおけるcommitは、リモートリポジトリにファイルの追加・変更を記録する作業です。 ローカルで変更したファイルをリモートリポジトリに記録する作業がSVNのcommitです。 リモートリポジトリに記録されるので慎重に行う必要があります。
一方でGitにおけるコミットはローカルリポジトリにファイルの追加・変更を記録する作業です。 Gitにはローカルリポジトリが存在します。 Gitのcommitはローカルリポジトリに対する作業なので、他の開発者に影響を与えません。そのためバンバンcommitしても何ら問題ないです。
同じワードですが、目的が違うのでこの違いはしっかり理解したほうが良さそうです。
ローカルリポジトリ操作について(SVNにはない!)
「Gitにはローカルリポジトリがある」とさきほど記述しました。 SVNには、Gitでいうローカルリポジトリという概念はないですね。 (リモートリポジトリをローカルにcheckoutしたファイル群はありますが) SVN愛用者のためにローカルリポジトリにcommitまでの操作をかんたんに時系列で説明します。
1.ローカルリポジトリ作成する = git init
まずはローカルリポジトリを作成します。 git initはローカルリポジトリを作成するコマンドです。 ターミナルなどでファイル管理したいディレクトリに移動してgit initを実行するだけ。 例えば、ディレクトリ名dirの中にa.txtというテキストファイルが入っているだけの状態でgit initを実行します。すると、下記画像のようにrepository(local repository)が作成できます。
2.ファイルをstageへ登録する = git add
dirに入っているファイルは無条件にcommit対象になるわけではありません。ローカルリポジトリを作成したら次はファイルをstageに登録する必要があります。 使うコマンドはgit add。
画像にあるa.txtを追加する場合はgit add a.txtを実行します。 git add a.txtを実行すると、a.txtはstageと呼ばれる一次保存場所にいったん保存されます。
3.ファイルの追跡を開始する = git commit -m "message"
stageにaddしただけではファイルの追加・変更が記録されません。 最後にgit commitが必要です。 git commit a.txt -m "" でa.txtはローカルリポジトリに記録されます。
commitを実行したことで、これからa.txtにどんな変更を加えても、このcommitしたa.txtに戻そうと思えばいつでも戻せるようになります。 git commitはgit commit -m "message"でメッセージを付けてcommitするので、メッセージにはどのような修正をしたかを正確に書いておきましょう。(後で探しやすくなります)
今回は説明を端折りますが、commitしたファイルをpushすれば対象ファイルはリモートリポジトリに追加・変更が記録されます。(これがSVNでいうcommit)
Gitを上手に活用できればプロジェクトのススメ方もスムーズになると思います。ぜひ理解を深めてみてください。
おすすめ参考書:独習Git http://www.amazon.co.jp/dp/4798144614