4

Visual Studio 2010で、それぞれ独自のhgリポジトリを持つ2つの異なるプロジェクトを開始しました。

後で、2つのプロジェクトが1つのソリューション、つまり1つのhgリポジトリに属する​​ことを決定しました。

新しいソリューションは、次のファイル構造です。

SolutionFolder
   |---.hg
   +---Lib
   |    ∟ dlls
   +---Source
   |    ∟ Project_A
   |      ∟--.hg  
   |    ∟ Project_B
   |      ∟--.hg
   +---OverarchingSolution.sln

とのチェンジセットをソリューションフォルダのリポジトリにマージ する方法はありますか?Project_AProject_B

したがって、次のようになります。

SolutionFolder
   |---.hg
   +---Lib
   |    ∟ dlls
   +---Source
   |    ∟ Project_A
   |    ∟ Project_B
   +---OverarchingSolution.sln

Project_AとのすべてのチェンジセットProject_BがSolutionFolderのリポジトリに到達しましたか?

4

3 に答える 3

3

履歴の変更に問題がない場合(つまり、このプロジェクトの他の全員のクローンを無効にする場合)、「convert」拡張機能を使用できます。

rename-map-a.txtテキストファイルを作成します。この行を次のように呼びます。

rename . Source/Project_A

次に、に移動しSourceて実行します。

hg convert --filemap rename-map-a.txt Project_A new-Project_A

Bに対して同じプロセスを繰り返して、次のようにします。

SolutionFolder
   |---.hg
   +---Lib
   |    ∟ dlls
   +---Source
   |    ∟ Project_A
   |      ∟--.hg  
   |    ∟ Project_B
   |      ∟--.hg
   |    ∟ new-Project_A
   |      ∟--.hg  
   |    ∟ new-Project_B
   |      ∟--.hg
   +---OverarchingSolution.sln

次にSolutionFolder、次のコマンドに移動して実行します。

hg init   # creates a new, empty repo
hg pull Source/new-Project_A   # pulls in changesets from A
hg pull --force Source/new-Project_B   # pulls in changesets from A

それがうまくいった場合は、これらのディレクトリを削除する(またはバックアップのためにどこかに移動する方がよい)ことができます。

SolutionFolder/Source/Project_A/.hg
SolutionFolder/Source/Project_B/.hg
SolutionFolder/Source/new-Project_A
SolutionFilder/Source/new-Project_B

あなたの質問の目標としてあなたが持っているものを正確に残し、すべての歴史とすべてを追跡します。そうは言っても、私がより良い考えだと思うものについては、私の他の答えを参照してください。

于 2011-03-25T16:47:24.697 に答える
3

これらの2つのリポジトリを再び別々に使用する可能性があると思われる場合(つまり、一方を別のソリューションで使用し、もう一方は使用しない)、新しいトップレベルリポジトリのサブリポジトリにすることができます

これを行うには、次の行を含むSolutionFolder名前のファイルにCDを挿入して作成します。.hgsub

Source/Project_A = Source/Project_A
Source/Project_B = Source/Project_B

次に、次のコマンドを実行します(まだSolutionFolder):

hg init
hg add .hgsub
hg commit -m 'new repo with two sub repos'

その後、ほとんどすべての通常のMercurialコマンドをSolution Folder(、など)で追加の引数を使用して実行できstatuscommitそれら--subreposはサブリポジトリにカスケードされます。

于 2011-03-25T16:54:17.733 に答える
0

これを行う1つの方法は、を使用して、無関係のリポジトリからプルhg pull -fすることです。これにより、複数のルートを持つリポジトリが作成されます。両方のリポジトリからの履歴がまだ残っています。これは、リポジトリ内の2行の開発によって表されます。

ここでの唯一のトリックは、ディレクトリ構造を正しくすることです。結合されたリポジトリのルートを、結合されたリポジトリのルートと一致させる必要があります。

だからあなたの場合、私はこのようなものを想像します:

    C:\> SolutionFolder \ Source \Project_ATemp_Project_Aを移動します
    C:\> cd Temp_Project_A
    C:\ Temp_Project_A> mkdir Source \ Project_A
    C:\ Temp_Project_A> hg rename * Source \ Project_A
    C:\ Temp_Project_A> hg ci -m "リポジトリを結合する準備として、すべてのProject_Aファイルを下に移動しました"
    C:\ Temp_Project_A> cd .. \ SolutionFolder
    C:\ SolutionFolder> hg pull -f .. \ Temp_Project_A
    C:\SolutionFolder>hgマージ
    C:\ SolutionFolder> hg ci-m"Project_Aリポジトリをメインリポジトリにマージしました"

    (およびプロジェクトBについても同様)

MercurialWikiの「完全に無関係なリポジトリからプルすることが可能です...」で始まるセクションを確認してください。

実際の出力を使用した一般的な例を次に示します。

    C:\> hg ini repoA

    C:\> hg ini repoB

    C:\> cd repoA

    C:\ repoA> echo FOO> foo.txt

    C:\ repoA> hg add
    foo.txtを追加する

    C:\ repoA> hg ci-m"レポAにfooを追加"

    C:\ repoA> cd .. \ repoB

    C:\ repoB> echo BAR> bar.txt

    C:\ repoB> hg add
    bar.txtを追加する

    C:\ repoB> hg ci-m"レポBにバーを追加"

    C:\repoB>cd.。

    C:\> hg clone repoA CombinedRepo
    ブランチのデフォルトに更新
    1ファイルが更新され、0ファイルがマージされ、0ファイルが削除され、0ファイルが未解決

    C:\> cd CombinedRepo

    C:\ combinedRepo> hg pull -f .. \ repoB
    ..\repoBからプル
    変更を検索する
    警告:リポジトリは無関係です
    チェンジセットの追加
    マニフェストの追加
    ファイル変更の追加
    1つのファイルに1つの変更を加えた1つのチェンジセットを追加しました(+1ヘッド)
    (ヘッドを表示するには「hgheads」を実行し、マージするには「hgmerge」を実行します)

    C:\combinedRepo>hgマージ
    1ファイルが更新され、0ファイルがマージされ、0ファイルが削除され、0ファイルが未解決
    (ブランチマージ、コミットすることを忘れないでください)

    C:\ combinedRepo> hg ci-m"repoBをrepoAにマージしました"

    C:\ combinedRepo> hg gl
    @チェンジセット:2:3d08641554c5
    | \タグ:ヒント
    | | 親:0:bc6a6ad6a3e5
    | | 親:1:54dc5af30c7a
    | | ユーザー:jw
    | | 日付:2011年3月25日金曜日10:12:32 -0700
    | | 概要:repoBをrepoAにマージしました
    | |
    | oチェンジセット:1:54dc5af30c7a
    | 親:-1:000000000000
    | ユーザー:jw
    | 日付:2011年3月25日金曜日10:11:43 -0700
    | 概要:リポジトリBにバーを追加
    |
    oチェンジセット:0:bc6a6ad6a3e5
       ユーザー:jw
       日付:2011年3月25日金曜日10:11:15 -0700
       要約:リポジトリAにfooを追加
于 2011-03-25T17:15:21.267 に答える