clock-up-blog

go-mi-tech

サクラエディタ GitHub 移行

概要

日本製 OSSテキストエディタである サクラエディタ はずいぶんと前から SourceForge.net 上で Subversion 管理されている。

ずいぶんと長い間サービスを継続していただいている SourceForge に感謝の念は尽きない。が、今の時流としては SourceForge による Subversion 管理を続けるよりも、機会があれば GitHub 側に移行したほうが機能追加や修正等のプルリクエストを受け付けやすくなり、品質の向上に繋がるのでは、というのが自分の所感。

今回はコミュニティに対しては事後承認的な形で、サクラエディタ V2(UNICODE版) 部分のリポジトリGitHub に移行してみる。
コミュニティの承認が得られれば今回の GitHub 移行を正式なものとみなし、更なる整備を進めたい。

今回の移行によって期待される効果

移行前: SourceForge (Svn)

  • 🤢 ブランチ運用がしにくいので、trunk への直コミットがほとんど。
  • 🤢 コミッタ以外の人がコードを修正したい場合には patch を作成して受け渡すオールド形式。
  • 🤢 サーバがときどき重い。

移行後: GitHub (Git)

  • 😃 柔軟なブランチ運用が可能。
  • 😃 PRで手軽に修正リクエストを投げられる。
  • 😃 レビューもしやすい。
  • 😃 派生プロジェクトも作られやすく、発展性が期待できる。
  • 😃 ブラウザ上でソースコードを見やすい。
  • 🤢 学習コストは少しある。

移行ポリシー

スコープ

サクラエディタには V1(ANSI版) と V2(UNICODE版) があるが、両方対応していたらキリがないので、今回は V2(UNICODE版) に絞って移行作業を行った。

コミットログの全移行

移行対象の Subversion リポジトリのコミットログ情報はそのまま Git のコミットログとして移行することにする。

移行手順

移行元 Subvesion リポジトリの確認

Subversion 側の構成を確認し、どのようなリポジトリを作成する必要があるかどうか確かめる。
基本的には https://svn.code.sf.net/p/sakura-editor/code/ の直下にあるフォルダをそれぞれ1つのリポジトリとして移行することになる。

f:id:kobake:20180520144548p:plain:w600

サクラエディタリポジトリ構成はやや特殊で、「trunk」とは別に「trunk2」という名前の trunk が存在する。

これは歴史的な経緯によるもので、
「trunk」を本来の ANSI 版として運用し、
「trunk2」を新しい UNICODE 版として運用している、という事情がある。

このあたりの特徴に気を付けつつ GitHub 移行を進める。
(「trunk」「trunk2」の両者があるものについては今回は「trunk2」を移行対象とする)

GitHub Organization の作成

sakura-editor という GitHub Organization を作成した。Organization は public リポジトリのみ扱う用途であれば無料で作成できる。
github.com

GitHub Repositories の作成

移行元 Subversion リポジトリの情報に従い、「sakura」「bregexp」「help」「installer」「macro」「plugin」の6個のリポジトリを作成した。

f:id:kobake:20180520145542p:plain:w400

移行

git-svn 機構 により Subversion から Git への移行を行う。

$ mkdir sakura-editor
$ cd sakura-editor

$ git svn clone https://svn.code.sf.net/p/sakura-editor/code/ \
  --trunk=sakura/trunk --branches=sakura/branches/* --branches=sakura/trunk2* \
  --tags=sakura/tags/* sakura
$ cd sakura
$ git reset --hard origin/trunk2
$ git remote add github git@github.com:sakura-editor/sakura.git
$ git push github master
$ cd ..

$ git svn clone -s https://svn.code.sf.net/p/sakura-editor/code/Bregexp/ bregexp
$ cd bregexp
$ git remote add github git@github.com:sakura-editor/bregexp.git
$ git push github master
$ cd ..

$ git svn clone --trunk=trunk --branches=trunk2* --tags=tags/* https://svn.code.sf.net/p/sakura-editor/code/help/ help
$ cd help
$ git reset --hard origin/trunk2
$ git remote add github git@github.com:sakura-editor/help.git
$ git push github master
$ cd ..

$ git svn clone --trunk=trunk2 https://svn.code.sf.net/p/sakura-editor/code/installer/ installer
$ cd installer
$ git remote add github git@github.com:sakura-editor/installer.git
$ git push github master
$ cd ..

$ git svn clone --trunk=trunk2 https://svn.code.sf.net/p/sakura-editor/code/macro/ macro
$ cd macro
$ git remote add github git@github.com:sakura-editor/macro.git
$ git push github master
$ cd ..

$ git svn clone --trunk=trunk2 https://svn.code.sf.net/p/sakura-editor/code/plugin/ plugin
$ cd plugin
$ git remote add github git@github.com:sakura-editor/plugin.git
$ git push github master
$ cd ..

コミュニティに対するメッセージ

2018-05-20 に以下掲示板への伝言を残した。あとはコミュニティの反応待ち。