外部ソースからのさまざまなブランチを単一のMercurialリポジトリに統合する


8

編集:バウンティがまもなく期限切れになるので、これをさらに明確にします。履歴を(異なるSCMからプルして)Mercurialの特定のブランチに直接インポートする方法はありますか?


私は現在、Perforceを使用している会社で働いており、Mercurialを使用した分散バージョン管理の方法を作っています。私はperfarceを使用してPerforceの履歴をインポートすることに成功しました(適切な名前です。見たり言うたびに笑ったりします)が、これは一度に1つのブランチでしか機能しません。

P4統合設定の仕組みは次のとおりです。

  • perforceで「クライアント」を作成します。これは、絶えず更新/チェックアウトする対象の説明の一種です。これは、一度に1つのブランチ(トランクまたはその他)しかアドレス指定できません。
  • これを実行したら、実行します hg clone p4://<server>/<client_name>
  • .hg / hgrcに移動し、perforceパスの行を追加します。 perforce = p4://<server>/<client_name>
  • Mercurialでコードを正常に処理し、hg pull perforce同期をとって、hg pushチェンジリストをエクスポートします。

私ができることは、ブランチごとにPERFORCEパスを設定し、すべてを同じリポジトリで機能させることです。現在、プッシュは問題ではありませんが、別のブランチから履歴をプルすると、デフォルトのブランチになります。

私は何かをすることができhg pull perforce-R5て、それをmercurialのR5ブランチに着陸させたいと思っています。マージの履歴がなくても、ブランチの履歴を保存できるほど十分に甘いでしょう。

Mercurialを統合できるCVCS用のプラグインは他にもありますが、サブバージョン1には同じ問題があります。

これを行うための簡単な方法はないと思いますが、1つのMercurialマシンでいくつかのフックとスクリプトを使用してプロセスを自動化できれば、それで十分です。


編集:物事を少し明確にするために:

  • PERFORCE トランクはMercurialのデフォルトのブランチにマッピングされています
  • PERFORCE R1ブランチはMercurialのリリース1ブランチにマップする必要があります(R2、R3などでも同じ)
  • Mercurialにperforceからプルするように指示すると(つまりhg pull perforce、「perforce」はPerforceクライアントを指すパスの名前です)、PerforceトランクをMercurialのデフォルトにプルする必要があります。
  • Mercurialにperforce-R1からプルするように指示すると(つまりhg pull perforce-R1、「perforce-R1」はR1クライアントへのパスです)、Perforce R1ブランチをMercurialの「release-1」ブランチにプルする必要があります。これは私が質問している部分です。

私はこれを手伝うことができると確信しています(Mercurialにこだわっており、過去にp4からhgに移行したことがある)。少しわかりやすくするために。
Ed James

回答:


0

これが直接できるとは思いません。

1つのオプションはrebase、次の手順のようなものを使用してプルした後、ツールを使用してリポジトリの適切な部分を別のブランチに移動することです。

  • 希望するブランチを作成します、例えば hg branch release-1
  • 新しいブランチをコミットします。 hg commit -m "Created branch"
  • リモートリポジトリをデフォルトのmercurialブランチにプルします。 hg pull perforce-R1
  • 新しいプルを目的のブランチにリベースします。 hg rebase -s <first changeset of perforce-R1> -d release-1

私は彼の答えで十分だと思いますが、私はもっと自動的な方法でそれを行う方法を探しています。
dukeofgaming 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.