3

私はサブリポジトリを読んでいて、ローカルでいくつかのテストを実行していますが、これまでのところ問題なく動作しているようですが、1つ質問があります。

特定のサブリポジトリに使用するチェンジセットを指定/制御するにはどうすればよいですか?

たとえば、次の2つのプロジェクトがあるとします。

class library                    application
o    fourth commit               o   second commit, added a feature
|                                |
o    third commit                o   initial commit
| 
| o  second commit
|/
o    initial commit

ここで、アプリケーションのサブリポジトリとしてクラスライブラリが必要ですが、最長のブランチ(4番目のコミットとして終了するブランチ)が未成熟であるため、一時的に「2番目のコミット」のヒントを使用したいと思います。

それが可能であると仮定して、それを構成するにはどうすればよいですか?

上記の2つのリポジトリを設定し、ライブラリをサブリポジトリとして追加するバッチファイルを次に示します。

バッチファイルを実行すると、次のように出力されます。

[C:\Temp] :test
...
v4

その最後の行からわかるように、クラスライブラリ内のファイルの内容を確認します。これは4番目のコミットからの「v4」です。「v2」にし、クラスライブラリリポジトリから新しいバージョンをプルダウンする準備ができるまで「v2」のままにしておきます。

私がやりたいことができるかどうか、もしそうなら、サブリポジトリを正しいチェンジセットにロックするために何をする必要があるかを誰かに教えてもらえますか?

バッチファイル:

@echo off
if exist app rd /s /q app
if exist lib rd /s /q lib
if exist app-clone rd /s /q app-clone


rem == app ==
hg init app
cd app
echo program>main.txt
hg add main.txt
hg commit -m "initial commit"
echo program+feature1>main.txt
hg commit -m "second commit, added a feature"
cd ..

rem == lib ==
hg init lib
cd lib
echo v1>lib.txt
hg add lib.txt
hg commit -m "initial commit"
echo v2>lib.txt
hg commit -m "second commit"
hg update 0
echo v3>lib.txt
hg commit -m "third commit"
echo v4>lib.txt
hg commit -m "fourth commit"
cd ..

rem == subrepos ==
cd app
hg clone ..\lib lib
echo lib = ..\lib >.hgsub
hg add .hgsub
hg commit -m "added subrepo"
cd ..

rem == clone ==
hg clone app app-clone

type app-clone\lib\lib.txt

編集:わかりました。 @VonCに感謝します。次のセクションをバッチファイルのrem == clone ==行の上に追加して再実行すると、サブリポジトリが正しいチェンジセットにロックされます。

rem == lock ==
cd app\lib
hg update 1
cd ..
hg commit -m "lock to second commit"
cd ..
4

2 に答える 2

3

hg updateテストされていませんが、サブリポジトリ内に移動し、そのコンテンツを適切なコミット( )に更新し、(メインプロジェクトで)1レベル上に戻ってコミットできるはずです。それは正しいコミットで
更新する必要があります。.hgsubstate

(極端な回避策、自分で更新して.hgsubstateください。ただし、これはお勧めしません。)

hgサブリポジトリ(またはGitサブモジュール)のすべてのアイデアは、特定のサブリポジトリの固定IDを参照することで依存関係の管理を可能にすることです。サブリポジトリの作成時にIDが指定されていない場合は、最新のID(この場合はv4)が選択されますが、必要なIDをチェックアウトできます。

実際、このスレッドは次のように不平を言っています。

現在、commitは、現在のリポジトリをコミットする前に、サブリポジトリを再帰的にコミットしようとします。

これにより、次のことが可能になります。

  • サブリポジトリにいくつかの変更を記録します。
  • .hgsubstateメインプロジェクトのをサブリポジトリの新しい状態(id)で更新し ます。
于 2010-05-19T16:49:49.407 に答える
3

サブリポジトリのリビジョンは、明示的に選択しないと進められないため、最初に希望どおりに設定するだけで済みます。サブリポジトリを最初に作成するときは、「-r」引数を使用して、必要なチェンジセットまでのみクローンを作成します。

rem == subrepos ==
cd app
hg clone -r CHANGESETYOUWANT ..\lib lib
echo lib = ..\lib >.hgsub
hg add .hgsub
hg commit -m "added subrepo"
cd ..

3行目の変更に注意してください。

于 2010-05-19T16:56:20.827 に答える