質問

ちょっと興味深い開発状況があります。クライアントと展開サーバーはファイアウォールの内側にあり、Subversion サーバーにアクセスできません。ただし、開発者はファイアウォールの外側にいるため、Subversion サーバーを使用できます。現時点で私が考え出した解決策は、コードのローカル コピーを更新し、UnleashIT を使用して最後に更新されたファイルを取り出すことです。

問題は、更新されたファイルだけを Subversion から取得して、ファイアウォールを介して物理的に転送してデプロイメント サーバーに配置できるようにする方法です。

ファイアウォールの設定を変更しようとしたり、ファイアウォールの内側から Subversion サーバーにアクセスする簡単な方法を見つけようとしたりすることについては心配していません。私は、最近変更されたファイルのリポジトリから部分的なエクスポートを取得する方法に興味があるだけです。

他に何か提案はありますか?

見つかった答え:回答としてマークした回答に加えて、TortoiseSVN からこれを実行できる次のことも見つけました。

から http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions
* right-click, "compare revisions"
* select all files in the list
* right-click, choose "export to..." 
役に立ちましたか?

解決

見つけました rsync 複数のシステム間でディレクトリ ツリーを同期する場合に非常に便利です。開発ワークステーションからサーバーにシェル アクセスできる場合は、定期的にコードをローカルでチェックアウトし、変更されたファイルのみをサーバーに転送する rsync を実行できます。

(これは、開発ワークステーション上に Unix のような環境があることを前提としています。Cygwin は正常に動作します。)

cd deploy
svn update
rsync -a . server:webdir/

あなたの質問は、実際には開発ワークステーションからサーバーへの直接のネットワーク アクセスがないように思えます。そして、あなたが本当に探しているのは、どのファイルが変更されたかを Subversion に知らせる方法です。 SVNエクスポート は、特定のリビジョン間で変更されたファイルのみをチェックアウトできる引数をサポートしています。SVN ヘルプから:

  -r [--revision] arg      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED

サーバーにコピーした最新のリビジョンを追跡する必要があります。SVN リビジョン xxxx であると仮定します。

svn export -r xxxx:HEAD http://svn/

次に、その内容をコピーするだけです 展開する ディレクトリをサーバーの既存のファイルの上に追加します。

これでは削除されたファイルは処理されないため、環境によっては問題が発生する可能性があります。

他のヒント

svn export リビジョン範囲は受け入れられません。試してみてください。

考えられる解決策は、次のコマンドで変更されたファイルのリストを取得することです。

svn diff --summarize -rXXX http://svn/...

そしてそれぞれをエクスポートします。

それで、私が正しく理解していれば...

次のようなリポジトリがあるとします。

/
|+-DIR1
|   |- FILEa
|   |- FILEb
|+-DIR2
|   |- FILEc
|   |- FILEd
|- FILEe
|- FILEf

ファイルを更新するとします FILEa, FILEc, 、 そして FILEf そしてそれらをリポジトリにコミットし直します。次に、リポジトリからエクスポートしたいのは、次のような構造です。

/
|+-DIR1
|   |- FILEa
|+-DIR2
|   |- FILEc
|- FILEf

そうですか?

Subversion フックには多くの可能性があるように見えます。しかし、フックのスクリプト作成方法についてあまり知識がないので、コミットされたファイルを取り出して、ディレクトリ構造を維持したままどこかに FTP で転送するにはどうすればよいでしょうか?

それができれば、ファイアウォールの内側にいる誰かがファイルを展開サーバーにプルダウンできるので、準備は整います。

で遊んでみてはいかがでしょうか svnadminダンプ Subversion バイナリに同梱されているコマンド。このコマンドを使用すると、リポジトリ全体、特定のリビジョンのみ、またはリビジョンの範囲をファイルにダンプできます。次に、使用します svnadminロード をロードする ダンプファイル 新しいクリーンなリポジトリにコピーします。

個々のファイルではなくリポジトリに関して機能するため、完璧な解決策ではありません。

ファイアウォールの内側にいる人が Subversion にコミットされた最新のファイルにアクセスできるようにしたいだけですよね?

書いていただけますか svnフックスクリプト それは、コミット時にファイルをリモートの場所に送信するために何らかの方法(おそらくscpまたはftp)を使用しますか?

リビジョンにタグを付けると役立つ場合があります github svn-diff-export

ファイアウォールを通過できるものについての情報は提供しません。UnleashIT については詳しくありません。

SVN から SVN サーバー上のフォルダーにエクスポートするスクリプトを作成できると思います。次に、スクリプトはエクスポートされたファイルを zip 圧縮します。その後、必要に応じて ZIP ファイルを転送し、展開サーバーに抽出することができます。

TortoiseSVN はプロキシ サーバーをサポートしているので、クライアント側からプロキシ サーバーの 1 つを使用できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top