.svn ディレクトリをチェックアウトから非チェックアウトにコピーしてチェックアウトにする
-
13-09-2019 - |
質問
本番環境に大規模なアプリケーションがあり、バージョン管理下で移行しようとしています。そこで、新しいリポジトリを作成し、バージョン管理下にあるべきではないさまざまなディレクトリやファイルを除いたアプリをインポートしました。次に、インストールされたコピーをチェックアウトする必要があります (ただし、追加のファイルは保持されます)。この時点で、最新バージョンの SVN では、 --force オプションを使用して既存のディレクトリを上書きチェックアウトするだけです。しかし、悲しいことに、私は --force オプションが追加される前の古いバージョンの SVN を持っています (まだアップグレードできません...)長い話)。
そこで、アプリを別のディレクトリにチェックアウトし、すべての .svn ディレクトリを元のディレクトリにコピーするだけで、余分なファイルはそのままにして、元のディレクトリをチェックアウトにしたいと考えています。さて、私はただ大変な一日を過ごしていて、単純なサイトにある何かを見逃しているだけかもしれませんが、これを理解できないようです。これまでに試したアプローチは次のとおりです。
rsync を使用します。すべての .svn ディレクトリだけを再帰的にキャプチャするための include ディレクティブと exclude ディレクティブの適切な組み合わせが見つからないようです。
CP を使用します:アプリ全体のすべての .svn ディレクトリにヒットさせるための良い方法がわかりません。
find を -exec cp とともに使用します。見つかったファイルのパス名の先頭部分が宛先パスを混乱させるという問題が発生しています。-printf '%P' を使用してこれを除外できますが、exec の {} 置換には含まれないようです。
xargs を指定して find を使用して cp を実行します。親を送信する前に子ディレクトリの送信を見つけるときに問題が発生しています。残念ながら、find には --breadth オプションがありません。
何か考えはありますか?
他の情報:
- バッシュ3.0.0.14
- rsync 2.6.3 p28
- CP 5.2.1
- SVN 1.3.2
解決
タールを使用してアプリにuntarする、その後、きれいなチェックアウトでの.svn dirsにをキャプチャするために見つけます。
cd /tmp/
svn co XXX
cd XXX
find . -name .svn -print0 | tar cf /tmp/XXX.tar --null -T -
cd /to/your/app/
tar xf /tmp/XXX.tar
編集:/スペースを含むファイル名に直面して堅牢性のためにNULターミネータを使用するには、tarコマンドを見つける切り替えます。元のコマンドだっます:
tar cf /tmp/XXX.tar $(find . -name .svn)
他のヒント
(5)あなただけの新しいディレクトリからアプリを実行するに切り替える前に、すべての罰金を確認し、そのディレクトリに余分なファイルをコピーし、別のディレクトリにチェックアウトをすることができませんか?