このブログに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