gitについて話すときにこの記事をたたき台にしたい。はじめてgitに触れる人の理解の助けになれば。
個別のgitコマンドについては、「頻出gitコマンド入門」で紹介しているのでリファレンス的に使ってください。ここでで紹介しているコマンドに関してはさらっと流して、できるだけシンプルに。
Contents
そもそもgitって何?
チームで開発する場合はほぼ必須になるVCS(Version Control System; バージョン管理システム)のひとつ。
昔はSubversionやMercurialなどが使われていましたが、今一番アツいのはgitです。VCSを学ぶならまずgitを覚えて間違い無いです。
実際に使い慣れてくると、gitなしの開発はできないと思うようになってくるハズ。
github、gitlab、bitbucketなどはgitのホスティングサービスで、ブラウザからコードを閲覧したり、コミットに行単位でコメントしたり等々、チーム開発にとって便利なインターフェースを提供してくれます。
どうやって勉強するのが良いか
githubは公開リポジトリであれば無料でいくらでも作ることができるので、自分で勉強用のリポジトリを作ってみて、実際にそのリポジトリに対して色々なコマンドを実行してみましょう。プログラムと同様に、机上の勉強だけでは覚えられません。実際に動かしてみてどうなるかを見る、その繰り返しが早くマスターするための秘訣です。
サルでも分かるGit入門というサイトが入門のためには分かりやすく書かれていて良いと思います。
もし読んでいるあなたが私に会えるのであれば直接声をかけてください。実際のブランチの動きなどをビジュアル化して動かせるサイトもあるので、動かしながら説明します。
まずすべきこと
名前とメールアドレスを設定する
|
1 2 |
git config --global user.name "Taro Yamada" git config --global user.email "t.yamada@example.com" |
githubに登録しているメールアドレスを設定する。そうしないとgithub上のユーザーと紐付かない。
ローカルマシンの公開鍵をgithubに登録する
公開リポジトリをクローン、プルしてくるだけなら不要だが、非公開リポジトリをクローンしたり、プッシュしたりする場合に必要(httpsプロトコルの場合はコマンド実行時にIDとパスワードをインタラクティブに聞いてくれることもあるが…)。
英語が読めるならgit公式のドキュメントが一番親切。
簡単に説明すると、 ~/.ssh/id_rsa.pub が存在すればそれをそのまま公開鍵として使えば良いが、無い場合は次のコマンドで作成。
保存場所、パスフレーズ、パスフレーズの確認で3回質問されるが全部Enter連打で良い。実行すると ~/.ssh/id_rsa.pub が作られているはず。
|
1 |
ssh-keygen -t rsa -b 4096 -C "t.yamada@example.com" |
この中身をコピーして、githubのSettings -> SSH Keys に登録する。
登録した公開鍵はウェブ上に公開されるため、間違えても秘密鍵である id_rsa (pubの付いていないファイル)を登録してはいけない。
つまずきやすい概念について
ワーキングツリー
いま作業しているファイルのこと。ファイルそのものを差して言うことも。git statusではuntracked filesになっているファイルを含む。
インデックス(ステージ)
コミットするためのファイルを保存しておく場所。git addしたファイルのことで、untracked filesはちがう(=addしていない)。
ローカルブランチ
ローカルリポジトリ内に存在するブランチ。このブランチに対してのみ変更をコミットして、リモートブランチにプッシュできる。
リモートトラッキングブランチ(追跡ブランチ)
間違われやすいがこれはローカルリポジトリ内に存在する。意識されることが少ないが大切な概念。
例えばgit fetchを実行した場合はこのトラッキングブランチが更新され、任意のタイミングでこのトラッキングブランチからマージを行う。
トラッキングブランチは origin/master などと表記され、originリポジトリのmasterブランチをトラッキングしていることを意味する。
この説明を理解すれば、 git fetch -> git merge origin/master のコマンドの意味が理解できると思う。
リモートブランチ
開発者がリモートブランチを介してpush/pullを行う対象のブランチ。ここまで挙げた5つのうち、これだけがリモートリポジトリ内に存在する。
所感
正直言ってgitの学習コストは決して低くないと思います。それでもじっくりと時間をかけて学習するほどの価値がある技術であり、またエンジニアとして一生使える技術のひとつだと思います。
またチーム開発をする場合においては知らないと話にならないほど重要な技術です。
何度も言っていますが、エンジニアとして生きていく以上、勉強は避けて通れない道であります…。長いエンジニア人生を素晴らしいものにするために、新しい技術に関する勉強を苦と思わず楽しめるようになると素敵ですね。


