問題タブ [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-server は subrepo をサポートしていますか?
マシンの 1 つに mercurial-server をインストールし、そこにプロジェクトを複製しました。3 つのサブリポジトリがあり、それを別の場所に複製しようとすると、エラーが発生します。
remote:mercurial-server:既存のリポジトリの下にリポジトリを作成できません
中止: リモート hg から適切な応答がありません!
そのため、mercurial-server は subrepo を処理しないと考え始めています。
どんな手掛かり?
mercurial - リポジトリ内のMercurialリポジトリ
既存のMercurialリポジトリ内にMercurialリポジトリを作成することは可能ですか?
リポジトリのサブディレクトリを別のリポジトリとして処理するという考え方ですが、どのように処理しますか?
私はサブリポジトリについて話していません(少なくとも、サブリポジトリの目的を理解していれば...)、しかしこれがサブリポジトリが存在する方法である場合、私はそれを間違えました、そして私はそれを正しくしようとします:)
ありがとう〜アキ
編集:より明確にするために、モジュール/サブリポジトリを指定せずに、別のリポジトリ内にリポジトリを配置することの実践と影響について知りたいと思います。言い換えれば、私がただやったらどうなるか:
これらの2つのリポジトリをそのまま使用しますか?
mercurial - Mercurialプロジェクトの下でサードパーティのライブラリを維持する:サブリポジトリかどうか?
Mercurialでバージョン管理されたクローズドソースプロジェクトを開発しています。プロジェクトでは2つのライブラリを使用しています。
それらのライブラリの1つは、サードパーティによって開発されています。彼らはgitを使用しており、通常は週に1回、リポジトリからプルして最新の変更を取得します。
もう1つのライブラリは、独自に開発中であり、活発に開発されています。LGPLの下でライセンスされているため、独自のパブリックMercurialリポジトリに存在する必要があります。(これは、サードパーティのLGPLコンポーネントのフォークであり、当社のプラットフォームに移植されています)
だから私の質問は次のとおりです。次のことを確実にするために、ソースをどのように整理する必要がありますか。
私たちのチームの開発者は、1つの「クローン」コマンドですべてのソース(メインプロジェクト+ライブラリ)を取得できるはずです。
ライブラリの1つがgitによって管理されている場合でも、ライブラリから最新の変更を簡単に取得できるはずです。
gitの下のライブラリにアクセスするためにhg-gitを使用して、Mercurialサブリポジトリ機能を使用する必要がありますか?TortoiseHgとBitBucketで十分にサポートされていますか?(長所:ライブラリの変更を簡単に取得/短所:うまく機能しますか?)
または、プロジェクトの下にあるライブラリのスナップショットのみを保持する必要がありますか?(したがって、ライブラリに新しいアップストリームの変更がある場合は、それらを別の場所にプルしてから、ソース全体をプロジェクトにコピーしますか?(長所:機能します/短所:お尻の痛み、特にライブラリの場合自分たちで開発しているので、日々変化します)
visual-studio - 大きなレポを複数のサブレポに分割し、履歴を保持する (Mercurial)
SVN の 1 つのディレクトリに複数の共有プロジェクト、ソリューション ファイルなどを含むコードの大規模なベースがあります。Mercurial に移行しています。この機会に、コードをいくつかのリポジトリに再編成して、分岐用のクローン作成のオーバーヘッドを減らしたいと思います。履歴を保持しながら、リポジトリを SVN から Mercurial に変換することに成功しました。私の質問: 履歴を保持しながら、すべての異なるプロジェクトを別々のリポジトリに分割するにはどうすればよいですか?
これは、単一のリポジトリ (OurPlatform) が現在どのように見えるかの例です。
これらはすべて、ソリューション ファイルを除く VS プロジェクトを含むフォルダーです。Product1.sln と Product2.sln は両方とも、他のすべてのプロジェクトを参照します。理想的には、これらのフォルダーのそれぞれを取得して、それらを個別の Hg リポジトリーに変換し、プロジェクトごとに新しいリポジトリーを追加します (それらは親リポジトリーとして機能します)。次に、誰かが Product1 で作業する場合、Product1.sln と、ReferenceAssemblies、Core、Core.Tests、Database、Database.Tests、CMS、および CMS.Tests へのサブレポ参照を含む Product1 リポジトリを複製します。
そのため、プロジェクト ディレクトリで hg init を実行するだけで簡単に実行できます。しかし、歴史を保存しながらそれを行うことができますか? または、これを整理するより良い方法はありますか?
編集::::
Ry4an さんの回答のおかげで、目標を達成することができました。ここで他の人のためにどのようにそれを行ったかを共有したかった.
多くの個別のプロジェクトがあったため、ファイルマップの作成を自動化し、実際に変換を行うための最終的なバット スクリプトを作成する小さな bash スクリプトを作成しました。回答から完全には明らかではありませんでしたが、ファイルマップごとに convert コマンドを 1 回実行して、プロジェクトごとに個別のリポジトリを作成する必要があることです。このスクリプトは、以前に変換した svn 作業コピーの上のディレクトリに配置されます。作業コピーを使用したのは、そのファイル構造が、最終的な新しい hg リポジトリにしたいものに最もよく一致したためです。
このスクリプトは、svn 作業コピー内のすべてのファイルを調べ、タイプに応じて、新しいファイルマップ ファイルを作成するか、既存のファイルに追加します。if は、実際にはその他のビジュアルスタジオファイルをキャッチし、それらを別のリポジトリに配置するだけです。これは bash (私の場合は cygwin) で実行することを意図していますが、実際の convert コマンドの実行は、Windows でのフォーク/プロセスの問題により、TortoiseHg に同梱されている hg のバージョンを介して実行されます (ああ、私は知っています...)。
そのため、変換された hg リポジトリを参照する MASTERGO.convert.bat ファイルを実行し、提供されたファイルマップを使用して別のリポジトリを作成します。完了すると、各プロジェクトのフォルダー/リポジトリと、各ソリューションのフォルダー/リポジトリを含む hg-separated というフォルダーがあります。次に、すべてのプロジェクトをソリューション リポジトリに手動で複製し、その複製を .hgsub ファイルに追加する必要があります。コミット後、.hgsubstate ファイルが作成され、準備完了です!
上記の例では、私の .hgsub ファイルは "Product1" に対して次のようになります。
これらのリポジトリを中央サーバーに転送したら、手動でパスを URL に変更します。
また、現在すべてが分離されているため、最初の OurPlatform svn リポジトリに類似するものはありません。
再度、感謝します!
mercurial - Mercurial のネストされたサブレポ (サブレポ内のサブレポ) は再帰的にコミットしていませんか?
別のサブレポ内にサブレポがある、このようにセットアップされた Mercurial レポがあります。
foo.txt と bar.txt を変更してルート内からコミットすると、すべてがうまくいき、ネストされたすべてのサブリポジトリがコミットされます。ただし、bar.txt のみを変更して Root からコミットすると、Hg は何も変更されていないと見なします。FurtherNestedに変更しかない場合、FurtherNestedの変更をコミットするには、Nested内からコミットする必要があります。ネストされたサブリポジトリが機能するためには、再帰が機能するために、ネストされた各レベルに変更が含まれている必要があるようです。
サブレポに関する Mercurial のドキュメントを読んでも、変更があった場合にのみサブレポのコミットが伝播することを暗示しているようには見えませんでした。実際、それは反対のことを言っています:
コミットすると、Mercurial は定義されたすべてのサブリポジトリで再帰的にコミットしようとします...
だから私の質問は、これは予想されることですか、それとも何かが壊れているのか、まだ行われていないのですか (Windows の Mercurial 1.5.4)?
mercurial - Mercurial サブレポを特定のリビジョン (svn:externals など) にペグすることは可能ですか?
Subversion から Mercurial に一連のプロジェクトを移行しています。プロジェクトは現在、svn:externals を使用して、あるコードから別のコードにプルします。外部を特定のリビジョン番号に向け、必要に応じて手動で更新するという推奨事項に従っています (メイン プロジェクトの過去のリビジョンに更新すると、外部の過去のバージョンも取得できるようになります)。
Mercurial で外部を行う方法はサブリポジトリを使用しているようですが、それらを特定のリビジョンにペグする方法がわかりません。メイン リポジトリを更新するたびに、Hg は常にサブリポジトリを最新のリビジョンに更新するようです。あれは正しいですか?それを回避する方法はありますか?
mercurial - サブリポジトリをプッシュせずにMercurialリポジトリをプッシュする
Mercurial1.6を使用しています。いくつかのサブリポジトリ(11)を持つリポジトリがあります。子リポジトリをプッシュせずに、親リポジトリをデフォルトのリモートリポジトリにプッシュしたいと思います。これを実行したい理由は次のとおりです。
- SSHリポジトリを使用していますが、接続を確立して各サブリポジトリに何もプッシュしないのに長い時間がかかります。
- (まだ)リモートリポジトリに伝播したくないサブリポジトリにコミットがあります。
- サブリポジトリには、レポリポジトリに伝播されるべきではない名前のブランチがあります(そして、サブリポジトリのプッシュ操作にブランチ名を渡す方法は明らかにありません)。
しかし、私はこれを達成する方法を見つけることができませんでした。.hgsubと.hgsubstateのコンテンツを(コミットせずに)削除しようとしましたが、それでもMercurialはサブリポジトリをプッシュすることを主張しています。
ローカルリポジトリからリモートリポジトリに変更をプッシュし、サブリポジトリを一時的に無視するにはどうすればよいですか?
mercurial - サブリポジトリを使用しているときに同僚からプルする
親リポジトリにサブリポジトリとして存在する共有ライブラリがいくつかあります。人が親リポジトリを複製すると、次のようになります。
.hgsub は次のようになります。
各サブレポの hgrc は次のようになります。
かなり標準的なもの。
しかし!
このセットアップを使用して、同僚は中央サーバーを仲介者として使用せずに、どのように別の従業員からプルするのでしょうか? したがって、同僚 A は「hg serve」を実行し、B は「hg pull http://coworkerA.us.com:8000」を実行します...しかし、hgsub ファイルがまだ中央サーバーを指しているため、これは失敗します。したがって、B は中央サーバーからのみ変更を取得し、中央サーバーに存在しない A のサブリポジトリからは変更を取得しません。
中央サーバーがダウンしているか、到達できない場合、これはさらに複雑になります。サブリポジトリを使用して、人々が互いに直接プルする方法はありません!
サブレポを使用して同僚間でプルを行うにはどうすればよいですか? hgrc および hgsub ファイルを編集することは問題外です。なぜなら、各サブレポ (約 20 あります) ごとに、また各同僚に対して 1 回ずつ行う必要があるからです。
また、この質問を Kiln StackExchange に投稿して、より多くの聴衆を対象にしました: http://kiln.stackexchange.com/questions/1780/pulling-from-a-co-worker-when-using-subrepositories
mercurial - Mercurial サブレポのパスを絶対パスから相対パスに変更することは可能ですか?
もともと私のサブレポは で絶対 URL を使用して定義されていたため、.hgsub
現在問題が発生しています。ユーザーが作業コピーを複製する中間サーバーを使用したいので、「友好的な独裁者」ワークフローは不可能になります。次に、マスター リポジトリにプッシュする前に中間サーバーに変更をプルします (中間サーバーは継続的インテグレーション ホストでもあるため、マスターに直接プルしません)。絶対パスは、複製されたリポジトリがマスターに直接プッシュされるため、これを防ぎます。
問題は、ファイルhg
に加えた変更をプッシュしようとすると、サーバーが 404 エラーを吐き出すことです。.hgsub
以下は私が行った変更の例です
これは機能しません。次のエラーが吐き出されます
この方法でサブレポの構成を変更することは可能ですか、それともリポジトリ全体を再作成する必要がありますか?
mercurial - 複数のサブリポジトリを1つに結合して、Mercurialの履歴を保存します
現在、複数のリポジトリで構成されるプロジェクトがあります。例:
残念ながら、サブリポジトリ間のコードは完全に結合されているため、ブランチではうまく機能しません。
サブリポジトリを1つのメインリポジトリに統合して、履歴を保持する方法はありますか?