1

これは本当に明白かもしれませんが、ドキュメントやフォーラムで簡単な解決策を見つけることができません:

BitBucket の Mercurial リポジトリに保持されているコードをいくつか書きました。

このコードを使用して、Linux 仮想サーバーを構築します。サーバーを構築するときは、リポジトリをサーバーに複製し、ビルド スクリプトを実行してから、複製を削除します。その結果、サーバー上のさまざまなフォルダーにある私のレポからのいくつかのファイルで構成されたサーバーが作成されます。

現在、ユーザーのサーバーを引き渡した後、ユーザーのサーバーにバグ修正と改善を展開できるメカニズムを探しています。その時点で、サーバーへの SSH アクセスはできません。また、エンド ユーザーが cron ジョブの開始やスクリプトの起動よりも複雑なことを行うことは期待できません。

これを実現するために、レポへの読み取り専用アクセス権を持つユーザー用に BitBucket アカウントを設定することを考えています。

この読み取り専用アカウントを使用してリポジトリのクローンを作成し、更新を適用するスクリプトを作成しても問題はありませんが、すべてのファイルを含めたくありません。特に、ビルド スクリプトは商業的に機密であるため、除外したいと考えています。レポから削除できることはわかっていますが、ビルドは機能しません。

読んでみると、リポジトリのブランチまたはフォークを作成する必要があるようです (どちらですか?)。それともサブレポ?次に、そのブランチ/フォーク/サブリポジトリから機密ファイルを削除し、ユーザーがスクリプトを介してそのファイルを複製できるようにします。

それは問題ありませんが、メイン リポジトリに変更を加えたときに、ブランチ/フォーク/サブ リポジトリを更新する方法が必要です。これは自動化できますか?つまり、メインリポジトリで行われた更新を常に反映するように設定できますか? もちろん、機密ファイルは除きます。

ただし、更新を自動にしたいのかどうかわからないので、更新をメインからブランチ/フォーク/サブに手動で転送する方法も知りたいです。合流?マージを行う場合、機密ファイルがコピーされないようにするにはどうすればよいですか?

要約すると、いくつかの機密ファイルを含むメイン リポジトリがあり、これらの機密ファイル以外のすべての更新を読み取り専用ユーザーにロールアウトする方法が必要です。

これが非常に明白な場合は申し訳ありません。木を見て木を見ず、可能性に圧倒されているのだと思います。ありがとう。

4

3 に答える 3

1

Mercurialでこれを解決する必要はまったくないと思います。
実際に必要なのは、継続的インテグレーション/ビルドサーバーです。

最も簡単な解決策は次のようになります。TeamCityJenkins
などのビルドサーバーをセットアップします。これは常にオンラインで、Bitbucketリポジトリの変更を監視します。 リポジトリに変更があった場合に、ビルドサーバーがビルドスクリプトを実行し、出力をFTPサーバーやダウンロードサイトなどにコピーするように設定できます。

これで、常に最新のコード変更を含む単一の場所ができましたが、ビルドスクリプトのような機密ファイルはありません。
次に、エンドユーザーが実行できるスクリプトまたはcronジョブを設定して、その中央の場所から最新バージョンのコードを取得できます。

于 2013-03-11T20:39:42.560 に答える
0

Mercurialツリー全体が常に一緒に移動するため、(ファイルツリー軸に沿って)リポジトリの一部だけを複製またはプルすることはできません。ファイルの一部のみを含むブランチを保持してから、すべてを含む別のブランチを保持することで、部分的な(ファイルに関して)ブランチを他のブランチに簡単にマージできます(ただし、他の方法でマージすることはできません)。特に簡単です)。

サブリポジトリは特定のユースケースで機能すると思います。

于 2013-03-11T10:02:20.913 に答える
0

2つのブランチで問題ありません。1つはユーザークローン用(main)で、もう1つはメイン開発用(dev)です。トリッキーな部分は、devからmainへの新しい変更をマージすることです。

これは、マージプロセスでファイルを除外することで解決できます。Mercurialでのマージ中にファイルを除外する

[merge-patterns].hgrcにセクションを設定することで、マージの影響を受けないファイルを特定できます。

[merge-patterns]
build.sh = internal:local

詳細については、をお読みくださいhg help merge-tools

"internal:local"
   Uses the local version of files as the merged version.
于 2013-03-11T17:47:35.880 に答える