git-svnでsvnリポジトリにすればひととおりタグは読めるのですが、svn側のタグはgitではブランチとして記憶されます。これらをgitのタグとして使いたかったので、bashでスクリプトを書きました。
git-pin-svn-tags.sh
#!/bin/bash
for branch in `git for-each-ref --format='%(refname)' | grep tags/`
do
git show --pretty=format:%s%n%n%b "$branch" | git tag -F - "`basename $branch`" "$branch^"
done
コミットを消したりはしないので破壊的なことはないと思います。
単純にやるとgit branch
をxargs
に突っ込むだけですむはずですが、上のように長くした理由を説明します。
Subversionでタグを作る時は「trunkで作業する→tagsディレクトリにコピー」のようにします。git-svnはSVNでのコミットをひとつひとつ忠実にgitのコミットに直すので、最後のコピーするコミットも単独のコミットになります。すると、特に変更内容のないコミットが各ブランチの先端にくることになります。この空コミットを省いてしまうのが冒頭のスクリプトです。
コピー時のメッセージはタグに含めることにしました。
(参考: for-each-ref)