はじめてのgit

SPONSORED LINK

Pocket

git_top.gif

最近気になるgitの勉強メモ。はげしくわかっていない部分とかあるかと思いますので容赦ないツッコミは優しく入れてくれるとうれしいです。

■ gitとは?

Linuxを作ったLinusが開発したバージョン管理システム。この手のシステムはCVSやSubversionが有名ですが、LinusのCVS嫌いは有名らしく「2週間かければ自分でもっといいのが作れんじゃね?」と思い立って作ったらできちゃった、という経緯があるそうです。

主にLinuxのカーネル開発に使われています。最大の特徴は分散レポジトリである点(CVSとかは中央集中型レポジトリ)。ここらへんの話は以下が詳しいです。

» かWiki – Git/分散レポジトリって何が嬉しいの

ちなみにLinusがGoogleで話したときの映像はこちら。

1時間以上あるので要点をば。

  • CVS使っている奴はおかしい(← まぁ、冗談まじりで)
  • gitは速い。CVSでmergeするのはストレス(作業時間的にも承認フロー的にも)がかかるが、gitだと簡単にmergeできる。気軽にmergeして開発していける体制こそが大事。
  • gitは分散しているので中央のコードがおじゃんになってもうだめ、という事態を防げる。誰かがソースを持っているはず。つまり信頼性が高い。
  • 何が最終的に正式版になるかはみんなで決めればいい。だから分散レポジトリの方がいい(← オープンソースはそうだけど企業だと違うんじゃない?とかって突っ込まれていましたが)

■ ダウンロード&インストール

というわけで早速ダウンロード&インストール。最新版は以下のサイトから。

» Git – Fast Version Control System

wget、config、make、make installなどしてインストール完了。

■ やってみたいこと

で、実際やってみたいこと。本来は分散レポジトリの威力を試すためにリモートからコードひっぱってきて・・・とするべきですが、ひとりで開発するスタイルなので今回は以下の操作だけしてみたいと思います。

  1. リポジトリを作る
  2. コミットする
  3. ブランチをつくる
  4. ブランチしたものをマージする

■ 作業する前に・・・

早速作業したいところですが、一応チュートリアルとかを読み解きます。チュートリアルは以下からどうぞ。

» A tutorial introduction to git (for version 1.5.1 or newer)日本語

マニュアルも一応。

» Git User’s Manual (for version 1.5.3 or newer)日本語

■ 作業開始!

前置きはこれぐらいにして早速はじめましょう。

  1. リポジトリを作る
  2. まずはリポジトリを作ります。git-testなるディレクトリで作業してみますか(なんかコマンドっぽいディレクトリで失敗した!と思いましたがかまわず続行します・・・)。

    [webadmin@shizuoka ~]$ mkdir git-test
    [webadmin@shizuoka ~]$ cd git-test
    [webadmin@shizuoka git-test]$ git init
    Initialized empty Git repository in .git/
    

    これで完了。このディレクトリーに.gitなる隠しディレクトリが作られます。

  3. コミットする
  4. では次に適当なファイルをつくってコミットしてみます。

    [webadmin@shizuoka git-test]$ echo test > test.txt
    [webadmin@shizuoka git-test]$ git add test.txt
    [webadmin@shizuoka git-test]$ git commit -m 'first commit'
    Created initial commit 9f41681: first commit
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 test.txt
    

    他にも”git commit -a”とかってやる方法もあるらしいですが、まぁ、最初は普通に。

  5. ブランチをつくる
  6. ここまで来たらブランチを作ってみます。

    バージョン管理におけるブランチの意味がつい最近までわからなかったのですが、先日サンフランシスコでmiyagawaさんとお茶していたら「あー、ブランチ使っていないということはわかっていないってことですねー」と軽く言われたので試してみるw。

    [webadmin@shizuoka git-test]$ git branch
    * master
    [webadmin@shizuoka git-test]$ git branch experiment
    [webadmin@shizuoka git-test]$ git branch
      experiment
    * master
    [webadmin@shizuoka git-test]$ git checkout experiment
    Switched to branch "experiment"
    [webadmin@shizuoka git-test]$ echo "test for experiment" > test2.txt
    [webadmin@shizuoka git-test]$ git add test2.txt
    [webadmin@shizuoka git-test]$ git commit -m "test2 created"
    Created commit b446e13: test2 created
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 test2.txt
    

    ここでexperimentというブランチを作り、それをチェックアウトしたあと、test2というファイルを作ってみました。

  7. ブランチしたものをマージする
  8. さて次にmasterブランチに戻って(subversionではtrunkとかって奴か?)ファイルを編集し、experimentをマージしてみます。

    [webadmin@shizuoka git-test]$ git checkout master
    Switched to branch "master"
    [webadmin@shizuoka git-test]$ echo "add to test" >> test.txt
    [webadmin@shizuoka git-test]$ git add test.txt
    [webadmin@shizuoka git-test]$ git commit -m "some added to test"
    Created commit 7efce37: some added to test
     1 files changed, 1 insertions(+), 0 deletions(-)
    [webadmin@shizuoka git-test]$ git merge experiment
    Merge made by recursive.
     test2.txt |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 test2.txt
    [webadmin@shizuoka git-test]$ ls
    test.txt  test2.txt
    

    今回はConflictが起きないようにしましたが、ここでConflictが起これば修正するように言われます。話が複雑になるので今回はなし、ということで。

まぁ、なんにもやっていないような気もしますが、まずはここらへんの理解を完璧にする必要があるかと。次はバージョンをいったりきたりとか、リモートから取ってきたりとかをやってみたいですな。

ただ、本当はgithub.comを使いたいのでした。なんか最近良く見ますよね、Rails+github.comの組み合わせ。ここらへんもマスターしていきたいところです。

では慣れてきたらまた続編書きますね・・・。

ツイッターもやっています!

SPONSORED LINK

  1. git によるバージョン管理の練習

    シーブレインではソースコードなどのリソース管理に Subversion を使用し…

    • jo
    • May 16th, 2009

    いつでもどこでもGitHubをチェックできるiPhoneアプリ「iOctocat」
    http://journal.mycom.co.jp/news/2009/05/15/043/index.html

  1. March 12th, 2009
  2. March 31st, 2009