Gitの基本

このブログにGitについてあまり書いていないので、今さらですが基本的なことを書く。 SubversionからGitへ変える時など参考に。 GitHubなどは次回にでも書く。

■分散リポジトリとは

Subversion」では、リポジトリが1つ存在し、そのリポジトリに対して更新反映(COMMIT)を行う。 「Git」では、本流のリポジトリが存在し、それとは別に作業者個々人がリポジトリを持つことができる。

【メリット】 自身の中で作業が長く続いている場合 ・COMMITは出来ないけれども履歴は保持したい ・一旦COMMITして記録としたい このような場合に、自身のリポジトリだけでCOMMITすることが出来る。

この際、自身のリポジトリへ本流のリポジトリからファイルをマージ出来る。 マージすると以下のように、ファイル内に変更箇所が記載される。 DIFFするような形で確認することができる。

<<<<<<< HEAD:test.txt
add gittest upd
add2 morimoto
add gittest gittest upd=======
add
add2 morimot upd
add3 morimoto
add4 morimoto
add gittest
>>>>>>> 6ee66f09e8217f03c90d066239516e4d4e71c19f:test.txt

■分散リポジトリ運用フロー

1.本流リポジトリ作成

※「Git」においては、実はどれが本流という概念はあまりない。 ローカルのリポジトリもリモートで本流になることが出来るので。 ※また、本流リポジトリを「GitHub」というリポジトリ管理サービスに保管することも可能。

GitHub」については次回にでも。

2.ローカルリポジトリ作成 3.ローカルリポジトリで初期ファイルをコミット 4.ローカルリポジトリから本流リポジトリにプッシュ この時点で、本流リポジトリからチェックアウトが可能になる 5.開発者が本流のリポジトリからチェックアウト 6.開発者は、ローカルで開発 7.開発者は、ローカルで自身のローカルリポジトリにコミット

 ※本流にプッシュしない限り、開発者はローカルでコミットを繰り返すことが可能  リビジョンの戻しなども可能 8.開発者が、本流にプッシュ 9.本流に修正が反映される

■「git」インストール

yum install git

今回は、CentOSで上記コマンドにてインストール。 リポジトリサーバー、開発サーバー、ローカルPCなどそれぞれ「Git」を使う場所にインストール。 Winの場合は、「TortoiseGit」などもあり。

■実開発フロー例

1. プロジェクト名(リポジトリ名)を決定し、管理者に本流リポジトリ作成依頼 2. 管理者が、本流リポジトリ作成 「Git」リポジトリサーバーにて管理者は作業

mkdir /var/git/プロジェクト名 ←プロジェクト毎のリポジトリ保管場所
cd /var/git/プロジェクト名
git --bare init ←本流リポジトリ初期化
cd ../
chmod -R 777 /var/git/プロジェクト名

※「--bare」は、ファイル自体を持たないリポジトリという意味。 ローカルリポジトリは、ファイル群をチェックアウトするのでファイルあり。 パーミッションを変えているのは、開発者がプッシュ可能なように

※注記※ SVNのようにWebDAV経由でhttp or httpsにてリポジトリへアクセス出来るが、 ドキュメントルートに置く必要があるので今回はSSHにて

参考 gitレポジトリをhttpで公開する http://www.fraction.jp/log/archives/2008/05/15/setup-git-server-over-http

3. 管理者が、ローカルリポジトリを作成し、本流リポジトリにプッシュ ※ローカルリポジトリはどこで作成しても可

▼gitを使うユーザー情報。リポジトリにコミットした際に記録されます

git config --global user.name "Test Morimoto"
git config --global user.email test.morimoto@example.com

▼ローカルリポジトリの作成と、初期ファイルのローカルリポジトリへのコミット

cd /home/ユーザー名/git_work ←Gitにてバージョン管理を行うファイルを置く場所
git init ←初期化
touch README ←初期ファイル作成
git add README ←初期ファイルのローカルリポジトリへの追加準備
git commit -m 'first commit' ←ローカルリポジトリへのコミット

▼本流リポジトリへ、ローカルでコミットした初期ファイルをプッシュ ※「Git」では、本流リポジトリへ初期ファイルをプッシュしないと、他の開発者がチェックアウト出来ない仕様のため行う

git remote add origin /var/git/プロジェクト名 ←本流リポジトリへ追加する準備
git push origin master ←本流リポジトリへプッシュ


【例外】

「本流リポジトリへ追加する準備」などは、SSHだと次のような形になる。

git remote add origin ssh://ユーザー名@211.9.xxx.xxx/var/git/プロジェクト名

※「github」へのaddの場合は、公開鍵でパスワードなしで「github」に接続できる設定をした RSA暗号鍵をサーバー上で作成して行った

ssh-keygen -t rsa ←RSA暗号方式の鍵を作成
Generating public/private rsa key pair.
Enter file in which to save the key (/home/morimoto/.ssh/id_rsa): ←[Enter]キーを押す
Enter passphrase (empty for no passphrase): ←パスフレーズを入力 ※パスフレーズなしにした
Enter same passphrase again: ←もう一度同じパスフレーズを入力 ※パスフレーズなしにした
Your identification has been saved in /home/morimoto/.ssh/id_rsa.
Your public key has been saved in /home/morimoto/.ssh/id_rsa.pub.
The key fingerprint is:
f9:81:b6:c7:8f:b9:aa:3e:00:c0:b0:30:10:a0:0e:00 morimoto@211.9.xxx.xxx

これでできた公開鍵を、「github」に登録

4. 開発者が本流のリポジトリからチェックアウト

▼gitを使うユーザー情報。リポジトリにコミットした際に記録されます

git config --global user.name "Test Morimoto2"
git config --global user.email test.morimoto2@example.com

▼本流のリポジトリからチェックアウト

cd /home/ユーザー名/git_work ←Gitにてバージョン管理を行うファイルを置く場所
git clone /var/git/プロジェクト名

プロジェクト名のディレクトリと、初期ファイルが作成される

SSHだと次のような形になる。

clone ssh://ユーザー名@211.9.xxx.xxx/var/git/プロジェクト名

5. 開発開始

参考

せっかちな人のための git 入門 - git をインストールし、共同で開発できる環境を整えるまで http://blog.champierre.com/archives/670 続 せっかちな人のための git 入門 - 共有リポジトリの作り方 http://blog.champierre.com/archives/842 とっても優しい github の使い方 http://d.hatena.ne.jp/keita_yamaguchi/20080409/1207752188

■「Git」と 「Subversion

基本的な使い方・フローは、「Git」も「SVN」も変わらず。 ローカルリポジトリを持つため、便利な機能はたくさんある様子。 ↓などのコマンド一覧で色々ローカルリポジトリで試すとよさそう

Git/Subversionコマンド対応表 http://b4.x0.com/hiki/?Git%2FSubversion%A5%B3%A5%DE%A5%F3%A5%C9%C2%D0%B1%FE%C9%BD

Gitを使いこなすための20のコマンド http://sourceforge.jp/magazine/09/03/16/0831212

参考 これからGitを始める人が読むべき記事のまとめ http://www.akiyan.com/blog/archives/2009/05/posts-for-git-beginne.html