[導入メモ] GitHubを使うために、SVNユーザーがGitを調べた

GitHubを使いたかったので、Gitについて調べたので備忘する

Secure source code hosting and collaborative development - GitHub

GitHubを公開&バージョン管理に運用したかったので、ようやっとそれを果たすべくGitについてちょっと勉強しました。Gitのインストールや、GitHubに公開鍵を登録するあたりまでは、完全に省略。

理解や説明に誤りがあれば、ぜひ @ahomu とかにご指摘ください。

公開反映の流れ add → commit → push

Gitでは、ローカルの変更を、GitHubなどのリモートの公開リポジトリに反映するには、このような流れをとります。ローカルでリポジトリを運用するだけであれば、pushは必要ありません。



  1. add して、インデックスに、コミット対象のファイルを登録する ( 変更する度に必要 )
  2. commit して、ローカルのリポジトリに、インデックスの変更を確定させる
  3. push して、リモートのリポジトリに、ローカルの変更を適用する

※SVNユーザーにとって注意が必要なのは、変更がある度にaddしなければいけないこと。

Gitは、ローカルにもリモートにもリポジトリがある分散型バージョン管理である

自分の場合で、Gitを理解するのに一番つまづいていたのは、この部分です。SubVersion ( SVN ) のように、リモートにリポジトリがあって、ローカルにチェックアウトする、という集中型バージョン管理の考え方とは違います。

Gitは、はじめにローカルのリポジトリを作成し、その中で変更を解決します。その後、公開されたリモートのリポジトリにも、改めてローカルの変更を適用します。各所に分散されたリポジトリを必要に応じて適用しあうから、分散型バージョン管理、というわけですね。

GitHubでの初期化手順にルビを振ってみる

リポジトリ作成直後に表示される、ガイドに示されるコマンドが、何をやっているのかのルビを振って理解してみます。Gitのことが分かっていない状態だと、よくわかりませんでした、今みると本当に基本的なチュートリアルになっていたんですね!

$ git init
# カレントディレクトリで、Gitリポジトリを初期化

$ touch README
# README を 0バイトファイル で作成

$ git add README
# git ローカルリポジトリの変更の候補に、ファイル名READMEを追加

$ git commit -m 'first commit'
# git ローカルリポジトリで変更を確定し「first commit」というメッセージをつける

$ git remote add origin git@github.com:ahomu/Ah.git
# git originという名前で、git@github.com:ahomu/Ah.gitをリモートリポジトリに追加

$ git push origin master
# git リモート名originの、ブランチ名masterに、ローカルリポジトリを適用

Gitの用語

SVNしか触ったことがなかったので、用語の取り扱いにも難儀したので整理。冒頭のローカルにもリモートにもリポジトリがあるという概念もそうですが、類似の異なった知識 ( SVN ) が、新しい理解 ( Git )を阻害しがちで困りもの。

基本的なコマンド

add コマンド
ファイルをインデックスに登録する / 未追跡のファイルを追跡対象にする
commit コマンド
インデックスの変更を、HEADに反映させる
push コマンド
リモートのリポジトリに、自分のリポジトリのHEADを反映させる
pull コマンド
リモートのリポジトリから、自分のリポジトリのHEADに反映させる

基本的な用語

ワークツリー
作業中のディレクトリ範囲 ( gitを初期化したカレント以下 )
HEAD
手元のリポジトリにおいて、参照中の ( ブランチの ) 最新バージョン
インデックス
addコマンドで追加された、commit対象になっているファイルの記録群
ステージングエリア
addによってインデックスに蓄積されたコミット前の状態を指す

そしてブランチのこと

ここまでの間に、しつこくHEADという単語を使っていましたが、これは単に最新というだけではなく、ブランチの参照先でもあります。ブランチを切り替えれば、HEADの内容は、そのブランチの最新に切り替わります。デフォルトのmasterのみで運用する場合は、特に考慮しなくても良さそうです。

Gitの場合、手元のローカルでひっそりとブランチを作ることもできるので、複数人で運用する場合にも、より柔軟な取り扱いが可能になる恩恵がありそう。詳しくは以下を参考に。

参考サイト

diff, reset, mergeなど、他にも使うことのある重要機能がありますが、それは次回のまとめ or 下記の参考サイトで。