問題タブ [subrepos]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
version-control - Mercurial Subrepos - どのように作成し、どのように機能しますか?
状況
2 つの .NET ソリューション (Foo
およびBar
) と、ProjectA、ProjectB、および ProjectC を含む共通ライブラリがあります。Foo
およびBar
1 つ以上のライブラリ プロジェクトを参照していますが、ライブラリ プロジェクトがFoo
およびBar
ソリューション フォルダー内にありません。
ディレクトリ構造:
*残念ながら、私はまだ Windows XP を使用しています...
Mercurial サブリポジトリ
目標Foo
- サブリポジトリを設定して、参照されているライブラリ プロジェクトのソース コードを自分のリポジトリとリポジトリに保存できるようにしたいと考えていBar
ます。
このページ(文字通り、サブレポで見つけることができる唯一のドキュメントです) によると、サブレポを設定するには、DOS コンソール ウィンドウから次のコマンドを実行する必要があります。
質問
- バージョン 0.9.2 の時点で、これらの手順の一部またはすべてを TortoiseHG で実行できますか? はいの場合、どのように?1〜3行目はできると確信していますが、4〜7行目についてはわかりません。これはどれも TortoiseHG で文書化されていないようです。
- 上記のコードは何をしますか (行ごとの説明をいただければ幸いです)。私がそれを解読しようとしていたときに頭に浮かんだいくつかの具体的な質問を次に示します。
- 何をし
>
ますか?Mercurial のドキュメントで を検索してみまし>
たが、何も見つかりませんでした。 - 5行目、何が何だかわかりません
nested/foo
。どこfoo
から来たの?とはfoo
? リポジトリ?フォルダー? - 6 行目 - これには完全に困惑します。
- 7 行目で、 ?
.hgsub
に追加されていると仮定します。main
それとも追加されていnested
ますか?
- 何をし
- サブリポジトリがセットアップされ、
Bar
リポジトリがリビジョン 10 になったとします。作業ディレクトリをリビジョン 7 に更新しようとすると、ライブラリ フォルダー (My Documents/Development/Libraries/ProjectA
および.../Libraries/ProjectB
) がリビジョン 7 に保存されているものに更新されます。良い?
アップデート
コードの 8 行目を追加しました: ci -m "initial commit"
. これにより、(1) .hgsubstate ファイルがメイン リポジトリに追加され、(2) 新しいサブリポジトリを含むすべての変更がメイン リポジトリにコミットされます (「初期コミット」というメッセージが表示されます)。.hgsubstate ファイルの目的は、すべてのサブリポジトリの状態を追跡することです。そのため、以前のリビジョンに戻ると、すべてのサブリポジトリからも正しいリビジョンが取得されます。
更新 2 - いくつかの指示
さらに実験を重ねた結果、元の問題を解決するための手順を提供できるようになったと思います(主に Windows Explorer と TortoiseHG を使用)。
サブレポの作成
Libraries/ProjectA
、Libraries/ProjectB
、およびメイン リポジトリ (Projects/Foo/Solution
およびProjects/Bar/Solution
) は、個別のリポジトリである必要があります。- 開く
Projects/Foo/Solution
。 Libraries/ProjectA
からにクローンしProjects/Foo/Solution
ます。- リポジトリに追加
ProjectA
します。Foo
テキスト エディタを使用して
/li>.hgsub
、次の内容を含むというファイルを作成します。DOS コンソール ウィンドウを開き、次のコマンドを入力します(以下の注を参照)。
/li>の場合
/li>Bar
、手順は基本的に同じですが、.hgsub ファイルには次のように両方のプロジェクトのエントリが含まれている必要があります。
注: TortoiseHG 0.10 (3 月に予定) から、これを行うためにシェル コマンドを使用できるようになりますHG Commit
が、今のところ、コマンド ラインを使用する必要があります。
これがすべて設定されると、少し簡単になります。
変更のコミット-Foo
またはへの変更をコミットするには、サブリポジトリごとに操作をBar
実行しSynchronize/Pull
て、サブリポジトリをライブラリ プロジェクト リポジトリの最新のリビジョンと同期させます。次に、再度コマンドラインを使用して変更をコミットします (バージョン 0.10 までは、TortoiseHG を使用してコミットするだけです)。
作業ディレクトリを以前のリビジョンに更新する- これは TortoiseHG でかなり正常に動作するようで、DOS コマンドを使用する必要はないようです。Synchronize/Push
Visual Studio で以前のリビジョンを実際に操作するには、古いバージョンのライブラリ プロジェクトをLibraries/ProjectX
フォルダーに戻す操作を行う必要があります。
単純なタスクには TortoiseHG が好きですが、頻繁に使用されるサブリポジトリ操作 (特に更新) にはバッチ ファイルを作成する方がよいでしょう。
これが将来誰かに役立つことを願っています。間違いを見つけた場合は、お知らせください (または、編集できる場合は自由に編集してください)。
mercurial - Mercurial 1.4.x の subprepos 機能は本番環境で使用できますか?
作業中のプロジェクトで Mercurial を評価したいと思います。しかし、私のプロジェクトのほとんどは、svn:externals のようなサポートの存在に大きく依存しています。私は StackOverflow を検索し、Mercurial で対応するサポートをグーグルで検索しました。私が見つけたのは Mercurial 1.3 で追加された subrepo 機能だけですが、この機能のページには次のように書かれていました:
subrepos は Mercurial 1.3 の実験的な機能です。したがって、ミッション クリティカルなリポジトリではこれを行わないでください。
不安定なものは使いたくない。
この機能の実際のステータスと、それを洗練/仕上げる計画、およびいつ「安定」と呼ばれ、ミッションクリティカルなリポジトリの準備が整うかについて、誰かが光を当てることができますか?
mercurial - Mercurial/TortoiseHgでネストされたHgリポジトリを処理する正しい方法は何ですか?
TortoiseHg を使用してネストされたリポジトリを正しく追跡する方法に苦労しています。
プロジェクト全体を追跡するメイン リポジトリがあります。このプロジェクトには、いくつかの小さなプラグインが含まれており、これらは plugins/ サブディレクトリ内に保存されています。
プラグインに加えられた変更を含むプロジェクトの「全体」コミットを作成し、それを別の場所にプッシュできるようにしながら、各プラグインを個別に追跡したいと思います (それぞれのプラグインをコミットして BitBucket にプッシュします)。 BitBucket ではありません)。
これまでに行ったことは、プラグインごとに新しいレポを作成することです。簡単に BitBucket にコミットしてプッシュできます。しかし、「メイン」リポジトリをコミットしようとすると、TortoiseHg はエラー メッセージを表示しますabort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'
。
何か間違ったことをしていることはわかりますが、何が悪いのかわかりません。
WinXP で Mercurial と TortoiseHg (ToirtoiseHg バージョン 0.9.3+237-ea50f793bbe4 および Mercurial-1.4.3+225-70dea42c9406) の両方のナイトリーを使用しています。サブリポジトリの処理がこの TortoiseHg ビルドに追加されたことを読みましたが、サブリポジトリがここで使用する機能であるかどうかさえわかりません。
更新
ある程度の進歩はありましたが、まだ思い通りに動作させることができません。
これが私の構造です:
app/plugins に移動し、ここで BitBucket からプラグイン (plugin3 という名前) を複製しました。次に、ルートに .hgsub ファイルを作成して追加app/plugins/plugin3 = app/plugins/plugin3
しました。その後、ディレクトリ全体をコミットできました。
しかしその後、BitBucket から plugin1 の最新バージョンを取得しようとしたため、app/plugins に移動し、plugin1/ フォルダーを削除して、BitBucket から plugin1 のクローンを作成しました。app/plugins/plugin1 = app/plugins/plugin1
次に.hgsubに追加しましたが、コミットしようとすると、abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'
この問題は、subrepo が plugins/ ディレクトリで Hg によって既に追跡されているディレクトリと同じ名前を保持している場合に発生するようです。
私は何を間違っていますか?プラグインの .hg に何か特別なものを追加/編集する必要がありますか?
更新
最終的に、思い通りに動作させることができました。
「手動で」Mercurial に plugins/plugin1、plugins/plugin2 ディレクトリを削除し、変更をコミットしてから、BitBucket から plugin1 と plugin2 を複製し、.hgsub に追加app/plugins/plugin1 = app/plugins/plugin1
してすべてコミットするように指示する必要がありました。出来た。
重要なステップは、plugin1/plugin2 フォルダーを削除した後にコミットすることでした。
mercurial - Mercurial hg サブリポジトリの問題 - 「中止: 不明なリビジョン」
注: 昨日kiln.stackexchange.comでこれを尋ねましたが、回答が得られず、作業が滞っています。そこで、ここで打ってみようと思いました。
私のメインの mercurial リポジトリには、たくさんのサブリポジトリがあります。初期設定時に、.hgsub
. つまり、2 つのサブリポジトリを同じディレクトリに指定しました。
私が持っていたはずのもの:
私が実際に持っていたもの:
愚かなコピー/貼り付けエラー。.hgsub
エラーに気づかずに、間違った をコミットしました。いくつかの改訂後、いくつかの新しいサブリポジトリを に追加しているとき.hgsub
に、間違いに気づき、 内で修正しました.hgsub
。私はコミットし、転がり続けました。の間違いを「修正」したので、やり直したくないほどの量の作業をコミットしました.hgsub
。
ここで、実際の問題に直面します。サブリポジトリ内でいくつかの変更を行いましsites/3
た。メイン リポジトリをコミットしようとすると、次のエラーが発生します。
abort: unknown revision 'LongGUIDLookingString'
私が抱えているのと同じ問題に対処しているように見えるこのディスカッションを見つけましたが、ボスがどのように修正したかはよくわかりません。これを修正するにはどうすればよいですか?
の関連セクション.hgsubstate
:
mercurial - tortoisehg とサブレポ
Tortoisehg (1.0) をサブリポジトリで動作させることができません
次のようなディレクトリ構造があります。
ルートの下の .hgsub ファイルは次のようになります
ファイルCustomer1\Project1\foo.txt
を変更してルートからコミットすると機能します
Tortoisehgcustomer1\project1
ではステータスS
(サブレポ) が表示されますが、コミットするとメッセージが表示されます
このシナリオはサポートされていませんか、それとも間違っていますか?
「TortoiseHg 1.0では
、サブリポジトリの基本的なサポートが導入されましたが、これはコミット / ステータス ツールでのみ行われました。Mercurial がサブリポジトリをダーティと見なすと、コミット ツールではファイル リストの特別なエントリとしてステータス S で表示されます。サブリポジトリがコミットのファイル リストに含まれている場合、サブリポジトリは他の変更と共にコミットされ、メイン リポジトリ ルートの .hgsubstate ファイルが更新されます。
mercurial - Mercurial リモート サブリポジトリ
複数のサブリポジトリで動作するように Mercurial リポジトリ システムをセットアップしようとしています。基本的にこれらの手順に従って、Mercurial クライアント v1.5 でクライアント リポジトリをセットアップし、HgWebDirを使用して複数のプロジェクトをホストしています。
次の構造の HgWebDir があります。
mylib
によって消費される一般的なテンプレート ライブラリのコレクションですfooproj
。の構造はfooproj
次のようになります。
次.hgsub
のようになります。
ドキュメントの私の解釈によれば、これはうまくいくはずです:
最初の「ネストされた」は作業ディレクトリのパスで、2 番目はプル元の URL またはパスです。
また、mylib
プロジェクトのディレクトリ構造は次のようになります。
fooproj
したがって、次のようにホームフォルダーにプルダウンするとします。
これにより、ディレクトリ構造が適切にプルダウンされ~/foo/src/mylib
、ローカルの Mercurial リポジトリであるフォルダーが追加されます。ここから問題が始まります。mylib
フォルダは のアイテムを除いて空.hg
です。Mercurial からのメッセージは次のとおりです。
2 秒の調査で、次のことがわかりますsrc/mylib/.hg/hgrc
。
これは完全に間違っていpull
ます (その URL は意味をなさないため、そのレポにアクセスしようとすると 404 が返されます)。
論理的には、デフォルト値は私が指定した値である必要があります.hgsub
。そうしないと、何らかの方法でリポジトリからファイルが取得されます。もちろん、次のように変更src/mylib/.hg/hgrc
します。
ランニングhg pull && hg update
は完璧に機能します。もちろん、これはそもそもサブレポを使わないことと基本的に同じことです。
pull
どの Mercurial コマンドも ( from withinを除いてsrc/mylib
) エラー コードを返さないため、適切に動作していると明確に信じています (また、そうである可能性もあります)。
私は何を間違っていますか?
究極の問題は、.hgsubstate
常に次のようになることです。
しかし、私はそれを修正する方法がわかりません...
mercurial - Mercurialのすべてのサブリポジトリに変更を反映させるにはどうすればよいですか?
私は最近、ソース管理のためにSubversionからMercurialに切り替えました。そうすることで、1つのリポジトリを複数に分割しました。サブリポジトリを使用して、リポジトリ間の依存関係を管理しました。問題は、プルがsuprepoに対応していないため、リポジトリを更新するために、各サブリポジトリに移動して変更をプルする必要があることです。これを行うためのより良い方法はありますか?
mercurial - Mercurial Subrepos、サブリポジトリに使用するチェンジセットを制御する方法は?
私はサブリポジトリを読んでいて、ローカルでいくつかのテストを実行していますが、これまでのところ問題なく動作しているようですが、1つ質問があります。
特定のサブリポジトリに使用するチェンジセットを指定/制御するにはどうすればよいですか?
たとえば、次の2つのプロジェクトがあるとします。
ここで、アプリケーションのサブリポジトリとしてクラスライブラリが必要ですが、最長のブランチ(4番目のコミットとして終了するブランチ)が未成熟であるため、一時的に「2番目のコミット」のヒントを使用したいと思います。
それが可能であると仮定して、それを構成するにはどうすればよいですか?
上記の2つのリポジトリを設定し、ライブラリをサブリポジトリとして追加するバッチファイルを次に示します。
バッチファイルを実行すると、次のように出力されます。
その最後の行からわかるように、クラスライブラリ内のファイルの内容を確認します。これは4番目のコミットからの「v4」です。「v2」にし、クラスライブラリリポジトリから新しいバージョンをプルダウンする準備ができるまで「v2」のままにしておきます。
私がやりたいことができるかどうか、もしそうなら、サブリポジトリを正しいチェンジセットにロックするために何をする必要があるかを誰かに教えてもらえますか?
バッチファイル:
編集:わかりました。 @VonCに感謝します。次のセクションをバッチファイルのrem == clone ==
行の上に追加して再実行すると、サブリポジトリが正しいチェンジセットにロックされます。
eclipse - eclipse と torotoiseHG で Mercurial サブリポジトリがバージョン管理されていないファイルとして動作するのはなぜですか?
Mercurial Eclipse plugin\tortoiseHG を使用して、mercurial のサブレポ機能を使用しようとしています。
これらは私が取ったステップです:
- 空のディレクトリを作成しました
/root
- このフォルダ内のサブリポジトリにしたいすべてのリポジトリを複製しました(
/root/sub1
、/root/sub2
) .hgsub
ルートリポジトリにファイルを作成して追加し/root/.hgsub
、サブリポジトリのすべてのマッピングをその中に入れました- tortoiseHG を使用し、右クリックし
/root
て選択create repository here
- 再びカメで、内部のすべてのファイルを選択し、
/root
それらをルートリポジトリに追加しました - ルートリポジトリをコミットしました
- キルンに設定した空のレポにローカルルートレポをプッシュしました
次に、import->mercurial を使用して、Eclipse でルート リポジトリをプルしました。
これで、すべてのサブリポジトリがバージョン管理されていないように見えることがわかります (Eclipse ファイル エクスプローラーの対応するフォルダーの横に「オレンジ色の円柱」アイコンが表示されません)。
さらに、サブレポの 1 つを右クリックすると、ルート プロジェクトでは、通常のように「チーム」メニューにすべての hg コマンドが表示されません。「プル」、「プッシュ」などはありません。
また、サブレポのファイルに変更を加えてからルート プロジェクトを「コミット」すると、変更が見つからないことがわかりました。
tortoiseHG でも同じ動作が見られます - の下/root
のファイルを参照している場合、ルート リポジトリに直接属するファイルには、バージョン管理されていることを示す小さなアイコン (V 記号) が表示されますが、サブリポジトリのフォルダーはマークされません。そのような。
私の側のエラーであると思われるのは、1.亀と日食の両方が同じことを行うため、どちらかのバグである可能性は低いです2.それらが行うことはかなり洗練されているように見えるため、バグ - どちらも .hgsub にあるすべてのフォルダーを無視します。逆のことが起こった場合 (すべてのサブリポジトリがバージョン管理されていないものとして扱われるのではなく、メイン リポジトリの通常のフォルダーとして扱われる)、サブリポジトリを扱わないことによって引き起こされたバグだと思っていたでしょう。しかし、明らかに両方のアプリが .hgsub ファイルを認識しています
私は何か間違ったことをしていますか、それともバグですか?
mercurial - サブリポジトリのROIはどれくらいですか?
サブリポジトリはチームの時間を節約することを知っていますが、サブリポジトリのROIはどのくらいですか?