0

以前にこれを行ったことがないので、私はおそらく初心者です... 古い CVS リポジトリを GitLab に移行しようとしていますが、ネストされた CVS プロジェクトを処理する方法がわかりません。私たちはそれらをたくさん持っています (つまり、約 1600 の .project ファイルが CVS リポジトリに点在しています)。約 10 年分のコミットがあり、合計で約 21GB あり、2 つの CVS リポジトリ ディレクトリにまたがっています。

一般的な構造は $client/$product ですが、これらのほとんどには多数のサブプロジェクト (多くの場合非常に多く) が含まれています。

私がこれまでに試したこと:

  1. モノリシック: より小さい CVS リポジトリをインポートしようとしました - 最初のパス 1 でメモリが不足し (メモリを追加することで解決)、パス 5 でディスク容量が不足しました (VMware データストアがほぼいっぱいであるため、実際にはディスクを追加できません -聞かないで!)。

  2. クライアント別: cvs2git は 1 つのクライアントで完了し、git --fast-import を実行しましたが、すべてのサブプロジェクトに気付きました。Git はマージされた履歴を気にしませんが、コーダーは気にします。プロジェクト全体が通常同じ CVS リポジトリ内にあり、プロジェクトのクローンを作成するプロセスが複雑になることがわかります。

  3. クライアント内のプロジェクトごと: (2) のプロダクションを使用して、find で深さ優先で CVS リポジトリを再帰し、.project ファイルを探します。git --fast-import でサブプロジェクトをインポートする前に、それぞれにサブディレクトリを作成し、それぞれで git init --bare を実行しました。毎回 cvs2git の BLOB ファイルとダンプ ファイル全体を変更する必要があるため、これにはかなりの時間がかかりました。最終的に適切な git 階層になったかどうかはわかりません。

だから... もうぐるぐるするのではなく、他の誰かがこの種のことをする必要があったに違いないと確信しているので、ここで尋ねようと思いました. どんなポインタでも大歓迎です。


[編集]:すべての提案と助けに感謝します。今は私の手に負えません - 彼ら (開発者) は、CVS プロジェクトを少しずつ移行することを決定しました。その目的のために、古い cvs は読み取り専用の参照として保持され、プロジェクトは git "pristine" にチェックインされるため、"BG" (git の前) の履歴については cvs を参照しますが、 「AG」の歴史、彼らはgitを参照します。

深くネストされたプロジェクトの問題については、Java のクラス階層に関係しており、各プロジェクトが 1 つのクラスに相当するという説明がありました。彼らのビルド プロセスには、cvs プロジェクトを自動的に Java .jar ファイルなどに変更する機能があります。そこにはたくさんのJavaがあります。

4

2 に答える 2

0

通常、中央リポジトリに含まれるすべての情報、特に CVS のような不完全なものを git に変換する際に保持することはできません。ですから、絶対に試してはいけないと思います。履歴参照用に元のリポジトリを保存し、現在開発中のプロジェクトのみを git に変換します。10 年分丸ごと輸入する必要はなく、2 ~ 3 年あれば十分です。

于 2016-12-27T15:42:44.490 に答える
0

あなたが何を求めているのかよくわかりませんが、ここにいくつかのコメントがあります。うまくいけば、そのうちの 1 つまたは複数があなたの質問に答えるでしょう。

  • 個々のプロジェクトを個別に git に個別に変換したかったですか? あなたの質問からはよくわかりません。しかし、その場合は、各プロジェクトのディレクトリ ツリーをコピーして、その上で cvs2git を実行するだけです。(または、ネストが許す限り、スペースを節約するためにシンボリックリンクを作成するだけかもしれません。) 一度に 1 つずつループします。CVS のサーバー側バックエンド ファイル ストレージのシンプルさは、この場合はありがたいことです。

たとえば、これを行う。シンボリックリンクではなく、ある種の再帰的コピーを実行できることに注意してください。

/opt/cvsrepos/CVSROOT
             /path/to/project1
                     /project2

/opt/convertrepos/CVSROOT #dummy empty directory to fool cvs2git
                 /project1 -> /opt/cvsrepos/path/to/project1
  • cvs リポジトリ全体を一時的に別の場所にコピーして、より多くのディスク容量とメモリがある場所で変換を行うことはできますか?
  • 1 つのモノリシック リポジトリを作成するか、多数の個別のリポジトリを作成するかは、stackoverflow の目的を超えた全体的な意見に基づくものです。これらのプロジェクトが互いに必要かどうかもわかりません。そうでない場合は、より柔軟に選択できます。
于 2016-12-26T07:26:31.440 に答える