2009-05-15 31 views
2

スクリプトを使用して既存のプロジェクトから新しいプロジェクトを作成するプロセスを自動化しようとしています。私のスクリプトはsvnサーバーを更新する必要がありますか?

1:svnリポジトリから既存のプロジェクトをチェックアウトして名前を変更します(つまり、すべてのファイルでExistingProjectName => NewProjectNameから検索して置き換えます)。すべてのファイルを「svn rename」すると、2つのスクリプトがあるはずです。文字列ExistingProjectName)

2を含むファイルとディレクトリ:「SVNスイッチ」コマンドを使用して、ユーザーがコンパイルなどを確認した後、リポジトリに新しいプロジェクトを作成します(例)

アイデアはということでしたユーザーが小切手を実行する機会があるまでリポジトリを変更しないでください。

しかし、潜在的なリスクが私に指摘されています。 #1を実行すると、ローカルの作業コピーは引き続き既存のプロジェクトに関連付けられます。この段階で不注意にコミットする人は、既存のプロジェクトを台無しにするでしょう。

誰でも#1の後にコミットすることを止めることができるいくつかのsvnトリックを考えることができますか?私はドキュメンテーションを経ても何も考えることができません。

ありがとうございます。

アンディ

(それがコミットを停止することができない場合、我々はそれがリポジトリを更新するように、ユーザーがチャンスを持って前に2つの悪のうち小さい方と一緒に行く、とスクリプトを記述する必要があります。確認するには)

答えて

1

おそらく、状態を示すために、変更されたファイルに特別な値を書き込むことができます。次に、svn commitフックを使用して、誰かが間違ったリポジトリにコミットしようとしているかどうかを確認します。

1

おそらくあなたはsvnエクスポートをしたいかもしれません。

+0

残念ながら、svn exportを使用すると、プロジェクトの履歴がすべて取得されることはありません。あなたがコミットするとき、svnは事実上新しいプロジェクトとして扱われます(古いプロジェクトのすべての変更に関する情報は存在しません)。 – Andy

0

コミットを中止するトリックは、最初の手順でsvn exportを使用することです。 変更が完了したら、svn importを使用します。

+0

残念ながら、svn exportを使用すると、プロジェクトのすべての履歴は取得されません。あなたがコミットするとき、svnは事実上新しいプロジェクトとして扱われます(古いプロジェクトのすべての変更に関する情報は存在しません)。 – Andy

1

svnで新しいブランチを作成するには、svn copyコマンドを使用します。それが終わったら、リポジトリに2つのプロジェクトがあり、あなたは余暇でそれらのいずれかを修正することができます。

なので、プロジェクトの名前を変更する場合は、ブランチを作成してからファイルの名前を変更して内容を更新してください。仕事が終わった!

代わりに、既存のプロジェクトをチェックアウトし、名前を変更して編集してから、作業コピーをsvnに追加します。これは「原子的」であり、ログに名前の変更が表示されないようにします。

新しいブランチを追加することは、svnの「安価なコピー」の利点を得られないことを除いて、コピーと同じくらい効果的ですが、重要な編集(および名前変更)を行うと、これは改善されません最初のアプローチですか?

+0

このスクリプトは、コンパイルに失敗したとき(つまり、チェックアウトして名前を変更したとき)に作業コピーを削除する場合に限り、「不可分」と記述することができます。作業コピーが残っている場合でも、ユーザーはプロジェクトをコミットして混乱させることができます。一方、ユーザはデバッグしたいので、作業コピーを削除することは一般的ではありません! 2つのプロジェクトを作成するためにリポジトリ内のコピーから開始することが、私たちがやっている解決策です。私がそれについて考えるほど、私はそれがすべての悪魔の中で最も少ないと確信しています。 – Andy

+0

プロセスが失敗した場合は、サーバーからブランチを削除します。作業コピーは、ブランチが存在しなくなったためにチェックインしようとすると失敗するため、削除する必要はありません。 – Don

関連する問題