SYNOPSIS

git cvsimport [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>]
              [-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
              [-C <git-repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
              [-a] [-m] [-M <regex>] [-S <regex>] [-L <commit-limit>]
              [-r <remote>] [-R] [<CVS-module>]

DESCRIPTION

Warning
git cvsimport はcvspsバージョン2を使用しますが、cvspsバージョン2は非推奨とされています。 git cvsimport はcvspsバージョン3以降では動作しません。 CVSリポジトリのワンショットインポートを実行している場合は、 cvs2git または cvs-fast-export の使用を検討してください。

CVSリポジトリをGitにインポートします。新しいリポジトリを作成するか、既存のリポジトリに追加インポートします。

CVSログをパッチセットに分割するには、「cvsps」を使用します。 少なくともバージョン2.1が必要です。

Warning
特定の状況では、インポートによって誤った結果が発生します。 詳細については、 ISSUES セクションを参照してください。

git cvsimport によって作成されたブランチに対して独自の作業を「絶対に」行ってはいけません。 デフォルトでは、初期インポートにより、自由に操作できるCVSリポジトリのメインブランチから「master」ブランチが作成され、データが入力されます。 その後、自分で増分インポート(incremental imports)またはCVSブランチを git merge する必要があります。着信ブランチを分離して保護するために、 -r を介して名前付きリモートを指定することをお勧めします。

すべての開発者が読み取り/書き込みできる共有パブリックリポジトリを設定する場合、または git-cvsserver(1) を使用する場合は、インポートされたリポジトリのベアクローンを作成し、 共有リポジトリとしてクローンを作成します。 gitcvs-migration(7) を参照してください。

OPTIONS

-v

おしゃべりにします: cvsimportが何をしているかを報告します。

-d <CVSROOT>

CVSアーカイブのルート。 ローカル(単純なパス)またはリモートの場合があります。 現在、 :local: と :ext: と :pserver: アクセスメソッドのみがサポートされています。 指定しない場合、 git cvsimportCVS/Root から読み取ろうとします。 そのようなファイルが存在しない場合は、 CVSROOT 環境変数をチェックします。

<CVS-module>

インポートするCVSモジュール。 <CVSROOT>を基準にしています。 指定しない場合、 git cvsimportCVS/Repository からそれを読み取ろうとします。

-C <target-dir>

インポート先のGitリポジトリ。 ディレクトリが存在しない場合は作成されます。 デフォルトは現在のディレクトリです。

-r <remote>

このCVSリポジトリをインポートするGitリモート。 git clone がデフォルトで origin を使用する方法と同様に、すべてのCVSブランチを remotes/<remote>/<branch> に移動します。

-o <branch-for-HEAD>

(-r`を介して)リモートが指定されていない場合、CVSからの `HEAD ブランチはGitリポジトリ内の origin ブランチにインポートされます。 これは、 HEAD がすでにGitに対して特別な意味を持っているためです。 リモートが指定されると、 HEAD ブランチの名前は remotes/<remote>/master になり、 git clone の振る舞いを真似します。 別のブランチにインポートする場合は、このオプションを使用します。

-o master を使用すると、古いcvs2gitツールによって最初に実行されたインポートを続行します。

-i

インポートのみ: インポート後にチェックアウトを実行しません。 このオプションにより、作業ディレクトリとインデックスは変更されずに残り、存在しない場合は作成されません。

-k

排除キーワード(kill keywords): ノイズの多いチェンジセットを回避するために、CVSアーカイブからファイル名に -kk が付くファイルを抽出します。 強くお勧めしますが、初期にインポートされたツリーとの互換性を維持するために、デフォルトではオフになっています。

-u

タグ名とブランチ名のアンダースコアをドットに変換します。

-s <subst>

ブランチ名の文字 / を <subst> に置き換えます

-p <options-for-cvsps>

cvspsの追加オプション。 オプション -u および -A は暗黙的であり、ここでは使用しないでください。

複数のオプションを渡す必要がある場合は、それらをコンマ(,)で区切ります。

-z <fuzz>

タイムスタンプファズ係数(timestamp fuzz factor)を秒単位でcvspsに渡します。 設定されていない場合、cvspsのデフォルトは300秒です。

-P <cvsps-output-file>

cvspsを呼び出す代わりに、提供されているcvsps出力ファイルを読み取ります。 デバッグ時や、cvspsがcvsimportの外部で処理されている場合に便利です。

-m

コミットメッセージに基づいてマージを検出しようとします。 このオプションは、コミットメッセージからソースブランチ名をキャプチャしようとするデフォルトの正規表現を有効にします。

-M <regex>

カスタム正規表現を使用したコミットメッセージに基づいてマージを検出しようとします。 -m と一緒に使用して、デフォルトの正規表現を有効にすることもできます。スラッシュ(/)をエスケープする必要があります。

正規表現は、ソースブランチ名を$1でキャプチャする必要があります。

このオプションは、複数の検出正規表現を提供するために複数回使用できます。

-S <regex>

正規表現にマッチするパスをスキップします。

-a

最近のものを含むすべてのコミットをインポートします。 cvsimportはデフォルトで、タイムスタンプが10分未満のコミットをスキップします。

-L <limit>

インポートされるコミットの数を制限します。 cvsimportがメモリをリークする場合の回避策です。

-A <author-conv-file>

CVSは、デフォルトで、コミットログを書き込むときにUnixユーザー名を使用します。 このオプションとauthor-conv-fileを使用すると、CVSに記録されている名前が作者名(author)と電子メールアドレス(e-mail)と、オプションのタイムゾーン(time zone)にマップされます:

        exon=Andreas Ericsson <ae@op5.se>
        spawn=Simon Pawn <spawn@frog-pond.org> America/Chicago

git cvsimport は、これらの作者が GIT_AUTHOR_NAME と GIT_AUTHOR_EMAIL を最初から正しく設定していたかのように見せかけます。 タイムゾーンが指定されている場合は、GIT_AUTHOR_DATE に対応するオフセットが適用されます。

便宜上、このデータは -A オプションが提供されるたびに $GIT_DIR/cvs-authors に保存され、 git cvsimport が実行されるたびに同じファイルから読み取られます。

後で git cvsexportcommit を使用して変更をCVSに再度エクスポートする場合は、この機能を使用することはお勧めしません。

-R

CVSリビジョン番号から新しく作成されたGitコミットIDへのマッピングを含む $GIT_DIR/cvs-revisions ファイルを生成します。 生成されたファイルには、インポートされた(ファイル名、リビジョン)のペアごとに1行が含まれます。 各行は以下のようになります

src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7

追加インポート(incremental imports)を行うときに使用するために、リビジョンデータがすでに存在する場合はファイルに追加されます。

このオプションは、コミットメッセージ、バグ追跡システム、電子メールアーカイブなどにCVSリビジョン番号が保存されている場合に役立つことがあります。

-h

短い使用法メッセージを印刷して終了(exit)します。

OUTPUT

-v が指定されている場合、スクリプトは実行内容を報告します。

それ以外の場合、成功はUnixの方法で示されます。つまり、終了ステータスがゼロで終了するだけです。

ISSUES

タイムスタンプ関連の問題:

  • CVSリポジトリ内のコミットのタイムスタンプが、コミットの順序付けに使用できるほど安定していない場合、変更が間違った順序で表示される可能性があります。

  • いずれかのファイルが複数回「cvsインポート」された場合(たとえば、複数のベンダーリリースのインポート)、HEADに間違ったコンテンツが含まれています。

  • 異なるファイルのタイムスタンプの順序がコミット一致時間ウィンドウ(commit matching time window)内でリビジョンの順序と交差する場合、コミットの順序が間違っている可能性があります。

ブランチ関連の問題:

  • コミットが行われていないブランチはインポートされません。

  • 分岐点(branching point)からのすべてのファイルは、CVSに追加されていない場合でも、ブランチに追加されます。

  • これは、子ブランチが作成された「後に」ソースブランチに追加されたファイルに適用されます。以前に子ブランチでコミットが行われなかった場合、それらはgitの子ブランチに誤って追加されます。

タグ関連の問題:

  • 同じリビジョンの複数のタグはインポートされません。

これらの問題のいずれかがインポートするリポジトリに当てはまると思われる場合は、cvs2gitの使用を検討してください:

  • cvs2git (cvs2svnの一部です), http://subversion.apache.org/

GIT

Part of the git(1) suite