2008.02.21 Thursday
このエントリーは「はやりのgitをインストールした。そして使おうとしてみた。」の続きだよ。
前回の問題点が解決されて、CodeReposでgitを使う手順がまとまった(インストールまでは前回のエントリを参照のこと)。
こないだのエントリーを見たtypesterさんからtwitterでこんな指摘を頂いた。
「@jun_ichiro: git svn init の -s オプションが何を表してるか調べたほうがいいと思いますよ。。」
そりゃそうだ。早速マニュアルを見てみることに。
そしたら、-s はstdlayoutの略でスタンダードレイアウトとはtrunk,tags,branchesがセットされていることと書かれていたんだ。そう、だからPlaggerのレポジトリに対して行ったときはあの手順でうまくいって、CodeReposに対して行ったときはうまくいかなかったんだ。
で、じゃあどうやってCodeReposに対して行うかだ。
特にオプションを指定しないでinitを実行する。
とりあえず寝る。
翌朝。
fetchは終わってた。次に教わった手順通りにいろいろやってみる。
まずはsvnが変更されているかもしれないので、rebaseの実行だ。
うまくいった。ちょこっと変更があったみたいだ。
それからいろいろ編集してみる。そして、
ここで -a のスイッチについて簡単にまとめておく。
svnでは新規に追加したファイルにはsvn add などが必要だったが、編集したファイルは特に気にせずsvn ci を実行すればよかった。ところが、gitでは追加したファイルも編集したファイルもgit add が必要になる。
また、不要になったファイルは単純にrm で削除するのではなくgit rmで削除しなければならない。(これはsvnでもほとんど同じだが)
つまり、もとからバージョン管理されているhello.c というファイルを編集して、さらに、バージョン管理されているgoodbye.c というファイルを削除したければ、下記のように実行しなければならない。
話を戻す。
commit -a のあとにコメントの入力を促されるのでコメントを入力する。
この時点ではまだローカルのgitレポジトリにコミットされるだけだ。
最後にこれをsvn側へコミット。
git のコマンド群は「git svn (...)」となっているものはリモートのsvnレポジトリに関連する操作で、単に「git (...)」となっているものはローカルのgitレポジトリに関連する操作のようだ。
これで一通りうまくいった...
けれども、問題も残っている。
いままでの一連の作業はすべてcodereposのshare全体に対して行われている。つまり、例えば「git status」を実行すれば自分の興味のないプロジェクトのディレクトリなどもすべて精査する。だからとにかく時間がかかるのだ。当然「commit -a(または git add)」を行うときだって、すべてのディレクトリを精査する。
実はここであげた一連の作業は、やりたいことはできるのだが、めちゃんこ遅い。
もう少し調べないと...とてもじゃないが使えない。
あと一歩なんだけど。
前回の問題点が解決されて、CodeReposでgitを使う手順がまとまった(インストールまでは前回のエントリを参照のこと)。
こないだのエントリーを見たtypesterさんからtwitterでこんな指摘を頂いた。
「@jun_ichiro: git svn init の -s オプションが何を表してるか調べたほうがいいと思いますよ。。」
そりゃそうだ。早速マニュアルを見てみることに。
$ man git-svn
そしたら、-s はstdlayoutの略でスタンダードレイアウトとはtrunk,tags,branchesがセットされていることと書かれていたんだ。そう、だからPlaggerのレポジトリに対して行ったときはあの手順でうまくいって、CodeReposに対して行ったときはうまくいかなかったんだ。
で、じゃあどうやってCodeReposに対して行うかだ。
特にオプションを指定しないでinitを実行する。
$ cd ~/Workcodereposはリビジョンが7000とか超えてたからこりゃ時間がかかりそうだ。
$ mkdir coderepos
$ cd coderepos
$ git svn init http://svn.coderepos.org/share/ share
$ cd share
$ git svn fetch
とりあえず寝る。
翌朝。
fetchは終わってた。次に教わった手順通りにいろいろやってみる。
まずはsvnが変更されているかもしれないので、rebaseの実行だ。
$ git svn rebase
うまくいった。ちょこっと変更があったみたいだ。
それからいろいろ編集してみる。そして、
$ git commit -a
ここで -a のスイッチについて簡単にまとめておく。
svnでは新規に追加したファイルにはsvn add などが必要だったが、編集したファイルは特に気にせずsvn ci を実行すればよかった。ところが、gitでは追加したファイルも編集したファイルもgit add が必要になる。
また、不要になったファイルは単純にrm で削除するのではなくgit rmで削除しなければならない。(これはsvnでもほとんど同じだが)
つまり、もとからバージョン管理されているhello.c というファイルを編集して、さらに、バージョン管理されているgoodbye.c というファイルを削除したければ、下記のように実行しなければならない。
$ #(hello.c編集後)このcommit に先ほどの -a のスイッチをつけると下記のような流れで済む。
$ git add hello.c
$ git rm goodbye.c
$ git commit
$ #(hello.c編集後)svnでの作業に慣れていれば、こちらの方が自然だと思う。(編集ごときでaddなんてしてらんないもんね。)
$ rm goodbye.c
$ git commit -a
話を戻す。
commit -a のあとにコメントの入力を促されるのでコメントを入力する。
この時点ではまだローカルのgitレポジトリにコミットされるだけだ。
最後にこれをsvn側へコミット。
$ git svn dcommit
git のコマンド群は「git svn (...)」となっているものはリモートのsvnレポジトリに関連する操作で、単に「git (...)」となっているものはローカルのgitレポジトリに関連する操作のようだ。
これで一通りうまくいった...
けれども、問題も残っている。
いままでの一連の作業はすべてcodereposのshare全体に対して行われている。つまり、例えば「git status」を実行すれば自分の興味のないプロジェクトのディレクトリなどもすべて精査する。だからとにかく時間がかかるのだ。当然「commit -a(または git add)」を行うときだって、すべてのディレクトリを精査する。
実はここであげた一連の作業は、やりたいことはできるのだが、めちゃんこ遅い。
もう少し調べないと...とてもじゃないが使えない。
あと一歩なんだけど。