• Showing Page History #30966

Show page source of SCM_Migration #108149

[[PageNavi(NavigationList)]]

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

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

移行は Web 上から自動的に行うことは出来ません。
プロジェクト管理者がログインした状態で[https://osdn.net/ticket/newticket.php?group_id=10743&type=27985 サポートリクエスト]に移行したいプロジェクト名と必要事項を記入してください。OSDNスタッフが対応いたします。

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

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

=== CVS から Subversion への移行 ===

移行したいプロジェクト名を[https://osdn.net/ticket/newticket.php?group_id=10743&type=27985 サポートリクエスト]に記入してください。
スタッフがサーバ上で変換をいたします。
プロジェクトの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の使い方#CVSから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 への移行 ===

お手元のレポジトリに svnadmin dump コマンドを使って、ダンプファイルを作成してください。
ダンプをチケットに添付するか、その URL をお知らせください。

=== Git への移行 ===

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

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

[[PageNavi(NavigationList)]]