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を使い始めました。まだまだ始めたばかりなので試行錯誤しながらではありますが、使いこなせるように頑張りたいと思います。
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













コメントフォーム