gitやgit-svnを使うにあたり、試したことや引っかかったことについて、yukiのエントリ ウノウラボ Unoh Labs: subversionリポジトリでもgitが使えるgit-svn のつづきを書いてみました。


gitのコマンド補完は git-completion.bash が便利です。
fedoraにyumでgitを入れた場合には下記場所にあります。
/usr/share/doc/git-VERSION/cntrib/completion/
自分の見える場所にgit-completion.bashがなければ、インストール済みのgitと同じversionのgitのソースをダウンロードします。
cntrib/completion/
に入っているので.bashrcのなかで読み込みましょう。補完が効くようになります。


$ git svn show-ignore >> .git/info/exclude
svn:ignoreと.gitignoreで混乱しないようにしましょう。


gitだけを使ったプロジェクトで空ディレクトリ作りたいときは空の.gitignore ファイルをいれておくのが定番です。
git-svn利用時に.gitignoreをコミットしていいかについては話し合いましょう。


How do I keep an svn:external up to date using git-svn? - Stack Overflow
andrep's git-svn-clone-externals at master - GitHub
ほかにもいろいろ手段はあって、一長一短の解説が書いてあるページもありました(url失念)。私はシンプルなのがいいと、git-svn-clone-externalsを利用しています。事前に別の場所で試してみるとよいでしょう。


$ git svn show-externals
これが見えていないとfetchできません。
私の場合、見えていたリポジトリと見えてないリポジトリがありました。
リポジトリ間の設定を目diffして見えていない側に追加したところ、見えていなかった側からshow-externalsが見えるようになりました。
ここはちょっとよくわからないです。svn側がtrunk決め打ちの人しか下記追加は当てはまらないと思います。
$ git config --add svn-remote.svn.url svn+ssh://example.com/path/to/repository/trunk $ git config --add svn-remote.svn.fetch :refs/remotes/git-svn
同じプロジェクトで同じ開発マシンを使っているのにshow-externalsが見えない人もいました。原因を探す余裕がない場合は別の手段をとるしかないでしょう。git submodule使うとか、git cloneして放り込んでignoreとか、動く手段を探してください。


ローカルのgitリポジトリにコミットしたあと、
$ git branch //今のブランチを確認 * 000_TOPIC_BRANCH master $ git diff //差分ないことを確認 $ git checkout master $ git branch //今のブランチを確認 000_TOPIC_BRANCH * master $ git svn rebase //svn update相当 $ git merge --no-ff --no-commit 000_TOPIC_BRANCH $ git add . $ git commit -v $ git svn dcommit
できました!
no-ffなのはよくわかっていなくておまじない状態です。
no-commitは自分でdiffとつき合わせてコミットログを書きたいからです。
ローカルのgit側では頻繁にcommitかつ適当にコメントを書いているので、リモートのsvn側にpushする際にきちんとコミットコメントをかくように調整しています。
ただこの運用でsvn側のコミット粒度が荒くなってしまったので、注意がいるかもしれません。


結局のところ何でもかんでもすべてをgitやgit-svnでやろうとするのは無理があるので、こみいったところはsvnコマンドたたくほうがよいと思います。ほかにもtortoiseSVNとtortoiseGitの違いとかwindowsでgitとかいろいろあると思います。
濱野さんの入門Gitの「chapter16 間違いからの回復」を繰り返し参照することになるので手元にあると便利ですね。
以上デース