0
0

More than 3 years have passed since last update.

いまさらだけどSubversionからGitへ移行する(その3: SVN Rev)

Last updated at Posted at 2020-07-16

先日、こちらの記事を書きました。

いまさらだけどSubversionからGitへ移行する(その1: リポジトリー変換)
いまさらだけどSubversionからGitへ移行する(その2: プロジェクト・ディレクトリー分割)

今回はその続きで SVN リビジョンをどう Git にマッピングさせるか。移行したプロジェクトの一部では SVN Rev をバージョン表記に適用しているので、これをどうするべきか。

SVN のリビジョンのバージョン表記への利用

Git ネイティブなヤング達はご存じない方も既にいるだろうが、r1234 なんてのがバージョン表記に現れたりしているやつです。

Git で運用しているプロジェクトだと SHA1 ショートハッシュから…。

$ git rev-parse --short HEAD
b34f896

この値を version 1.2.3-b34f896 などするものをよく見かけるはずです。それの SVN でよく利用されていた版です。

手元の Linux 系 OS でパッケージ一覧表示してみると gitXXXXXX とか rXXXX svnXXXX ってやつがあると思いますが、それ。

$ # CentOS/RHEL
$ yum list
...
$ # Debian/Ubuntu
$ apt list
...

SVN Rev 実使用例

たとえば、Subversion 自体のバージョン表記がこれなので、手元の SVN がインストールされている環境で version を確認してみると…。

$ svn --version
svn, version 1.10.4 (r1850624)

余談ですが、Redmine の SVN リポジトリー https://svn.redmine.org 2020-07-16 現在は Powered by Subversion version 1.6.6 (r40053). となんだか古いですね。新しいものを利用すれば良いってものでもないですが、 redmine.org 自体ドッグフーディングもせず、古い Redmine アプリケーションで運用している様だしなんなのでしょうね。

移行で困る点

Version ${major}.${minor}.${tiny}.${revision}

バージョン表記が上記のように、上位の部分は任意の値を開発者が付与するものとして、最終の revision 部分をこの SVN Rev から取得している場合。

  • SVN の特徴でもある Revision 値がインクリメンタルであることを前提としている
  • SHA1 hash の様なアルファベットを含む値では稼働(ビルド)できない (.NET Assembly など)
  • 政治的な理由で数値のままにしたい

対応

Linux/UNIX などの shell 環境

wc と sed とを組み合わせてそれまでのコミット回数をカウントするという方法がよく利用される模様。

$ git log --oneline | wc -l | sed -e "s/[ \t]*//g"
1234

参考: Git で SVN みたいなリビジョン番号を取りたい - トリの部屋

Windows cmd 環境

上記の wc+sed の例はよく見かけるので知っていたのだが、Windows 環境のプロジェクトもあるのでこれをどう対処したか。

C:\Work\proj> git log --oneline | find /v /c ""
1234

こんな感じで空文字にマッチしない行数をカウントとすればよい。

Windows PowerShell 環境

PS C:\Work\proj> (git log --oneline).Length
1234

cmd よりもシンプルにできた。私はとりあえず find で実現してしまったが、こちらに移行するかも。

つづく

上記で少し触れたが、 .NET Framework 環境のプロジェクトも移行させ AssemblyVersion をどうするか検討したので、その点について書くかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0