平衡点


2015/03/17

_ Subversion から Git への移行

最近、「もう Git で良いよ!」とお許し頂いたので、某リポジトリを Subversion から Git へ移行する作業を行なった。以下、そのメモ

Authors.txt の準備

そのままだと、コミットログが寂しい事になるので、既存の author を mapping するテキストを作成しておく。Subversion の working copy で

% svn log $SVN_URL | awk -F'|' '/^r[0-9]+/ { print $2 }' | sort -u

として、commit した人の一覧を出して、

svn username = Fullname <email address>

といった塩梅のテキストを作成しておく(以下、 Authors.txt とする)。

git svn でリポジトリを clone

以下で。

mkdir pkg
git svn clone $SVN_URL --prefix=svn-import/ \
  --stdlayout --authors-file=Authors.txt --no-metadata pkg

ここで、 pkg は実際に作成される Git リポジトリの名前. --stdlayout は、Subversion にありがちな trunk/tags/branches を Git の branch, tag に上手く mapping するための option. --no-metadata を指定すると、コミットログから SVN URL が削除される。Subversion を今後使うつもりがないなら指定しておくと良い。

Subversion の情報の変換

上記で --prefix=svn-import/ としたので、Subversion の branch, tag は Git では全てブランチとして

% git branch -r
svn-import/hogehoge
svn-import/herohero
  :
svn-import/tags/hogehero-0_5

となる。このうち svn-import/tags を Git の tag に変換する。

ついでに、CVS 由来の、バージョン番号を =_</span>:)) で区切った番号付けを変更したり。

結果、以下の様なスクリプトを走らせた。

#! /bin/sh
for branch in `git branch -r | egrep "svn-import/tags/.+$"`; do
    version=`basename $branch | sed 's/_/./g'`
    subject=`git log -1 --pretty=format:"%s" $branch`
    GIT_COMMITTER_DATE=`git log -1 --pretty=format:"%ci" $branch` \
                      git tag -f -m "$subject" "$version" "$branch^"
    git branch -d -r $branch
done

タグはこれで良いかな。ブランチは不要そうなの軒並削除。 ついでに、今後弄らないであろう古いタグの名前付けを整理したり。

svn-remote.svn の削除

git svn で clone したので、Subversion関連の情報が .git 以下に残っている。 これを消すと終了

% git config --remove-section svn-remote.svn
% rm -rf .git/svn .git/{logs/,}refs/remotes/svn-import/

まとめ

Git に慣れた身としては、 git-svn に比べて、やはり快適である。

…そして、過去の VCS から引き継いできたコミットログなので、ChangeLog の生成をどうするか、という点で悩み始める、など。いっそ git log をそのまま貼りつけてやろうかしらん。コミットがアトミックじゃないので、適宜 squash した方が良いだろうか。

あとは、リポジトリの外部公開かな。 Gitweb - Git SCM Wiki を使うのがやっぱり一般的なんだろうかね。


連絡先など
最近の日記
  • 2024/10/09
    • 1. Mastodon でのメール通知, というか Exim4 と Apparmor
  • 2024/06/19
    • 1. WSL2 での gpg-agent, ssh-agent
  • 2024/06/18
    • 1. WSL で Windows 側のフォントを利用する
  • 2024/06/17
    • 1. WSLとWindowsの時刻同期
  • 2024/06/12
    • 1. wsl2 で systemd
    • 2. wslg の設定
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|04|05|06|10|
Back to Top ▲