2

問題は次のとおりです。すべての開発がSubversionで行われていますが、ベータ版は、すべてが同時に配置されたわけではない、エクスポートされたファイルのほんの一部です。または、言い換えると、バージョン管理されたファイルに変更を加え、問題がないと思われる場合は、別のディレクトリにコピーするだけで手動でエクスポートします。

さて、私たちはすべての作品をSubversionで管理し、ベータ版をトランクのヘッドの単純な作業コピーとして使用したいと考えています。トランクヘッドから始めて、同じファイルに到達するまで特定の領域をロールバックできることはわかっていますが、各ファイルをロールバックする必要があるリビジョンを知っておくと便利です。

ファイル/ディレクトリのセットを取得してリポジトリと比較し、各ファイル/ディレクトリのリビジョン番号を提供するこのようなツールは存在しますか?そうでない場合、これを行うためにスクリプトをまとめるにはどうすればよいですか?

4

5 に答える 5

1

私はあなたの問題に同情しますが、これはあなたが将来別の方法で解決しなければならない問題です.

Subversion には「ディレクトリのコピー」という概念があり、これは軽量でリポジトリ内のスペースをまったく占有しません。

通常、よく使用されるタグ/ブランチ/トランクのレイアウトを使用する場合、何かをリリースするときに、タグ ディレクトリの新しいサブフォルダーにトランクのコピーを作成します。

そうすれば、後から各ファイルのバージョンを把握しようとする必要がなくなり、Subversion が追跡してくれます。

これは、「車を岩壁にぶつけてしまったことは知っていますが、車を元に戻すのを手伝ってくれませんか?」と言っているようなものです。答えはもちろん、最初から岩壁に乗り込まないようにすることです。

私の知る限り、Subversion には、ディスク上のファイルがどのバージョンに似ているかを示す機能はありません。手動で。

ああ、そうです、将来その岩壁に車を運転するのは避けてください。

于 2008-12-22T23:15:23.997 に答える
0

あ、はい!「フランケンバージョン」!

ここでは、 CruiseControlHudsonなどのビルド管理システムをお勧めします。これらのシステムは、実行するすべてのビルドのタグ (コピー) を作成するため、ビルドの 1 つに対応するすべてが一貫してバージョン管理されていることが保証されます。

ビルド スクリプトにコードを追加して、CruiseControl からビルド番号を取得し、それらを自分のビルド ("about" ファイル、アセンブリ メタデータなど) に入れることも好きです。これにより、実際に動作するソフトウェアと svn の内容を簡単に相互参照できます。

于 2008-12-22T23:10:10.140 に答える
0

上記のサンダーの回答を拡張し、最後までフォローしたいと思います。

次のアルゴリズムに従う SharpSvn ライブラリを使用してツールを作成します。

FOR EACH of the exported files
  ITERATE backwards through the revisions of that file
  IF the revisioned file matches your exported copy
    SVN COPY that revisioned file to another branch

すべてのファイルに対してこれを行うと、新しいブランチには、エクスポートされたバージョンの作業コピーが含まれているはずです。面倒ですが、必要な場所に移動する必要があります。

于 2009-05-22T16:19:51.923 に答える
0

SharpSVN を忘れてください。同様に機能する perl および python バインディングがあります。または、bash で svn コマンドラインを使用することもできます。結局、あなたはスクリプトを言いました。

コマンド ラインを使用する場合は、ディレクトリ ツリーで同等のファイルを検索し、svn log コマンドを使用して個々のファイルのリビジョン番号のリストを取得します。また、svn diff コマンド ( -r オプションを使用) を使用して、ファイルをリポジトリ内のリビジョンと比較することもできます。

一致するすべてのパスとリビジョン番号を出力し、手動で整理します (重複がある場合に備えて!)。ただし、svn cp コマンドを使用して、制御されたファイルのブランチを新しいディレクトリに作成する必要があります。

于 2009-05-22T16:37:37.830 に答える
0

SharpSvnを使用してこれを行うツールを作成してみてください。ただし、課題は、ファイルに対応するリポジトリの URL を特定することです。その後、ログを取得するだけで、そのファイルのログ呼び出し diff の各リビジョンについて、それが異なるかどうかを確認できます。

繰り返しますが、解決しなければならない最大の問題は、各ファイルの Subversion URL を見つけることだと思います

于 2009-05-13T21:55:21.933 に答える