問題タブ [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.
mercurial - サブリポジトリとオフラインクローンを使用したMercurialワークフロー?
私はたくさんオフラインです。
そのため、通常、機能やバグなどの「ハブ」として1つのローカルクローンを使用します。
オフラインで動作します。涼しい。
そのプロジェクトにリモートサブリポジトリが含まれている場合、同様のワークフローを使用できますか?
なぜなら、.hgsubが言うなら
hgクローンは言う
クローンが作成されると(接続中に)、(の場所ではなく)サブリポジトリのパスが使用されることに注意push
してpull
ください。だから私はこれをローカルクローンに向けることができ、すべてがクールです。hgrc
.hgsub
しかし、clone
見て.hgsub
ください(それが想定されているように)。したがって、「祝福された」サブリポジトリがサーバー上にある場合、必要なファイルがそこにあるとしても、オフラインで新しいクローンを作成することはできません。
これは問題ですよね?
mercurial - Mercurial サブリポジトリ
チュートリアルを何度も読みましたが、まだ何かが足りないと感じています。具体的なシナリオを示してみます。私が間違っている場所を見つけるのを手伝ってください。
誰もが「中央」と見なすリポジトリがあるとします。これは、すべての新しい開発者がそこからクローンを作成し、プル/プッシュすることを意味します。Central には 3 つのフォルダーがあります。
- Infra (共有コードになりそうなもの)
- .hg
- infra.txt
- dev1
- dev1.txt
- .hgsub (行があるところ --> infra = (path of infra) )
- インフラ (サブレポ)
- .hg
- infra.txt
- dev2
- dev2.txt
- .hgsub (dev 1 と同じ - infra = (インフラへのパス) )
- インフラ (サブレポ)
- .hg
- infra.txt
ここで、ある開発者が dev1 のクローンを作成し、別の開発者が dev2 のクローンを作成したとします。私が見ているのは、dev1 の開発者がインフラを変更し、その変更を中央のリポジトリにプッシュする場合、dev2 の開発者がインフラの変更を知る唯一の方法は、インフラで着信変更セットをサブとして手動で検索することです。リポジトリ。一般に、プロジェクトに多くのサブリポジトリ (それ自体にさらにサブリポジトリが含まれている可能性があります) がある場合、サブリポジトリを手動で調べる以外に変更について知る方法がないことを意味します。
それは仕事の仕方ではないと思います... 誰か助けてくれますか?
前もって感謝します、
エヤル
git - Mercurial リポジトリに別の git サブレポを持つ git サブレポを使用することは可能ですか?
私はmercurialリポジトリを持っており、gitサブレポ(hg 1.8)を問題なく追加しました。
問題は、この git サブレポの内部に別の git サブレポジトリがあり、git サブレポ.gitmodules
で a を実行しない限り、プルされていない (git のサブレポ ファイルにある) ことですgit clone --recursive
: この方法で動作します。
問題:hg pull
別のマシンのリポジトリでを実行するとgit subrepo
、 がプルされますが、 はプルされません.gitmodules
。.gitmodules は、.gitmodules を実行したときにのみ他のマシンに取り込まれましたgit clone --recursive
。
この状況を処理するための提案はありますか? 醜い解決策は、git clone
サブレポのように振る舞うことなく、すべてのファイル (git メタデータを含む) を mercurial リポジトリに単純に追加することです。
mercurial - MercurialのサブリポジトリURLをhttpsからsshに変更します。それを行うのに問題はありますか?
を.hgsub
使用して呼び出されるサブリポジトリへのエントリがありますhttps
。
ssh
両方のリポジトリが私のものであり、sshキーを作成したので、今、使用したいと思います。したがって、次のようになります。
私は変更しておらず、テストもしていません。このURLを変更すると何らかの問題が発生するかどうか誰かが知っていますか?
mercurial - Mercurial(hg)の「サブパス」はどの程度正確に機能しますか?
Mercurialのサブパスについて読んでいますが、それでも次のことを理解できません。サブパスファイルがバージョン管理されていない場合、少なくともこのための「プライマリ」ソースをどのように用意する必要がありますか?リポジトリ内のサブパスファイルを.hgignoreなどと一緒にバージョン管理し、クローンを作成する.hgフォルダーにコピーする必要がありますか?
mercurial - Mercurial でのサブリポジトリの操作
いくつかの異なる Mercurial リポジトリに分散させたい多くのコンポーネントを含む大きなシステムがあります (システムの一部で作業している人々がシステム全体をチェックアウトする必要がないように)。UNIX と Windows の両方で動作する必要があります。
システム内には、多くの場所で共有する必要がある 1 つのディレクトリがあります (CSS ファイルや画像などの一般的なものを保持します)。
各コンポーネントに共有レポへのサブレポがあり、そのレポも上位レベルでチェックアウトされるように設定しました。私がこれを行ったのは、プログラマーがメイン リポジトリから「hg プル」を実行できるようにしたいが、「hg プッシュ」は実行できないようにしたいからです (すべての変更は、「hg サーブ」によって自分の作業からプルされ、最初にチェックされます)。メインリポジトリに戻します)。
したがって、トップレベルでは、プログラマーは以下をチェックアウトできます。
コア スタイル ComponentSetA ComponentSetB など。
これらはすべて、(クローンを介して) http://machine/hg/RepoNameを指しています。
そして、私はサブレポを持っています:
ComponentSetA/web/style (style = ../../Style in web/.hgsub) ComponentSetB/web/style など
私の問題は、「hg クローン」で、サブリポジトリを自動的に作成できないように見えることです。透明にしてほしい。プログラマーのいずれかが変更を行っていない場合、彼らはそこにいることに気付かないはずです...
最初に Style リポジトリをチェックアウトしてから、コンポーネントの 1 つを実行する必要がある場合は問題ありませんが、プログラマが下位レベルの変更を共通のリポジトリにプッシュできるように、トップレベルのリポジトリへの追加レベルの間接化が必要です。レポ。
助言がありますか?
mercurial - Hg サブリポジトリの依存関係
過去にHgサブレポの依存関係についていくつかの質問がありました(こことここ)が、受け入れられた回答は私にとって問題に対処していないようです.
私のプロジェクトには、A、B、C、D の 4 つの依存関係があります。D は A、B、C に依存しています。B と C は A に依存しています。
Hg サブリポジトリを使用してそれらを保存し、それらが依存しているそれぞれのバージョンを追跡できるようにしたいと考えています。これは、このプロジェクトで A、B、C、および D を使用している間、他のプロジェクトでは A と B だけが必要になるためです。したがって、B と C は、D とは別に必要な A のバージョンを追跡する必要があります。同時に、私のアプリケーションでは、特定のバージョンの D によって参照される B と C のバージョンは、常に、D によって参照されるものと同じバージョンの A を使用する必要があります。 D の指定されたバージョン (それ以外の場合は、実行時にフォールオーバーします)。私が本当に望んでいるのは、それらが同じディレクトリ内の兄弟として相互に参照できるようにすることです。つまり、D の .hgsub は次のようになり、B と C は最初の行のようになります。
しかし、これはうまくいかないようです: 理由はわかります (人々に首を吊るすのに十分なロープを与えるのは簡単でしょう) が、私の依存関係に対する最も適切な解決策だと思うので、それは残念です. いくつかの提案された解決策を読みましたが、それらについて簡単に概説し、それらがうまくいかない理由を説明します。
ネストされたサブディレクトリとしてコピーを含め、これらを Hg サブリポジトリとして参照します。これにより、次のディレクトリ構造が生成されます (代わりに \D 内のコピーを参照することを受け入れることができるため、A、B、C、B\A、C\A のプライマリ コピーを削除しました)。
- project\ (すべてのメイン プロジェクト ファイル)
- プロジェクト\D
- プロジェクト\D\A
- プロジェクト\D\B
- プロジェクト\D\B\A
- プロジェクト\D\C
- プロジェクト\D\C\A
このアプローチの問題:
- 現在、ディスク上に A の 3 つのコピーがあり、そのすべてに独立した変更が含まれている可能性があり、中央リポジトリにプッシュする前に同期およびマージする必要があります。
- B、C、および D が同じバージョンの A を参照していることを確認するために、他のメカニズムを使用する必要があります (たとえば、D は v1 を使用し、D\B は v2 を使用できます)。
バリエーション: 上記を使用しますが、親コピーのコピーを指すように .hgsub の RHS を指定します(つまり、B と C には以下の .hgsub が必要です)。
このアプローチの問題:
- ディスクにはまだ 3 つのコピーがあります
- 初めて B または C を複製すると、参照されているバージョンの A を "..\A" から再帰的にプルしようとしますが、これは存在しない可能性があり、おそらくエラーが発生します。存在しない場合、レポがどこにあるのかについての手がかりが得られません。
- 変更を再帰的にプッシュすると、D\B\A の変更が共有の中央レポに反映されません。代わりに D\A にプッシュされるだけです。したがって、2 回続けてプッシュすると、すべての変更が正しく反映されることを保証できますが、これはかなりの間違いです。
- 同様に、(手動で) 再帰的なプルを行う場合、最新の変更を取得するために正しい順序を取得する必要があります (つまり、D\B\A をプルする前に D\A をプルします)。
シンボリックリンクを使用して、フォルダー \D\B\A を D\A などにポイントします。
このアプローチの問題:
- シンボリック リンクは Hg リポジトリ自体でエンコードできないため、チーム メンバーがリポジトリを複製するたびに、手動またはスクリプトを使用してシンボリック リンクを再作成する必要があります。これは許容できるかもしれませんが、より良い解決策を希望します。また (個人的な好み) シンボリック リンクは非常に直感的ではありません。
これらは利用可能な最善のソリューションですか? 私の最初の .hgsub (上を参照) が夢物語である正当な理由はありますか、またはこの変更を要求/実装する方法はありますか?
A、B、C、Dのより広い使用法をよりよく説明するために更新されました
mercurial - Mercurialに常に--subreposを使用させる
常にサブリポジトリをチェックするようにMercurialを設定することは可能ですか?
毎回コマンドで指定しなくても、常に有効にしてほしい。
mercurial - サブリポジトリのみのタグ付け
次のように、1つのサブリポジトリを持つMercurialメインリポジトリがあります。
Sub
そして、私は、最新の状態を保ちながら、のみタグを付けたいと思いMain/.hgsubstate
ます(つまり、タグ付けプロセスの結果の変更セットを指し示しSub
ます)。
メインリポジトリにタグを付けたくありません。
内部からタグ付けせずにそれを可能にし、最新の状態Sub
にするために魔法をMain/.hgsubstate
かけますか?
powershell - Mercurial: サブリポジトリを自動的に追加する Windows スクリプト
RyanWilcoxは、次のコマンドを使用してサブリポジトリを自動的に追加できるスクリプトをhereに投稿しました。
それを Windows バッチまたは PowerShell スクリプトに変換するにはどうすればよいですか?