Subversionのリポジトリ下でgitを使ってみよう
こんにちは、熊谷です。
今まで長い間バージョン管理システムとしてSubversionを使っていました。特に不満もなく使い慣れているシステムなのでずっと使っていたのですが、あるとき、こういう環境でSubversionを使うのはちょっと不便かもしれないという状況が生まれ、いろいろ考え調べてみた結果、gitが使えるのではないかという結論に達しまして、早速使ってみました。
そもそもSubversionとgitの違いは何なのか。Subversionは集中型、gitは分散型のバージョン管理システムで、Subversionは中央のリポジトリに対してコミットを行っていくのですが、gitは各ユーザが持つローカルのリポジトリに対して行います。そして、ローカルのリポジトリの内容を中央のリポジトリに反映したり、別のユーザが持つリポジトリを取得したり反映したりといったことが出来ます。
また、既にSubversionのリポジトリがある場合、そのリポジトリを中央リポジトリとして使いローカルではgitをということもできます。そんなことで、今回はそれでいってみます。
まずは初めてgitを使うのでユーザ名やメールアドレス、色、無視するファイルの設定等々を行います。
では、次にSubversionのリポジトリ(https://svn.hoge.local/repos/hoge-projectにあるとして)からgitのローカルリポジトリを作成します。
gitには作業ツリー、インデックス、ローカルリポジトリといったレイヤーがあります。
流れ的にはまず作業ツリーからインデックスにaddして、
インデックスからローカルリポジトリにcommit
そして、そのローカルリポジトリから中央リポジトリのSubversionのリポジトリへコミット
Subversionのリポジトリとgitのローカルリポジトリを同期させるには
以上が本当に最低限の流れでしょうか。
で、作業ツリーとインデックスの差分を表示したい場合は
インデックスとローカルリポジトリの差分を表示したい場合は
作業ツリーとローカルリポジトリの差分を表示したい場合は
そして、ローカルリポジトリからファイル(例えばhoge_file_2.php)をチェックアウトしたい場合は
そんでもって、未だコミットしたくないファイルがあるけどローカルリポジトリにコミットしてあるファイルらは中央リポジトリ(Subversionのリポジトリ)にコミットしなければならないという場合。そういう状況下でgit svn dcommitをすると
ということで、こんな感じでgitを使い始めました。まだまだ始めたばかりなので試行錯誤しながらではありますが、使いこなせるように頑張りたいと思います。
今まで長い間バージョン管理システムとしてSubversionを使っていました。特に不満もなく使い慣れているシステムなのでずっと使っていたのですが、あるとき、こういう環境でSubversionを使うのはちょっと不便かもしれないという状況が生まれ、いろいろ考え調べてみた結果、gitが使えるのではないかという結論に達しまして、早速使ってみました。
そもそもSubversionとgitの違いは何なのか。Subversionは集中型、gitは分散型のバージョン管理システムで、Subversionは中央のリポジトリに対してコミットを行っていくのですが、gitは各ユーザが持つローカルのリポジトリに対して行います。そして、ローカルのリポジトリの内容を中央のリポジトリに反映したり、別のユーザが持つリポジトリを取得したり反映したりといったことが出来ます。
また、既にSubversionのリポジトリがある場合、そのリポジトリを中央リポジトリとして使いローカルではgitをということもできます。そんなことで、今回はそれでいってみます。
まずは初めてgitを使うのでユーザ名やメールアドレス、色、無視するファイルの設定等々を行います。
- $
git config --global user.name 'hogehoge' - $
git config --global user.email 'hogehoge@hoge.local' - $
git config --global color.ui auto - $
git config --global core.excludesfile $HOME/.gitignore
では、次にSubversionのリポジトリ(https://svn.hoge.local/repos/hoge-projectにあるとして)からgitのローカルリポジトリを作成します。
- $
mkdir hoge-project - $
cd hoge-project - $
git svn clone -s https://svn.hoge.local/repos/hoge-project .
gitには作業ツリー、インデックス、ローカルリポジトリといったレイヤーがあります。
流れ的にはまず作業ツリーからインデックスにaddして、
- $
git add hoge_dir/hoge_file.php
インデックスからローカルリポジトリにcommit
- $
git commit
そして、そのローカルリポジトリから中央リポジトリのSubversionのリポジトリへコミット
- $
git svn dcommit
Subversionのリポジトリとgitのローカルリポジトリを同期させるには
- $
git svn rebase
以上が本当に最低限の流れでしょうか。
で、作業ツリーとインデックスの差分を表示したい場合は
- $
git diff
インデックスとローカルリポジトリの差分を表示したい場合は
- $
git diff HEAD
作業ツリーとローカルリポジトリの差分を表示したい場合は
- $
git diff --cached
そして、ローカルリポジトリからファイル(例えばhoge_file_2.php)をチェックアウトしたい場合は
- $
git checkout hoge_file_2.php
そんでもって、未だコミットしたくないファイルがあるけどローカルリポジトリにコミットしてあるファイルらは中央リポジトリ(Subversionのリポジトリ)にコミットしなければならないという場合。そういう状況下でgit svn dcommitをすると
- $
git svn dcommit - Cannot
dcommit with a dirty index. Commit your changes first, or stash them with `git stash'. at /opt/local/libexec/git-core/git-svn line 497
- $
git stash - $
git svn dcommit - $
git stash apply - $
git stash drop
ということで、こんな感じでgitを使い始めました。まだまだ始めたばかりなので試行錯誤しながらではありますが、使いこなせるように頑張りたいと思います。
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



最近のコメント