8


4

亀とサブレポ

Tortoisehg(1.0)をサブレポで動作させることができません

私はこのようなディレクトリ構造を持っています:

root
  .hg
  .hgsub
  .hgsubstate
  Customer1
    Project1
      .hg
      foo.txt
    Project2
      .hg
  Customer2
    Project3
      .hg

ルート下の.hgsubファイルは次のようになります

Customer1\Project1=Customer1\Project1
Customer1\Project2=Customer1\Project2
Customer2\Project3=Customer2\Project3

ファイル `Customer1 \ Project1 \ foo.txt`を変更し、ルートからコミットすると動作します

>hg ci -m "command line commit"
committing subrepository customer1\project1

Tortoisehgでは、 customer1 \ project1`のステータスは S`(サブレポ)で表示されますが、コミットするとメッセージが表示されます

abort: customer1/project1: no match under directory!

このシナリオはサポートされていませんか、何か間違っていますか?

ドキュメントには次のように書かれています:+ _ "TortoiseHg 1.0は、サブリポジトリの初歩的なサポートを導入しました。コミット/ステータスツールでのみです。 Mercurialがサブレポをダーティと見なした場合、サブレポは、ステータスSのファイルリストの特別なエントリとしてコミットツールに表示されます。 サブリポジトリがコミットのファイルリストに含まれている場合、サブリポジトリは他の変更とともにコミットされ、メインリポジトリルートの.hgsubstateファイルが更新されます。 "_

5 Answer


9


私はほとんど同じ問題を抱えていたので、さまざまなバリエーションを試し始めました。どこにでもバックスラッシュ(\)ではなく、等号の両側にスラッシュ(/)を使用することで、ようやく機能するようになりました。

試してみてください…​

Customer1/Project1=Customer1/Project1
Customer1/Project2=Customer1/Project2
Customer2/Project3=Customer2/Project3

また、動作していないとき、私の.hgsubstateファイルにはゼロの束しかありませんでした。 動作し始めたとき、本物のGUIDが含まれていました。


7


メインリポジトリのコマンドラインを使用してコミットすることで、この問題を乗り越えることができました。

hg commit -m 'Updated subrepo'


4


私は同じ問題を抱えていた:

リポジトリの1つで、変更されたサブレポモジュールの1つをコミットすると、メッセージで失敗しました

"abort: mysubrepo: no match under directory!"

理由:

  • TortoiseHG *は、サブリポジトリへのコミットに失敗します。これは、大文字と小文字を区別するフォルダー名を処理するためです!

例:元のリポジトリ:

C:\Shared\MySubRepo

これをコマンドラインでサブリポジトリとして別のリポジトリにクローンする

hg clone C:\shared\mysubrepo   <--- Note the lower cases!

親リポジトリ内に_mysubrepo_サブレポフォルダーを作成します。 通常どおり_.hgsub_ファイルに追加します(私は常に「\」の代わりにプラットフォームに依存しない「/」を使用するため、これがエラーの原因だとは思いません)。 --subrepos TortoiseHGでコミットしようとすると、「ディレクトリの下で一致しません!」という結果になります。エラー。 ただし、コマンドラインによるコミットは機能します。

  • subrepoフォルダーの名前を変更* _mysubrepo_を_MySubRepo_に変更した後(大文字の元のフォルダーとして)、TortoiseHgは正常にコミットできました!

おそらく、_hgrc_ファイルのフォルダー名も編集する必要がありますが、これが本当に必要かどうかはわかりません。ファイル名を変更する前にファイル名を変更したためです。 また、TortoiseHg Workbenchのリポジトリレジストリからリポジトリを削除して再読み込みする必要がある場合があります(および/またはWorkbenchの再起動)。


2


  • Customer1 もネストされたリポジトリである必要があるため、サブリポジトリとして "Customer1 \ Project1" *を指定することに問題があると思います。

  • Customer1 および Customer2 の両方に、サブリポジトリを記述する '.hgsub’ファイルが含まれている必要があります( Project1 / 2 *)

  • Customer1 リポジトリを別の場所で再作成し、 Project1 および Project2 をそこにクローンします。 * Project1 *および Project2 エントリを Customer1 *内の '.hgsub’ファイルに追加します。

次に、* Customer2 *リポジトリに対して同じことを行います。

ネストされたリポジトリは_themselves_をネストできるため、「ルート」リポジトリを作成し、* Customer1 および Customer2 *を.hgsubファイルにエントリを追加することをそこにクローンすることに注意してください。

「root」をコミットすれば大丈夫です。

重要なのは、サブリポジトリのすべてのインスタンスからそのクローンマスタに変更をプッシュして、そのサブリポジトリを含む他のクローンが必要に応じてそのリビジョンをプルできるようにすることです。

すべてのマスターリポジトリがマシンの同じ親フォルダーにあるため、 '.. / Project1’や '../Customer1’などの '.hgsub’ファイル内に相対パスを配置して、ローカルクローンに変更をプッシュする簡単な方法になります。中央サーバーから。

TortoiseHGを使用する限り、ネストされたリポジトリで「.hgsubstate」ファイルを作成および管理するため、v1.0で問題ありません*「。hgsub」ファイルを既に作成している限り!*


0


2セントを追加します。

次のシナリオでは、Windowsで「abort:customer1 / project1:no directory under directory」というエラーが表示されました。

  • リポジトリは「MyFolder」という名前のフォルダーにありました(大文字に注意してください)

  • レポにはサブレポがありました

  • 親リポジトリの*一部のファイル*(一部のみ!)を使用してコミットされました myfolder / filename.ext(小文字に注意してください)

すべてが正常に動作し、コマンドラインのコミットは正常に動作しますが、Tortoiseは不満を述べています。

ファイルの名前を変更します( `hg status --all`を使用して小文字のものを見つければ問題ありません)