日本語 ▾ トピック ▾ 最新版 ▾ git-cvsimport の最終更新は 2.43.1

名前

git-cvsimport - 他のSCMからデータを救い出す

概要

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>]

説明

警告: git cvsimport はcvspsバージョン2を使用しており、これは非推奨とされています。cvspsバージョン3以降では動作しません。CVSリポジトリの一度限りのインポートを行う場合は、cvs2git または cvs-fast-export の使用を検討してください。

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

CVSログをパッチセットに分割するのは cvsps によって行われます。バージョン2.1以上が必要です。

警告: 特定の状況では、インポートが不正確な結果につながることがあります。詳細については、ISSUES のセクションを参照してください。

git cvsimport によって作成されたブランチで、独自の作業を決して行わないでください。デフォルトでは、初期インポート時にCVSリポジトリのメインブランチから「master」ブランチが作成され、自由に作業できます。その後は、増分インポートやCVSブランチを自分で git merge する必要があります。-r オプションで名前付きリモートを指定して、入ってくるブランチを分離し、保護することをお勧めします。

すべての開発者が読み書きできる共有公開リポジトリを設定する予定がある場合、または git-cvsserver[1] を使用したい場合は、インポートしたリポジトリのベアクローンを作成し、そのクローンを共有リポジトリとして使用することをお勧めします。詳細は gitcvs-migration[7] を参照してください。

オプション

-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リモート。すべてのCVSブランチを remotes/<remote>/<branch> に移動します。これは、git clone がデフォルトで origin を使用する方法に似ています。

-o <branch-for-HEAD>

リモートが指定されていない場合 (-r を使用しない場合)、CVSの HEAD ブランチはGitリポジトリ内の origin ブランチにインポートされます。HEAD はGitにとって特別な意味を持つためです。リモートが指定されている場合、HEAD ブランチは remotes/<remote>/master と命名され、git clone の動作を反映します。別のブランチにインポートしたい場合は、このオプションを使用してください。

古い cvs2git ツールによって最初に行われたインポートを継続する場合は -o master を使用してください。

-i

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

-k

キーワードを削除: 騒がしい変更セットを避けるために、CVSアーカイブから -kk でファイルを抽出します。強く推奨されますが、初期にインポートされたツリーとの互換性を保つため、デフォルトではオフになっています。

-u

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

-s <subst>

ブランチ名の "/" 文字を <subst> に置換します。

-p <options-for-cvsps>

cvsps の追加オプション。オプション -u-A は暗黙的に適用されるため、ここで使用すべきではありません。

複数のオプションを渡す必要がある場合は、コンマで区切ってください。

-z <fuzz>

タイムスタンプのファズファクタを秒単位で 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 に記録された名前を著者の名前、メールアドレス、およびオプションの時間帯にマッピングできます。

	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

ファイルが既に存在する場合、インクリメンタルインポートで使用するためにリビジョンデータがファイルに追加されます。

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

-h

短い使用メッセージを表示して終了します。

出力

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

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

ISSUES

タイムスタンプに関連する問題

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

  • ファイルが複数回「cvs import」された場合(例: 複数のベンダーリリースをインポートした場合)、HEAD には誤ったコンテンツが含まれます。

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

ブランチに関連する問題

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

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

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

タグに関連する問題

  • 同じリビジョンに複数のタグがある場合、それらはインポートされません。

これらの問題のいずれかがインポートしたいリポジトリに適用される可能性があると疑われる場合は、cvs2git の使用を検討してください。

  • cvs2git (cvs2svn の一部), https://subversion.dokyumento.jp/

GIT

git[1]スイートの一部

scroll-to-top