36

状況

2 つの .NET ソリューション (FooおよびBar) と、ProjectA、ProjectB、および ProjectC を含む共通ライブラリがあります。FooおよびBar1 つ以上のライブラリ プロジェクトを参照していますが、ライブラリ プロジェクトがFooおよびBarソリューション フォルダー内にありません。

ディレクトリ構造:

-- My Documents*
   -- Development
      -- Libraries
         -- ProjectA
         -- ProjectB
         -- ProjectC
   -- Projects
      -- Foo
         -- Solution
            -- .hg
            -- .hgignore
            -- Foo { Project Folder }
            -- FooTests { Project Folder }
            -- Foo.sln { References ProjectA }
            -- Foo.suo
      -- Bar
         -- Solution
            -- .hg
            -- .hgignore
            -- Bar { Project Folder }
            -- BarTests { Project Folder }
            -- Bar.sln { References ProjectA and ProjectB }
            -- Bar.suo

*残念ながら、私はまだ Windows XP を使用しています...

Mercurial サブリポジトリ

目標Foo- サブリポジトリを設定して、参照されているライブラリ プロジェクトのソース コードを自分のリポジトリとリポジトリに保存できるようにしたいと考えていBarます。

このページ(文字通り、サブレポで見つけることができる唯一のドキュメントです) によると、サブレポを設定するには、DOS コンソール ウィンドウから次のコマンドを実行する必要があります。

1| $ hg init main
2| $ cd main
3| $ hg init nested
4| $ echo test > nested/foo
5| $ hg -R nested add nested/foo
6| $ echo nested = nested > .hgsub
7| $ hg add .hgsub
8| $ ci -m "initial commit"

質問

  1. バージョン 0.9.2 の時点で、これらの手順の一部またはすべてを TortoiseHG で実行できますか? はいの場合、どのように?1〜3行目はできると確信していますが、4〜7行目についてはわかりません。これはどれも TortoiseHG で文書化されていないようです。
  2. 上記のコードは何をしますか (行ごとの説明をいただければ幸いです)。私がそれを解読しようとしていたときに頭に浮かんだいくつかの具体的な質問を次に示します。
    • 何をし>ますか?Mercurial のドキュメントで を検索してみまし>たが、何も見つかりませんでした。
    • 5行目、何が何だかわかりませんnested/foo。どこfooから来たの?とはfoo? リポジトリ?フォルダー?
    • 6 行目 - これには完全に困惑します。
    • 7 行目で、 ?.hgsubに追加されていると仮定します。mainそれとも追加されていnestedますか?
  3. サブリポジトリがセットアップされ、Barリポジトリがリビジョン 10 になったとします。作業ディレクトリをリビジョン 7 に更新しようとすると、ライブラリ フォルダー (My Documents/Development/Libraries/ProjectAおよび.../Libraries/ProjectB) がリビジョン 7 に保存されているものに更新されます。良い?

アップデート

コードの 8 行目を追加しました: ci -m "initial commit". これにより、(1) .hgsubstate ファイルがメイン リポジトリに追加され、(2) 新しいサブリポジトリを含むすべての変更がメイン リポジトリにコミットされます (「初期コミット」というメッセージが表示されます)。.hgsubstate ファイルの目的は、すべてのサブリポジトリの状態を追跡することです。そのため、以前のリビジョンに戻ると、すべてのサブリポジトリからも正しいリビジョンが取得されます。


更新 2 - いくつかの指示

さらに実験を重ねた結果、元の問題を解決するための手順を提供できるようになったと思います(主に Windows Explorer と TortoiseHG を使用)。

サブレポの作成

  1. Libraries/ProjectALibraries/ProjectB、およびメイン リポジトリ (Projects/Foo/SolutionおよびProjects/Bar/Solution) は、個別のリポジトリである必要があります。
  2. 開くProjects/Foo/Solution
  3. Libraries/ProjectAからにクローンしProjects/Foo/Solutionます。
  4. リポジトリに追加ProjectAします。Foo
  5. テキスト エディタを使用して.hgsub、次の内容を含むというファイルを作成します。

    ProjectA = ProjectA
    
  6. DOS コンソール ウィンドウを開き、次のコマンドを入力します(以下の注を参照)

    cd c:\...\Projects\Foo\Solution
    hg ci -m "Committing subrepo "ProjectA"
    
  7. の場合Bar、手順は基本的に同じですが、.hgsub ファイルには次のように両方のプロジェクトのエントリが含まれている必要があります。

    ProjectA = ProjectA  
    ProjectB = ProjectB
    

注: TortoiseHG 0.10 (3 月に予定) から、これを行うためにシェル コマンドを使用できるようになりますHG Commitが、今のところ、コマンド ラインを使用する必要があります。

これがすべて設定されると、少し簡単になります。

変更のコミット-Fooまたはへの変更をコミットするには、サブリポジトリごとに操作をBar実行しSynchronize/Pullて、サブリポジトリをライブラリ プロジェクト リポジトリの最新のリビジョンと同期させます。次に、再度コマンドラインを使用して変更をコミットします (バージョン 0.10 までは、TortoiseHG を使用してコミットするだけです)。

作業ディレクトリを以前のリビジョンに更新する- これは TortoiseHG でかなり正常に動作するようで、DOS コマンドを使用する必要はないようです。Synchronize/PushVisual Studio で以前のリビジョンを実際に操作するには、古いバージョンのライブラリ プロジェクトをLibraries/ProjectXフォルダーに戻す操作を行う必要があります。

単純なタスクには TortoiseHG が好きですが、頻繁に使用されるサブリポジトリ操作 (特に更新) にはバッチ ファイルを作成する方がよいでしょう。

これが将来誰かに役立つことを願っています。間違いを見つけた場合は、お知らせください (または、編集できる場合は自由に編集してください)。

4

2 に答える 2

20

おそらく、このようなことを試してみて、質問を書くよりも早く学ぶことができますが、噛み付きます.

バージョン 0.9.2 の時点で、これらの手順の一部またはすべてを TortoiseHG で実行できますか? はいの場合、どのように?

TortiseHG はまだサブレポの作成に GUI ラッパーを配置していませんが、TortiseHG は常にコマンド ラインでの作業に優れた仕事をしてきました。コマンドラインを使用してそれらを作成すれば、準備完了です。

上記のコードは何をしますか (行ごとの説明をいただければ幸いです)。

hg init main  # creates the main repo
cd main # enter the main repo
hg init nested # create the nested. internal repo
echo test > nested/foo # put the word test into the file foo in the nested repo
hg -R nested add nested/foo # do an add in the nested repo of file foo
echo nested = nested > .hgsub # put the string "nested = nested" into a file (in main) named .hgsub
hg add .hgsub # add the file .hgsub into the main repo

これを解読しようとして頭に浮かんだいくつかの具体的な質問を次に示します。 > は何をしますか?

それは「結果をXという名前のファイルに入れる」ための標準シェル(unixおよびdos)であるmercurialとは関係ありません

5 行目、nested/foo が何なのかわかりません。フーはどこから来たの?フーとは?リポジトリ?フォルダー?

サブレポにあるファイルです。Foo は従来の任意の名前で、任意の内容は文字列「test」です

6 行目 - これには完全に困惑します。

内容を .hgsub に入れる必要があるのは、ネストされたという名前のネストされたレポで、ネストされた場所にあることです。

7 行目で、.hgsub が main に追加されていると思いますか? または、ネストされたものに追加されていますか?

主要

サブリポジトリをセットアップし、Bar リポジトリがリビジョン 10 になったとします。リビジョン 7 に更新しようとすると、ライブラリ フォルダー (My Documents/Development/Libraries/ProjectA および .../Libraries) が発生しますか? /ProjectB) もリビジョン 7 に保存されているものに更新しますか? Foo が Libraries/ProjectA も参照していることを考えると、これは興味深いものになる可能性があります。

リビジョン番号は引き継がれませんが、.hgsubstate ファイルを編集することで制御できます。

于 2010-01-18T05:22:46.250 に答える
6

TortoiseHg 1.0 のリリース後の簡単な更新です。

THG 1 のサブレポ サポートは、Windows エクスプローラーからサンプル ステップを実行するのに十分です。Explorer から実行できなかったのは、手順 6 だけでした。

echo nested = nested > .hgsub

Windows エクスプローラー (少なくとも XP では) は、「ファイル名を入力する必要があります」という名前変更エラーを報告します。「New Text Document.txt」の名前を「.hgsub」に変更しようとすると。*8')

編集:ちなみに、TortoiseHg とコマンド ラインを介して hg を使用していて、Microsoft の "Command Here" PowerToolをまだインストールしていない場合は、強くお勧めします。Windows エクスプローラーのすべてのディレクトリに [コマンド ウィンドウをここで開く] コンテキスト メニュー エントリを追加し、コマンド ウィンドウを必要な場所で簡単に開くことができるようにします。

于 2010-03-29T19:12:24.183 に答える