4

私はやや興味深い開発状況を持っています。クライアントと展開サーバーはファイアウォールの内側にあり、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..." 
4

8 に答える 8

2

svn exportリビジョン範囲を受け入れない場合は、試してみてください。

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

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

次に、それぞれをエクスポートします。

于 2008-11-04T15:14:09.207 に答える
1

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

それができれば、ファイアウォールの内側にいる誰かがファイルをデプロイメントサーバーにプルダウンできるので、問題ありません。

于 2008-09-04T06:28:19.270 に答える
1

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

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

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

あなたの質問は、開発ワークステーションからサーバーへの直接のネットワークアクセスが実際にはないように聞こえます。本当に探しているのは、Subversionにどのファイルが変更されたかを知らせる方法です。svn exportは、特定のリビジョン間で変更されたファイルのみをチェックアウトできるようにする引数をサポートしています。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/

次に、デプロイディレクトリの内容を既存のファイルの上にあるサーバーにコピーするだけです。

これは削除されたファイルを処理しません。これは、一部の環境で問題になる可能性があります。

于 2008-09-05T14:56:36.947 に答える
1

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

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

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

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

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

そうですか?

于 2008-09-03T20:27:56.750 に答える
0

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

于 2010-03-12T03:43:09.617 に答える
0

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

何らかの方法 (おそらく scp または ftp) を使用して、ファイルがコミットされた時点でリモートの場所にファイルを送信するsvn フック スクリプトを作成できますか?

于 2008-09-03T20:30:16.790 に答える
0

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

個々のファイルではなくリポジトリに関して機能するため、完璧なソリューションではありません。

于 2008-09-03T18:54:43.900 に答える
-1

ファイアウォールを介して何が許可されているかについての情報を提供しません。私は UnleashIT に詳しくありません。

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

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

于 2008-09-03T18:51:32.080 に答える