3

クライアントの DEV および UAT 環境にデプロイしたい Web サイトがあります。このサイトは Mercurial リポジトリの一部です。.hg フォルダーと同じレベルの Website フォルダーにあります。リポジトリ全体をプッシュできることはわかっていますが、クライアントが他のファイルやフォルダーを持たないように、Web サイト フォルダーのみをプッシュしたいと考えています。

レポは次のようになります。

  • プロジェクトルート
    • .hg
    • データベース(SQL ソース管理はこれを使用)
    • ドキュメント(すべての仕様、PDF、アートワークなど)
    • Lib (Nuget より前のサードパーティ dll)
    • パッケージ(Nuget のもの)
    • ウェブサイト (これは私が展開したい唯一の領域です)
    • .hgignore
    • プロジェクト.sln

編集: クライアント サーバーはインターネットに直接接続されていません。それらへのアクセスは VPN 経由で行われ、次に RDP 経由で行われます。現在、サイトを圧縮して共有 ftp サーバーに配置し、ファイルがサーバーにコピーされるまで最大 3 日間待つ必要がある変更をデプロイする必要があります。この接続で Mercurial を使用できるように、ルールが構成されています。

編集 2 Website フォルダーとそのすべての内容を忘れて、変更をコミットしてからファイルを元に戻し、レポを作成して .hgsub ファイルをエコーアウトすることで、Web サイトフォルダーからサブレポを作成できました。これはローカルで機能します。追加のフォルダーを取得せずに、Web サイトのリポジトリからクローンを作成できます。ただし、レポサーバーでプロセスを繰り返しても、このバージョンのレポを使用できませんでした。ホストされているバージョンをローカルの作業コピーに複製しようとすると、404 エラーが発生しますが、ホスティング サーバーでホストされているバージョンを複製できます。

私の目標を達成する方法について、いくつかの段階的な指示 (必要に応じてダミーのガイド) をいただければ幸いです。これにより、Web サイト フォルダーのみをクライアント サーバーにプッシュできるようになります。レポのマスター コピーはレポ サーバーにあります。ローカル クローンがあり、コピーからバージョンをプッシュできる必要があります。

編集3 http://mercurial.aragost.com/kick-start/en/subrepositories/#converting-folder-into-a-subrepositoryで 説明されているように、フォルダーをサブレポに変換していた問題は、 convert コマンドは、2.1.0 以降のバージョンでは壊れており、2.3.1 でも壊れています。それを理解してそのバージョンの TortoiseHg にロールバックした後、フォルダーをサブレポに変換することができました。レポのルートには、Website = Website という .hgsub があります。私はそれをローカルで操作し、レポ全体、サブレポにコミットし、完全なレポまたはサブレポのいずれかを複製することができました(これが私が望むものです)が、マスターレポサーバーからこれを機能させることはできません

すべてを圧縮して、リモートのマスター リポジトリ サーバーに ftp で送信し、そこからクローンできるようにセットアップしました。サーバー上で直接これは正常に動作します (hg clone --verbose -- C:\Repositories\EM .)、ただし、サーバーからローカル開発マシンに (hg clone --verbose -- https:/ /myserver.com/hg/EM/ .) 「HTTP エラー: 404 (見つかりません)」で失敗します。

requesting all changes
adding changesets
adding manifests
adding file changes
added 628 changesets with 6002 changes to 4326 files
updating to branch default
resolving manifests
calling hook preupdate.eol: <function preupdate at 0x00000000035204A8>
getting .hgignore
getting .hgsub
getting .hgsubstate
HTTP Error: 404 (Not Found)
[command returned code 255 Fri Apr 20 10:51:23 2012]

何が問題なのかわかりません。ファイルはそこにあるのに、なぜ 404 なのですか?

4

4 に答える 4

2

私の意見では、Mercurial はこの目的に使用されるべきではありません。Mercurial に DLL を含めるべきではないため、その Web サイトが Web アプリケーションである場合は特にそうです。

Visual Studio に組み込まれている Web 配置ツールを確認する必要があります。このページを見て、目的に合っているかどうかを確認してください。

宛先サーバーに必要なサービスをインストールできない場合は、代わりに FTP を使用するように構成できます。

于 2012-03-22T20:24:52.750 に答える
1
  1. リポジトリツリーの一部をプッシュできません
  2. DEV および UAT 環境がバージョン管理されていないターゲットの場合、Mercurial コンテンツを配布する他の方法を使用できます
  3. ウェブサイトをサブレポに分割して、このレポをプッシュできるようになります
于 2012-03-22T16:38:46.253 に答える
0

私はこれに対する実用的な解決策を持っています。発信レポを作成し、ビルトイン サーバーを起動するバッチ ファイルを作成して、クライアント マシンでプルできるようにしました。最初に前のフォルダーをクリアし、次にローカルの作業コピーから複製します (どのタグから複製するかを決定するパラメーターがあります)。次に、マップ ファイルを作成し、Web サイト フォルダーを新しい Website2 フォルダーに変換して履歴を保存し、元のフォルダーを削除して新しいフォルダーの名前を変更します。最後に、組み込みサーバーをスピンアップします。

cd c:\inetpub\wwwroot
rd /S /Q _ProjectName
hg clone -- C:\inetpub\wwwroot\ProjectName#%1 C:\inetpub\wwwroot\_ProjectName
cd c:\inetpub\wwwroot\_ProjectName
echo include Website > map.txt
echo rename Website . >> map.txt
hg --config extensions.hgext.convert= convert --filemap map.txt . Website2
cd Website2
hg update
cd ..
hg remove Website/*
hg commit -m "Removed Website"
rename Website2 Website
hg serve

きれいではありませんが、バッチ ファイルを呼び出して、発信 Web サイトを構築するタグ (uat、dev など) を渡し、Web サイト フォルダーを履歴と共に作成するのに 1 分かかるだけです。プルまたはプッシュに使用できます。クライアント サーバーの名前を知っているので、hg serve を呼び出す必要はありません。エイリアス化されたリモート リポジトリを作成して変更セットをプッシュできます。ただし、クライアント マシンがプルできるように、その手順を含めました。このオプションを十分に検討したわけではないので、特に利点があるかどうかはわかりません。私だけがプロジェクトに取り組んでいる場合は問題ありませんが、他の開発者がこれに取り組む必要がある場合、ローカル プロジェクト サーバーの Uri は明らかに異なります (http://SIMON-PC:8000/ は違います)。誰にとってもそうです)、

しかし、このアプローチを使用することで、ローカルの作業リポジトリを変更する必要がないため、中央リポジトリとの通信に問題が発生することはありません。edit3 で言及されている 404 エラーです。変換プロセスでレポの全履歴を保持しているので、次に変更を送信する必要があるときは、リビジョン 1 から開始しません。つまり、Web サイトを破壊するものではなく、発信全体を削除していますが、レポ (_ProjectName) 履歴を保持するたびに、「スタンドアロン」レポとして毎回作成されるため、Web サイトディレクトリのみをプル/プッシュする立場にあります

于 2012-04-26T08:26:47.203 に答える
0

他の人が指摘しているように、これにはプッシュを使用できません。あなたのサーバーから彼らのサーバーに「rsync」を実行するだけです。フックでそれを自動化することもできます。ローカル リポジトリにプッシュすると、サイトに自動デプロイされます。何かのようなもの:

[hooks]
changegroup.deploy = $HG update ; rsync Website account@theirserver:/path/to/docroot
于 2012-03-23T02:28:06.377 に答える