日本語 ▾ トピック ▾ 最新バージョン ▾ 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以上が必要です。

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

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

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

オプション

-v

冗長性: *cvsimport* が行っていることを報告します。

-d <CVSROOT>

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

<CVS-module>

インポートしたいCVSモジュール。<CVSROOT>からの相対パスです。指定しない場合、*git cvsimport* は `CVS/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` ブランチは *git clone* の動作をミラーリングして remotes/<remote>/master と命名されます。異なるブランチにインポートしたい場合はこのオプションを使用してください。

古い 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の方法、すなわちゼロの終了ステータスで単純に終了することによって示されます。

問題点

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

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

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

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

ブランチに関する問題

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

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

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

タグに関する問題

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

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

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

GIT

git[1] スイートの一部

scroll-to-top