5

私は自分の会社の svn externals を調べていますが、私たちが使用するのに適した機能のようです。多くの場合、共有コンポーネントを参照する製品がいくつかありますが、古いバージョンに遅れをとったり、コードベースが異なって分岐したりするという悪い習慣があります。

それらが現在どのように機能するかについてかなり読んだことがありますが、その概念は理解できたと思います。100% 確信が持てないのは、複数のリポジトリの異なるリビジョンがどのようにリンクされているかです。

Product と Library があるとします。製品はライブラリに対してビルドされるため、そのレポにはライブラリ ソースにリンクする svn:externals プロパティがあります。svn:externals 定義に特定のバージョンがない場合、製品の HEAD をチェックアウトすると、ライブラリの HEAD も取得します。

私は何年にもわたって製品のいくつかのバージョンを構築し、そのたびにライブラリの最新バージョンを参照しています。ある日、正しいリビジョンを手動で選択して、製品バージョン 1 に戻ってチェックアウトする必要があります。そうするとき、ライブラリのどのバージョンを取得しますか? HEAD ですか、それとも最初にビルドしたときに使用したリビジョンですか?

うまくいけば、私は優れた開発者であり、リリースする製品のすべてのバージョンにタグを付けることを忘れていませんでした. タグ 'Product-1-0-0' をリポジトリに適用すると、ライブラリ リポジトリの正しいリビジョンもタグ付けされますか? タグ「Product-1-0-0」に基づいて製品を後でチェックアウトすると、正しいリビジョンのライブラリがチェックアウトされますか?

4

5 に答える 5

6

svn:externalsトランク以外のものが必要な場合は、リビジョンを明示的に指定する必要があること に注意する必要があります。詳細については、 Googleの「pinningsvn:externals」を参照してください。かなり新しいバージョン、1.5以降のIIRCを使用している場合は、相対的な外観が少なくともサポートされています。私が現在使用しているもののような古いバージョンでは、すべてのダムドフォルダーのプロパティの-rNNNNNオプションを使用してリビジョンを明示的に固定する必要があります。svn:externals

svncopy.pl最終的に、tigris.orgから名前が付けられたperlスクリプトの変更を使用して、すべての分岐とタグ付けを行いました。それほど悪くはありませんが、これほど頻繁に使用することを決定する前に、どれだけの作業が必要かを知っていればよかったのですが。

于 2009-10-08T03:40:18.690 に答える
5

日付指定子を使用して、更新時に対応するリビジョンを確実に取得できます。

PC-Lint を実行するツールに対してこれを行いました。結果を比較できるように、各リビジョンで実行したいと考えています。

その実装は少し不快です-私たちは:

  • 作業コピーのリビジョンを特定します (を使用svnversion)
  • HEAD の rev を特定する ( を使用svn info)
  • head までのすべてのリビジョンのタイムスタンプを取得します ( を使用svn log)
  • タイムスタンプを .999 秒ずつ上げて、rev を「確実に」取得します (魔法のように!)
  • 各リビジョンへの更新 (を使用svn update -r {sometimestamp})
  • 作業コピー、差分、メールアウト、クラクションのトリガーなどで PC-Lint を実行します。

(Rube Goldberg に値する複雑さですね。より良い解決策を提案できる人には賛成票を投じ、感謝の気持ちでいっぱいです。)

また、svn book のPeg and Operative Revisionsセクションにも興味があるかもしれません。これは、私が発見したばかりです。これは比較的新しい追加のようです。

于 2009-10-08T04:16:23.097 に答える
2

依存関係マネージャーを読む必要があります-あなたのプラットフォームが何であるかはわかりませんが、ivy と maven はこの問題をよりクリーンな方法で解決します。

svn:externals は、subversion ではバージョン管理されません。誰かが外部のリビジョンまたはタグを変更した場合、変更前の内容を知る方法はありません。

于 2010-11-12T00:28:32.237 に答える
1

はい、 docsで提案されているように、外部で明示的なリビジョン番号を提供すると仮定します。それ以外の場合は、参照される外部の HEAD リビジョンが使用されます。

1.6 ではファイルベースの svn:externals に注意してください。それらは非常に便利に見えますが、今日このバグに遭遇しました:(

于 2009-10-08T04:34:28.677 に答える
0

この記事では、質問にうまく対処しています...

http://www.simple-talk.com/dotnet/.net-framework/tortoisesvn-and-subversion-cookbook-part-4-sharing-common-code/

セス

于 2012-03-08T16:40:31.013 に答える