- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Subversion

はじめに Edit

cvsからSubversionへの移行について。

ここでの想定 Edit

  • 主にリポジトリの移行を扱う
  • cvsリポジトリはWinCVS 1.2あたりでログなどはSJIS EUC_JPで入っているはず
  • ローカルのリポジトリとして変換して、TortoiseSVNで動作を確認

WinCVSでまずは確認 Edit

下記サイトで WinCVS1.3b14-SJIS-12 を入手して、
あろはだよCVS

既存のリポジトリがちゃんと読めるか確認します。

手順

  1. メニュー「リモート」→「チェックアウト」開く
  2. c:\CVSROOT\hoge でEUC-JPでログを書いてあるというプロジェクトならば、
    • モジュール名を hoge
    • チェックアウトするローカル親フォルダを適当に設定
    • 全般タブで 認証方法を local
    • リポジトリパス(とCVSROOT)を c:\CVSROOT\
    • 文字コード変換で、更新ログをEUC-JPに
  3. しかし、オプションで「特定のリビジョンが見つからなかった場合、一番近いリビジョンを利用する」にチェックを入れているにもかかわらず、何故かトップフォルダのみがチェックアウトされ、ファイルがチェックアウトできなかった???)
  4. ツールバーのフォルダ参照ボタンで現在開いているフォルダをチェックアウトしたフォルダに変える
  5. チェックアウトされたフォルダを左のツリーから選択、右クリック「アップデート」で、
    オプションで「特定のリビジョンが見つからなかった場合、一番近いリビジョンを利用する」にチェックを入れて「OK」
  6. これですべてのファイルをチェックアウトしてみて、
    適当なファイルを選択し、メニュー「問い合わせ」「リビジョングラフ」(GUIで表示)や「問い合わせ」「更新履歴」(下のログに流れてみづらい…)で確認してみて下さい。
    とりあえず、文字化けしなければOKか。

※てっきりSJISでログを入れていたかと思ってたら履歴が文字化けして、EUCJPだったりしました。必ず文字コードは確認しましょう

文字コードの確認には、リポジトリ内のファイル(ログが入っている)をエディタなどで開いて確認するか、もしくは、cygwin等のnkfで確認出来るかと

$ nkf -guess mage.log,v
EUC-JP (LF)

↑EUC-JPでした

cvs2svnで変換 Edit

cygwin 1.7のsetup.exeでcvsとcvs2svnを入れました。
(ただし、svnはWin32のコマンドライン版だったような気がします)

あとは、出力したいディレクトリで

cvs2svn --encoding=euc_jp --encoding=utf_8 --default-eol=CRLF -s /svn/hoge /CVSROOT/hoge

などとして変換します

上記は、

  • エンコーディングにeuc_jpとutf_8を考慮
  • svnでチェックアウト時にLFになってしまうので、CRLFに変換

という設定なので、環境に合わせて変えてみて下さい。

こちらの環境では、"--encoding=utf_8"が足りないと
日本語ファイル名のファイルがあったせいか、

ERROR: Unable to convert a path 'branches/avendor/unko.txt へのショートカット.lnk' to internal encoding.
Consider rerunning with one or more '--encoding' parameters or
with '--fallback-encoding'.
Exception exceptions.AttributeError: "'NoneType' object has no attribute 'error'" in <bound method Popen.__del__ of <subprocess.Popen object at 0xXXXXXXXXX>> ignored

というようなエラーがでてしまいましたので入れてあります。

確認 Edit

cvsでチェックアウトしたものと、
svnでチェックアウトしたものを比較して確認してみます。

diff -ru --exclude="CVS" --exclude=".svn" (cvsでチェックアウトしたディレクトリ) (svnでチェックアウトディレクトリ)  > out.diff 

のようにチェックします。

例えば、

diff -ru --exclude="CVS" --exclude=".svn" cvs_hoge svn_hoge > out.diff 

といった感じです。

あとは、out.diffの内容をみて問題ない違いが許容範囲ならOKです。

こちらの例では、"$Id: " でのチェックアウト時の文字列展開の違いだけが差分になっていたのでOKと判断しました。


No comment. Comments/Subversion/cvsからの移行?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-06-16 Wed 06:24:58 JST (3463d)