2012/03/01

githubを使い始めるために最低限わかっておくべきこと

チームでgithubを使う事になったので、勉強中。
githubを理解する上で、なぜGitが生まれたのか、なぜSVNじゃだめなのか、を簡単に調べつつ、基本的な操作手順メモを書いておく。

なぜGitが生まれたのか

SVNとGitの比較から考えてみる。
調べてみたらこんな説明があった。

SVN は中央のサーバー上で実行され、変更を SVN のデータ・リポジトリーに追加し、また変更ごとにスナップショットを提供することができます。このスナップショットにはリビジョン番号が付けられています。リビジョン番号は SVN にとって、そして SVN を使用する人にとって、非常に重要です。私が変更した後で他の人が変更した場合には、その人のリビジョン番号の方が必ず大きいことが保証されています。
Git の目標も SVN に似ており、変更を追跡することですが、Git には中央のサーバーはありません。この違いは重要です。SVN は集中型ですが、Git は分散型です。そのため、Git では変更ごとに増加するリビジョン番号というものはありません。「最新のリビジョン」というものはないからです。Git にも一意のリビジョン ID がありますが、これらのリビジョン ID 自体は SVN のリビジョン番号ほど有用なものではありません。
Git の場合、重要なアクションはもはやコミットではありません。マージです。誰でもリポジトリーを複製することができ、そのクローンにコミットすることができます。リポジトリーの所有者は、変更をマージして元の 1 つのリポジトリーに戻すことができます。あるいは、開発者が変更をプッシュしてリポジトリーに戻すこともできます。
※Subversion ユーザーのための Git: 第 1 回 Git 入門 : http://goo.gl/U5I0Dより

つまり、SVNはリビジョン管理をメインとした集中管理型で、Gitはリポジトリーをみんなで複製(クローン)して変更をマージして一つのリポジトリに戻すための分散型システム。Gitのすごいところは分散して開発しても変更がちゃんとマージされるようになっている、という点。

いくつか理解すべきキーワードがあるが、全体像を確認しながら見ていったほうが理解しやすいので、全体像から。今回は簡単な説明、ということで、remote側ではbranchは切らずに常にmasterにpushする。(最後まで読めば意味わかるので、いまはわからなくてOK)

用語説明

local:ここでは自分のPC内のgithubのこと
remote:ここではチームメンバーで共有しているオンライン上のgithubのこと
repository:プロジェクトとほぼ同義。リポジトリを作成してその中にソースコードを配置する。実際にはローカルのgithub内とリモートのgithub内で同じリポジトリを作成して同期する。
branch:masterから分岐した枝で、新機能を開発する際には必ずbranchを切ってmasterに影響しない状態で実装する。
master:各branchの大元となる幹のようなもの。最終的にはmasterに全てのソースコードを取り込んで本番環境にリリースする。
merge:branchをmasterを取り込むこと。また、branchを切る前には必ず手元のソースコードを最新にすべきで、他人が開発したソースコードを取り込むこともmergeという。
commit:実装したソースコードファイルをbranchに取り込むこと。
    * masterに直接commitも可能だが、開発ログが残らないので、必ずbranchを切ってからcommitする。
push:ローカルのgitからリモートのgitに反映すること
pull:リモートのgitからローカルのgitに取り込むこと

たとえば、functionAという機能を実装してremoteのリポジトリに公開するまでの手順

実装したソースコードを共有するまでの手順を時系列で書くと、下記のようになる。
1.ローカルでfunctionAを実装
2.「$ git checkout -b functionA」 → branch を作成し、checkoutする(そのbranchに移動)
3.「$ git add ファイル名」→ 実装したファイルをgit管理下に置く
    * 「$ git add . 」だと全てのファイルが対象になる。事前に除外するファイルを設定しておく必要がある。基本的には「. 」はつけずにファイル名を指定する。
4.「$ git commit -m "functionA"」→ functionAbranchにコミットする
5.「$ git checkout master」→ masterに移動する。
    * masterにコミットするためにはmaster側からcommit コマンドを打つ必要があるため。
6.「$ git merge functionA」→ functionAをmaster にコミット
7.「$ git push origin master」→ remote のmaster に差分をpush

図解するとこんな感じ。番号は上の説明に対応(ちょっとずれてるので修正中)



参考URL

[導入メモ] GitHubを使うために、SVNユーザーがGitを調べた ::ハブろぐ : http://goo.gl/giYg6
Git ユーザマニュアル (バージョン 1.5.3 以降用) : http://goo.gl/5BJbd
transitive.info - Git 使い方 見出し一覧 : http://goo.gl/TRei4




0 件のコメント:

コメントを投稿