問題タブ [cvs2git]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
198 参照

git - CVS2Git 移行で作成された Git ブランチを簡単にマージする方法はありますか?

最近、CVS リポジトリを Git に移行しました。

私たちの CVS リポジトリには、開発が完了した後、後でスケジュールする時間ができるまで隠しておいたコードを含むいくつかのブランチがありました。

CVS2Git でマイグレーションを行ったところ、Git リポジトリにブランチが引き継がれる結果になりましたが、実際に CVS でブランチされていたファイルだけが Git ブランチに現れるという仕組みでした。

たとえば、HEAD の CVS に次のファイル/フォルダー ツリーがあるとします。

そして、CVS の BRANCH_COOL_FEATURE ブランチで「file1a」と「file2b」ファイルだけを分岐しました。Git の結果の「BRANCH_COOL_FEATURE」ブランチには、「file1a」と「file2b」ファイルのみが含まれます。

マージしたいCVSブランチに含まれるすべてのファイルを特定する最も簡単な方法を探しています.マージを行います。

これは私がこれまでに得た最高のものですが、より良い方法があることを望んでいました:

1) MASTER および BRANCH_COOL_FEATURE で git diff --name-status を実行し、diff-filter を M に設定して、ブランチで実際に変更されたすべてのファイルを識別するか、ブランチ内のファイルの完全なリストを取得します 2) ファイルごとに、CVS履歴を見て、タイムスタンプを関連付けて、マージされる差分を表すそのファイルに対して生成された2つのGitコミットを識別します3)その特定のファイルでgit mergeを実行し、マージする差分として2つのコミットを指定します

助けてくれてありがとう、ありがとう!

-Git初心者

ps 実際の CVS2Git 変換がどのように実行されたかについての詳細はあまりありませんが、それが重要な場合は、おそらくそれを手に入れることができます.

簡単にできる方法はありますか

0 投票する
1 に答える
793 参照

cvs2git - cvs2git 変換中に CVS タグを保持するには?

多くの CVS リポジトリを GIT に変換しています。これはほとんどの場合機能しますが、CVS リポジトリでタグが使用されている場合、これらは GIT リポジトリにありません (ただし、ブランチは動作します)。

奇妙なことに、cvs2svn の出力には、識別されたタグの数が表示されます。

オプションの私のテンプレートはここで見ることができます: http://paste.ubuntu.com/11919176/

私のコマンドシーケンス:

cvs2svn のバージョンは 2.3.0 です

私は何時間もグーグルで検索しましたが、何が欠けているのかまだわかりません. 何か助けてください。

0 投票する
1 に答える
219 参照

git - cvs2git Migration で x より古い履歴を削除

最後の大きな CVS リポジトリの 1 つを Git リポジトリに移行する予定です。

移行には、svn2git の cvs2git を使用しています。この CVS リポジトリは 12 年以上にわたって成長したため、31 GB のデータがあります。

指定された期間 (たとえば 2 年) より古いすべての履歴を削除する解決策が見つかりませんでした。

このいずれかのツール/コマンド/解決策を知っていますか?:

  • CVS からの削除履歴
  • cvs2git ですべての履歴をエクスポートしない
  • Git インポートですべての履歴をインポートしない
  • Git から履歴を削除

感謝と挨拶、 アンドレアス

Dmitry Oksenchuk によって提案された解決策: グラフトを編集した後、BASH スクリプトを作成して、めちゃくちゃになったタグとブランチをクリーンアップしました。

0 投票する
1 に答える
594 参照

git - git cvsimport 欠落タグ

巨大な CVS リポジトリを git に移行していますが、すべてのタグが移行されたわけではないことがわかりました (履歴は問題ないようです)。おそらく、CVS のタグがリポジトリ全体ではなく特定のフォルダに作成され、さらに CVS 履歴のいくつかのファイルが死んでいることが原因です。

git cvsimport -p -x -v -a -i -d :pserver:ysn@uaap01:/mitarepo -C F:/GitImport Libs/WP/Include/drivers cvs_direct initialized to CVSROOT /mitarepo cvs rlog: Logging Mitalib/WP4000/Include/drivers * UNKNOWN LINE * Branches: Branch WP100_1_2_0_CANopen erroneously stems from itself -- changed ancestor to origin Branch origin does not exist! * UNKNOWN LINE * Branches: Skipping WP100_1_2_0_CANopen * UNKNOWN LINE * Branches: * UNKNOWN LINE * Branches:

CVS から特定のフォルダーのみをインポートしようとしましたが、タグがまだ見つかりません

すべての CVS タグから API_4_51 と RE_OS_API_3_9 のみがインポートされ、残りはインポートされませんでした。この問題を診断して修正する方法はありますか? ちなみに、必要なファイルはCVSからタグで問題なくチェックアウトでき、commit 1.3は正常にGitに移行されました。 ここに画像の説明を入力

0 投票する
1 に答える
162 参照

python - cvs2git/cvs2svn でコミットのタイムスタンプはどのように生成されますか?

Cygwin経由でcvs2gitを使用して、非常に古くて巨大なCVSリポジトリをGitに変換しています。正常に動作し、新しいリポジトリのテストを開始しました。大きな特徴は見つかりませんでした。しかし、コミット/変更セットのタイムスタンプはどのように決定されるのだろうか。

これまでのところ、特定の CVS リビジョン間のタイムスタンプは、1 時間または 2 時間プラス x だけ異なると判断しました。x は、数秒または数分 (ほとんどの場合) から 2 15 分までの時間です。多くのタイムスタンプは、1 時間 (x=0) だけ異なります。

これは、cvs2svn 機能 ( http://www.mcs.anl.gov/~jacob/cvs2svn/features.html )であることがわかった「タイムスタンプ エラー修正」と何らかの関係があると思います。タイムゾーンも関係しているのかもしれません。

私のテストの結果は、変更セット内のファイルが 1 つだけのすべてのコミットが 1 時間も異なることを示しています。それは私の「タイムゾーン仮説」を支持します。しかし、それはまた、複数のファイルを持つ変更セットのタイムスタンプがどのように決定されるかという疑問にもつながります。

コードを調べてみたところ、(Google の助けを借りて) cvs2svn_lib の config.py に「COMMIT_THRESHOLD」があることがわかりました。これは、CVS 内のファイル ベースのコミットをまとめてファジングするために使用されると思います。コードはうまく書かれているように見えますが、CVS、SVN、および Git リビジョン ストレージの技術的な理解が不足しているため、理解するのが困難です。

したがって、誰かが次の質問に答えてくれれば幸いです。

  • cvs2svn/cvs2git は、複数のファイルを持つ変更セットのコミット タイムスタンプをどのように決定しますか?
  • 「タイムスタンプ エラー修正」cvs2svn/cvs2git はどのように機能しますか? (私にとっては、技術的な背景よりも機能的な背景の方が重要です。)

敬具

編集:

誰かがこの質問を「広すぎる」と考えたので、私は私の主張を十分に明確にしなかったことを恐れています. だから私は具体的な(フィクションですが)例を挙げたいと思います:

cvs2git は、1 つの変更セットに対して 3 つのファイル変更を検出しました。それらは同じ日にコミットされた場所です (2016 年 2 月 30 日としましょう)。しかし、それらの時間は異なります。

  • ファイル 1: 12:34:56
  • ファイル 2: 12:35:38
  • ファイル 3: 12:36:09

ファイル 1 のみの場合、cvs2git は 2016-02-30T12:34:56 を Git コミットのタイムスタンプとして使用すると思います。しかし、3 つのファイルすべてのコミットが 1 つの変更セットに属している場合、どのタイムスタンプが選択されるのでしょうか?

これに関連して、リポジトリが変換されると、時間も正確に 1 時間または 2 時間調整されるようです。これは、変更セットにファイルが 1 つしかない場合にも発生します。ある種のタイムゾーン調整だと思います。したがって、「タイムスタンプのエラー修正」によってタイムスタンプが変更された理由を知りたいので、これらの変更を受け入れるかどうかを確認してください。変換された Git リポジトリについていくつかの統計を行いましたが、コミット時間は原則として問題ないようです。しかし、それだけでは十分ではありません。

0 投票する
1 に答える
594 参照

git - cvs2git の移行に失敗しました - RCS ファイルが見つからないというエラー

ローカル システム (Windows 7) で CVS リポジトリのコピーをチェックアウトしました。cygwin の助けを借りて、このリポジトリのローカル コピーを git(bitbucket) に移行しようとしていますが、最初の段階で行き詰まりました。以下はコマンドとエラーです。ここで私を案内してください。どんな助けでも大歓迎です。

コマンド: cvs2git --blobfile=cvs2svn-tmp/git-blob.dat --dumpfile=cvs2svn-tmp/git-dump.dat --username=cvs2git java_apps

エラー: すべての CVS ',v' ファイルを調べています... エラー: 'java_apps' の下に RCS ファイルが見つかりません! cvs2svn が CVS リポジトリを指していると確信していますか?

パス1完了。

エラーの概要: エラー: 'java_apps' の下に RCS ファイルが見つかりません! cvs2svn が CVS リポジトリを指していると確信していますか?

0 投票する
2 に答える
293 参照

git - 多数のネストされた CVS プロジェクトを処理する方法

以前にこれを行ったことがないので、私はおそらく初心者です... 古い 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があります。