2012-01-10 17 views
2

私は以下の問題があります。私はsvnリポジトリからサーバーを展開する自動アップロードを整理する必要がありますが、いくつかの手段があります。 私はそれを書いた方法があります:シェル経由で展開するsvnのチェックアウト

# $1 - project; $2 - version (optional) 
# rm -rf $projectDir 
if [ "$2" == '' ]; then 
    svn export $trunk $projectDir --force >> $log 
    version=`svn info $trunk | grep Revision | awk '{print$2}'` 
    svn copy $trunk $tags/$version -m "created while uploading last version of $1" 
    echo "New stable version #$version of $1 is created 
    Uploading to last version is completed successfully" 
else 
    version=$2 
    svn export $tags/$version/ $projectDir --force >> $log 
    echo "Revert to version #$version is completed successfully" 
fi 

echo $version > $projectDir/version 

chown -R $1:$1 $projectDir 

しかし、SVNの輸出は、SVNファイルを経由して削除削除されませんので、私は、輸出前に毎回ディレクトリをきれいにする必要があります。それは良くない。この前 は、私はこのようにデプロイするためのチェックアウトと連携:

svn co $trunk >> $log 
cp -ruf trunk/* $projectDir 
svn info $trunk | grep Revision > $projectDir/version 
chown -R $project:$project $projectDir 
echo "uploading finished" 

非常によく、非常に非常に速く、輸出よりも(それが変更されたファイルのみを変更)が、この作品:

  1. 自動タグなし作成;
  2. 良い復帰の機会はありません。

実際のものではない別のリポジトリディレクトリ(トランク/いくつかのタグ)から1つのディレクトリをチェックアウトしようとしているので、私の最後のスクリプトでは動作しません。

だから、質問:

  1. 私がチェックアウトする前に、プロジェクトを再配置することはできますか?
  2. エクスポートする前にco版と既存版の差分を見つけることはできますか?
  3. diff結果で何ができますか? (エクスポート後に不要なファイルを削除しますか?)

感謝を事前に。

+0

シェルはプロジェクトサーバーにありますが、svnサーバーは外部にあります。 – extempl

答えて

1

あなたがCapistranoを評価したことがありますか?あなたが達成しようとしていることを多くすることができます。

+0

私はカピストラーノで初心者で、Rubyに慣れていませんが、それほど難しくはありません。 しかし、私は単純なタスクのために巨大なツールを使用する必要がありますか? 私はあなたが展開するたび>カピストラーノはI. を行う他のアクションをしないこと、を意味する、新しいディレクトリは、「リリース」ディレクトリの下に作成され、新しいバージョンがそこに配置します。次に、現在のシンボリックリンクがそのディレクトリを指すように更新されます。 それは、毎回別のフォルダにプロジェクト全体をアップロードするので、より速く動作しません。シンボリックリンクでも同様のことができます。 – extempl

+0

この場合、ディレクトリが存在するかどうかをチェックし、存在しない場合はエクスポートする必要があります。その後、シンボリックリンクのソースのみを変更します。 しかし、それは最も簡単な方法ですか? – extempl

+0

さらに、最後のエクスポートからファイルが変更されていなくても、エクスポートはコミットを実行する別の瞬間もあります。これにより、無限の複製バージョンを作成する機会が得られます。チェックアウトはすべての展開には理想的ですが、私は上記の問題を説明しました。 – extempl

関連する問題