1

MercurialリポジトリがありますmyProject

myProject
|- file1.js
|- file2.css
|- useful.js

useful.jsこれで、いくつかの便利なクラスが含まれるファイルになりました。私はそれを複数のプロジェクトで使用しているので、独自のリポジトリがあります。

useful
|- useful.js
|- example.js
|- README

他の人がチェックアウトしてuseful、ファイルと例とreadmeを見て、気に入ったらuseful.js自分のプロジェクトにコピーして利用できるようにするという考え方です。

useful.jsいくつかのプロジェクトで使用されているので、同期を維持するための推奨される方法は何ですか?最上位フォルダに存在するuseful.js 必要がある制限がありますmyProject。つまり、ネストすることはできません。これにより、サブリポジトリを使用するのが難しくなります(いずれの場合でも、example.jsandのような他のファイルを取得しますREADME)。

もう1つ注意すべき点は、リポジトリには、、、およびusefulのいくつかのブランチがあることです。を使用する私のプロジェクトには、ブランチ、、およびもあります。のブランチを切り替えるときはいつでも、スイッチもブランチするようにしたいと思います。そうでなければ、私はおそらくシンボリックリンクで生きることができるでしょう。defaultversion1version2useful.jsdefaultversion1version2myProjectuseful.js

この状況は特に珍しいことではないようです。他の人はそれをどのように扱いますか?フックを書いて、updateブランチを切り替えているかどうかを確認し、それに応じて切り替えますか?プラスフックcommit、、?(基本的に、単一ファイルのサブリポジトリの動作を複製します)?pushpull

乾杯。

4

3 に答える 3

1

あなたのユース ケースを考えると、Yeomanの使用、より具体的にはTwitter Bower Package Managerの使用を検討することをお勧めします。この方法では、リポジトリに外部依存関係のコピーを保持するのではなく、Bower 構成でそれを識別するだけです。

于 2013-01-26T23:52:01.277 に答える
0

Mercurial では、リポジトリの一部だけをサブリポジトリとして追加することはできません。したがって、リポジトリからファイルを 1 つだけ追加することはできません。

他のリポジトリにファイルが 1 つしか含まれていない場合でも、それをルート レベルに追加することはできません。

ファイルを含める別の方法を見つける必要がありuseful.jsます。あなたはそれを行うためのフックについて言及していますが、ある種の手動作業なしでは正直にそれを行う方法がわかりません. 個人的には、「単純さ」を重視し、すべて「手作業」で行います。

ブランチ スイッチに関しては、Mercurial には組み込みのメカニズムはありませんが、あなたが言ったように、更新のフックでそれを行うことができるはずです。

于 2012-06-20T15:53:33.067 に答える
0

フォローアップ @krtek

はい、いずれにせよ、superrepo のルートに (subrepo を使用して) 有用な js をリンクすることはできません。subbir 内にある必要があります

しかし、いいえ、いくつかのトリックを使用すると、要求された結果を繰り返し取得できます(ブランチ依存の便利な.jsと、すべてではなく単一のファイルを追加する)。

これを実現するには、サブリポジトリのドキュメントを読み直す必要があります (「Mercurial URL でサポートされているものはすべて、外部サブリポジトリの定義に使用できます...」) hg help urls、つまり

# の後のオプションの識別子は、リモート リポジトリから使用する特定のブランチ、タグ、または変更セットを示します

およびブランチの言及に注意してください。つまり、便利なリポジトリに既知の名前を持つ特別なブランチがあり、このブランチに便利な.jsが1つしかない場合、これらの追加データでサブレポを定義できます-スーパーレポのブランチ用の単一ファイルでブランチ

このようにして、スーパーレポの各ブランチに異なるサブレポ仕様があり、ブランチを正確にマージする (常に「my」を保存する) か、.hgsub ファイル用の特別なマージツールを定義する必要があります。

于 2013-01-27T12:13:05.947 に答える