大規模な Web アプリケーションの開発に svn を使用しており、定期的に本番環境を更新しています。運用サーバーは svn にアクセスできません (セキュリティ上の理由から)。
新しいリリースの最後の本番リリース以降の変更をプッシュする最良の方法は何ですか? サイトは非常に大きいため、毎回サイト全体を再作成することは避けたいと考えています。
大規模な Web アプリケーションの開発に svn を使用しており、定期的に本番環境を更新しています。運用サーバーは svn にアクセスできません (セキュリティ上の理由から)。
新しいリリースの最後の本番リリース以降の変更をプッシュする最良の方法は何ですか? サイトは非常に大きいため、毎回サイト全体を再作成することは避けたいと考えています。
さて、私にショットをさせてください。SVN更新コマンドの出力を解析して、変更されたファイルのみをコピーするコピー命令を生成できますか?
http://svnbook.red-bean.com/en/1.1/ch03s05.html
svnupdateの出力をもう少し調べてみましょう。サーバーが作業コピーに変更を送信すると、各アイテムの横に文字コードが表示され、作業コピーを最新にするためにSubversionが実行したアクションを通知します。
U foo
ファイルfooが更新されました(サーバーから変更を受け取りました)。
A foo
ファイルまたはディレクトリfooが作業コピーに追加されました。
D foo
ファイルまたはディレクトリfooが作業コピーから削除されました。
R foo
ファイルまたはディレクトリfooは、作業コピーで置き換えられました。つまり、fooが削除され、同じ名前の新しいアイテムが追加されました。それらは同じ名前である可能性がありますが、リポジトリはそれらを別個の履歴を持つ別個のオブジェクトと見なします。
G foo
ファイルfooはリポジトリから新しい変更を受け取りましたが、ファイルのローカルコピーに変更が加えられました。変更が交差しなかったか、変更がローカルの変更とまったく同じであったため、Subversionは問題なくリポジトリの変更をファイルにマージしました。
C foo
ファイルfooがサーバーから競合する変更を受け取りました。サーバーからの変更は、ファイルに対する独自の変更と直接重複します。ただし、慌てる必要はありません。この重複は、人間(あなた)が解決する必要があります。この状況については、この章の後半で説明します。
または、半手動のソリューションが必要な場合は、WinMergeやAraxisMergeなどの差分ツールを使用して両方のディレクトリを同期できます。
編集:
「svnupdate」が正確に機能するとは思いませんが、私が決めたのは次のとおりです。
「スイッチ」の出力をキャプチャするスクリプトを作成しました。UおよびA操作をzipアーカイブに「追加」するように変換します。D操作を変換して、実動サーバーで実行されるコマンドを削除します。本番サーバーでは、アーカイブを解凍して削除コマンドを実行するだけです。
ガラス壁のあなたの側にあるディレクトリにチェックアウトし、本番サーバーからアクセスできるようにします。ある種のdiff/syncユーティリティを使用して、2つを同期します。ただし、_svnフォルダーまたは実稼働環境を汚染するその他のファイルは除きます。
または、「mm / dd / yyyy以降の変更」のあるファイルのzip(または他のアーカイブ)を使用して、それを製品ディレクトリに適用します。