web-dev-qa-db-ja.com

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

編集:バウンティが間もなく期限切れになるので、これをさらに明確にします:履歴を(異なる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用の他のプラグインもありますが、Subversionのものにも同じ問題があります。

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


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

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

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

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
0
Scroog1