コード管理システムの移行

OSDN では、コード管理システム間でのデータ移行も受け付けています。

移行は Web 上から自動的に行うことは出来ません。 プロジェクト管理者がログインした状態でサポートリクエストに移行したいプロジェクト名と必要事項を記入してください。OSDNスタッフが対応いたします。

基本的には該当するプロジェクトソースコードリポジトリの管理作業の権限のある方から つまりプロジェクト管理者からの依頼のみとさせていただきます。なんらかの事情でプロジェクト管理者権限がない方からの依頼となる場合はプロジェクト管理者からの委任であることがわかるようにしていただくか(例えば依頼のチケットに委任している旨プロジェクト管理者からコメント等をいただくなどしていただくか)、あるいは特殊な事情があるケースでは個別にその旨をご相談下さい。

OSDN 上で別のシステムへ移行する場合

CVS から Subversion への移行

移行したいプロジェクト名をサポートリクエストに記入してください。 スタッフがサーバ上で変換をいたします。 プロジェクトのCVSの使い方によっては変換できない場合があります。

変換された Subversion レポジトリのレイアウトは以下の形式になります。

/svnroot/yourproject
/svnroot/yourproject/yourmodule1
/svnroot/yourproject/yourmodule1/branches
/svnroot/yourproject/yourmodule1/tags
/svnroot/yourproject/yourmodule1/trunk
/svnroot/yourproject/yourmodule2
/svnroot/yourproject/yourmodule2/branches
/svnroot/yourproject/yourmodule2/tags
/svnroot/yourproject/yourmodule2/trunk

もし、この形式以外の変換をかけたい場合は、CVSに関するFAQ#Q: CVSレポジトリを手元にまるごとバックアップできますか? に従って rsync でレポジトリ全体を取得し、ご自分で Subversion のダンプファイルを作成してください。

Subversionの使い方ページも参照してください。

Subversion から Git への移行

1. OSDN上にGit リポジトリを作成する

まず、OSDN側にgitリポジトリを作成しましょう。プロジェクト管理メニューの「機能選択/設定」を開き「Git」にチェックをつけて「更新」を押して、Git機能を有効にします。有効にしたら、Git項目の「管理」のリンクをクリックしてGitの管理ページを開きましょう。

Gitの管理ページにある「新規リポジトリの作成」をクリックして、リポジトリ名などを決めリポジトリを作成します。 (以下の説明では test1 という名前のリポジトリを作成したものとします)

リポジトリが実際に利用できるようになるまでは数分かかりますので、次の工程に進んでおきましょう。

2. 作業用レポジトリにSubversionのレポジトリの内容を取り込む

Subversionレポジトリの内容を取り込み、作業用のGitレポジトリを作成しましょう。 作業用のディレクトリを作成して、カレントディレクトリを変更しておきます。

mkdir -p ~/work/GIT
cd ~/work/GIT

git svn コマンドを利用して以下のように実行します。 (username/projectnameはご自分のユーザ名/目的のプロジェクト名で置き換えてください)

git svn clone -s svn+ssh://username@svn.osdn.net/svnroot/projectname/

projectname にGitレポジトリが作成されます。 もし対象の Subversion レポジトリのURL直下が trunk, branches, tags という標準の構成でない場合は、-s を外して (必要であれば tag などの場所をオプションで指定して)ください。

次に、いま clone したレポジトリ内に cd し、 OSDNに作成したGitリポジトリをoriginとして登録しておきましょう(必須ではないですが、以下登録したものとして作業を説明します)

cd projectname
git remote add origin username@git.osdn.net:/gitroot/projectname/test1.git
3. OSDNのレポジトリにpushする

作業用ディレクトリに取り込んだ内容を OSDN のリポジトリに反映させるために push を行ないます。tagやbranchの内容も含めて反映するために--mirrorオプションを使いましょう。

git push --mirror origin master

CVS から Git への移行

基本的には 2 の実際の取り込み部分を除き Subversion から Git への移行と同様の手順をとります。 (以下、変更点のみを説明します)

1. OSDN上にGit リポジトリを作成する

CVS 上に複数のモジュールを作成しており、それぞれを別々の git リポジトリに取り込むような場合(あるいは一部のモジュールのみ取り込む場合)は 個々対応するGitリポジトリを作成しておきます。以下では CVS 上に test2 というモジュールが作成されているものとします。またGit上にもtest2という リポジトリを作成したものとします。

2. 作業用リポジトリにCVSのモジュールの内容を取り込む

作業用のディレクトリを作成します。

mkdir -p ~/work/GIT
cd ~/work/GIT

Git では changelog にメールアドレスを記録することができますが、CVS にはその情報がないのでそれをマッピングする ための情報を記述したマッピングファイルを作成します(なお、このマッピングファルがなくても メールアドレスの記述が おかしくなるだけで取り込み自体は行なえます。ユーザのマッピングを行わないのであれば、この作業は飛ばしてください)

例えば commit ログ上に foo1 と foo2 というユーザがおり、foo1の名前とメールアドレスが「Foo1 Taro」/「foo1@example.com」、 foo2 が同様に「Foo2 Jiro」/「foo2@users.osdn.me」である場合以下のような形式になります(CVS 上のユーザネーム = Git 上での ユーザ名とメアド という形式です。実際には Git 上でのユーザ名は任意の文字列を割り当てできます)

foo1=Foo1 Taro <foo1@example.com>
foo2=Foo2 Jiro <foo2@users.osdn.me>

以下、ファイルは ~/work/GIT/user_map.txt に置いたものとします。

実際に CVS から Git にデータを取り込むには以下のようにします。

git cvsimport -v -A ~/work/GIT/user_map.txt -d :pserver:anonymous@cvs.osdn.net:/cvsroot/projectname -C test2.git test2

(ユーザのマッピングを行わない場合は、 -A ~/work/GIT/user_map.txt というオプションを取り払ってください)

この取り込みにはかなりの時間を要します。これで ~/work/GIT/test2.git というディレクトリに CVS の内容が Git リポジトリとして 取り込まれました。

取り込みが終わったら Subversion のケースと同様に OSDN のGitリポジトリを origin として登録しておきます。

cd test2.git
git remote add origin username@git.osdn.net:/gitroot/projectname/test2.git

あとは Subversion のケースと同様に push すれば OSDN のリポジトリに反映されます。

注意

CVSは非常に古いツールであるため、非欧米系言語(日本語や中国語など)の利用のハンドリングがほとんど行われていません。そのため、changelog等に例えば日本語で記述するようなケースでは、各種文字コードでの記述が可能になってしまっています。

UTF-8 以外でchangelogを記述しているようなケース(例えば日本語のchangelog を Shift JISで記述しているようなケース)、さらには文字コードが混在してしまっているようなケースでは、Gitへの変換を行った際にchangelog が文字化けします。

この部分が問題になる場合には上記の標準的な方法では CVS から Git への取り込みが行なえません。 (cvsimport 自体にカンタンなパッチをあてて文字コード判定と変換を行わせることで対応できる場合がありますが、そのようなパッチに関するサポートはこちらでは行なえません)

CVSからSubversion への変換時に同様な問題が発生しますが、文字コードを変換することができるため、 このドキュメントにあるような Subversion への変換を経由する(CVS からいったん Subversion に変換後、さらにそれを Git に変換する)ことで うまくいくケースがあります。そういう状態の場合はチケットからご相談ください。

外部レポジトリから OSDN 上へ移行する場合

Subversion への移行

svnsyn を使うことでリポジトリをコピーすることが可能ですので svnsync コマンドを利用してみてください。

なお、リポジトリ自体が大きいような場合やネットワークが不安定な場合など接続が長時間に渡る場合、処理がタイムアウトしてしまう場合があります。どうしてもうまくいかない場合は、以下のような手順でサポートリクエストのチケットからご相談下さい。

  • 手元のリポジトリ上で svnadmin dump コマンドを実行し、svn のダンプファイルを作成してください。なお、WIndows上で作業を行う場合はPowerShell上で作業を行わないで下さい。PowerShell上でsvnadmin dump を行うとファイルのencodingがUCS2に自動的に変換されてしまうため、こちらでリストアできなくなります。
  • 作成したダンプファイルが小さい場合(10MB 程度の場合)はチケットにそのまま添付してかまいません。
  • 作成したダンプファイルが大きい場合は、いすれかこちらでアクセスできる場所(例えば google driver 等)に置いた上でURLをお知らせいただくか、OSDN の shellサーバのホームディレクトリに置いていただきファイル名とともにshellサーバに置いた旨をお知らせ下さい。
  • ファイルの破損がないか確認するために何らかのファイルのハッシュ(sha512sumなど)をチケットに記載いただくことをオススメします。
  • 取り込み先のプロジェクト名を必ず記載して下さい。

ダンプファイルを受け取った後、数営業日にこちらでリポジトリへのrestoreを行います。なお、restore前にリポジトリの内容は一旦リセット(空の状態)にさせていただきます。それまでになんらかのcommitが行われていても全て削除されます、お気をつけ下さい。

Git への移行

git push で対応出来ない移行が必要な場合は、具体的に行いたいことをチケットにてご相談ください。

なお OSDN の Git リポジトリはディフォルトではリポジトリ操作業の事故を防ぐために Non Fast Foward が禁止された状態で作成されます。外部からのGitレポジトリの取り込みなどで Non Fast Foward な操作が必用な場合は Non Fast Foward な操作を許可する設定を行う必用があります。リポジトリの管理メニューの各リポジトリの「編集」から「Non Fast Fowardを許可する」をオンにしてください(リポジトリへの反映に5分ほどかかります)