2009-04-03 14 views
6

私はSubversionのトランザクションについて理解していますから、これは原理的に可能であるはずですが、それをサポートするツールはありません。Subversion:複数のコピー操作を1つのリビジョンで行うことはできますか?

バックグラウンドでは、PVCS DimensionsからSubversionへの移行について議論しており、Subversionには欠けているという主な特徴は「設計部品」です。デザインパートとは、一緒に扱うことができるファイルの任意のコレクションです。サブプロジェクトに必要なすべてのソースファイル。

これを置き換える1つのアイデアは、関連ファイルをブランチにコピーするMakefileのコピー操作です。しかし、すべてのファイルを別々にコピーすると、多くの改訂が行われる可能性があり、履歴が乱雑になる可能性があるので、避けるのが良いでしょう。

EDIT: いくつかのより多くの背景情報:

プロジェクトは別々にリリースされるいくつかの(5-10)サブプロジェクトで構成されていますが、いくつかの共通のソースファイルや他のプロジェクトからインポート外部ライブラリを共有しています。

ソースファイルの依存関係を制限する理由の1つは、 サブプロジェクトの製品を管理するためのもので、バージョン管理ですべてを一度に更新できるようにすることです。両方の種類のファイルは、複数のディレクトリに分散されています。

私たちはプロジェクトの約5人の開発者です。

+0

リポジトリの構造はどのようになっていますか?あなたはファイルのセットをコピーすることで何を達成しようとしていますか? – basszero

答えて

5

作業コピーでコピーを作成し、後でまとめてコミットできます。それは1つのリビジョンしか作成しません。それはそのようになり、コマンドライン・クライアントと

svn copy file1 directory 
svn copy file2 directory 
svn copy file3 directory 
svn commit 

主な欠点は、あなたが作業コピーを必要とし、この作業コピーがソース - ターゲット・ディレクトリを含める必要があります。

+0

しかし、トランク/ブランチの上に作業コピーをチェックアウトしない限り、作業コピーにディレクトリ構造を構築するためのものと場所に移動するためのものが2つ必要です。 – starblue

+0

はい、動作します。 :-)おそらく、それはツールが可能でなければならないことを示し、それはあなたが望むことをします。 – Mnementh

0

なぜサブプロジェクトを独自のサブディレクトリに配置しないのですか?

こうして完全なサブプロジェクトを操作できます。

ここで我々が持っている:

Project 
    | 
    ---> common Files 
    ---> Subprojects... 
+0

実際には、そのような構造ですが、より細かい制御が必要な人もいます。 – starblue

0

すべてのプロジェクトが自分のリポジトリにあった場合は、SVN見た目はトリック

3

これは、私はちょうど私が集めることができるものから、によって、設計部品の迅速な読み取りを持っていた、かなり面白いです実際にファイルを個々に任意の構造に分岐させると、元の場所に戻すことができれば、苦痛の世界に向かうでしょう(マージはおそらくすべてのファイル)。

しかし、私はあなたが微調整のビットと転覆で部品を設計するために同様のことを行うことができると思います。

まず、意匠部は外観を使用してシミュレートすることができます(1.6は見た目はファイルだけでなく、ディレクトリを指すことができます)。 はこれを行うには、セットアップ、このようなプロジェクトの階層構造ができますように、適切なサブロケーションにその部分の適切なファイルにもたらしますプロパティ:

/project1 
/trunk 
    /doc 
    /design1 
    /release2 
    /src 
    /subproject1 
    /subproject2 
/tags 
/branches 
/parts 
    /part1 
    /part2 
    /part3 

各部品フォルダには、「見た目SVN」をのみ含まれます:

svn:externals 

../../trunk/src/subproject1  src/subproject1 
../../trunk/doc/release2   doc/release2 

その後、むしろトランクよりも、一部をチェックアウトし、あなたは一部が定義された構造にしたいだけのファイルが含まれている作業コピーを取得し、あなたがコミットしたとき、あなたはまっすぐトランクになるだろう - ここで合併は必要ありません。

トランクの全体を(安価で素早く)分岐し、メインのトランクではなくブランチを指すように部品の外観を変更することで、部品をベースライン化することもできます。これはリポジトリのサイズを増やすものではなく、作業コピーはまったく同じ構造を保持しています。すべてのファイルをトランクではなくブランチから調達するだけです。その部分への更新もブランチに対して行われます - その部分の変更はブランチの標準的な再統合のマージであり、これは標準的なsvnプラクティスです。

上記のスキームでは、各パーツが手動で定義されており、階層化されていないので、パーツの定義の管理がより面白くなります。あなたは、部品階層を知っていて、部品名を与えられた、何らかの形式のスクリプト(おそらくメークファイル)が必要であり、適切な外部定義を構築して部品ディレクトリに適用することができます。

Subversionは明示的にパーツの抽象レイヤーを提供しませんが、手動でかなり正確にモデル化することができます - あなたはsvn:externalsの能力とそれらを管理するために使用するスクリプトによってのみ制限されます。

+0

ありがとう、面白い情報。私は個人的にはデザイン部分とそれに付随する複雑さがあまり好きではありませんが、他の人たちを乗せるのに役立つかもしれません。 – starblue

+0

W.r.t.私の好みは、サブプロジェクトのビルドを行うために、リリースの直前にコピーを行うことです。これは、すべてではないにしても、大部分が合併することを避けるでしょう。 – starblue

+0

私は実際にそのアイデアに非常に興味を持っています。これは、特定の状況において私が前に推進した構造のための理論フレームワークを定式化し、提供します。しかし、それでは、Mavenプロジェクト(またはこれに類するもの)がこれを行うためのよりよい方法であるかどうかはまだ分かりません。 –

6

を使用できます。たとえばsvn copy FROM_URL1 FROM_URL2 URL_TO

: どのタグにリポジトリに散在いくつかのファイルを、コピーして、これ1つのトランザクションで速いそれを作るために:私は同様の問題に直面していた

svn copy svn://192.168.1.50/trunk/folder1 svn://192.168.1.50/trunk/folder2 svn://192.168.1.50/tags/MY_TAG 
+0

ありがとう、それは作業コピーなしで動作します。 URL_TOが存在しない場合は、中間フォルダを作成するために--parentsフラグを追加する必要があります。 – gaelperret

0

1つのリビジョン。 最も簡単な方法は、一時的な作業コピーディレクトリを作成してそこにすべての必要なファイルをコピーし、リモートリポジトリにローカルの作業コピーをコピーし、一時ディレクトリを削除することです:助け

svn mkdir TMP_DIR 
svn mkdir TMP_DIR\MY_TAG 
svn cp --parents src\test\File.txt TMP_DIR\MY_TAG\src\test\File.txt 
svn cp --parents src\test2\File2.txt TMP_DIR\MY_TAG\src\test2\File2.txt 
svn cp -m "comment" TMP_DIR\MY_TAG "http://myrepohost/myrepo/tags/" 
svn rm --force TMP_DIR 

希望。

0

あなたのワークフロー/コード組織は間違っている:

あなたは別々のパッケージ間で共有コードを持っているならば、これは明らかに 別々のいずれかに属します。パッケージごとに1つのツリー。

いくつかの環境 に一緒に(特定のバージョンの)いくつかのパッケージを置く上記別の層に属する(例えば、任意おそらく、いくつかの 成分からなる大きなソフトウェア製品は、。):ディストリビューション、およびによって に処理されますディストロのパッケージ管理インフラストラクチャ

関連する問題