6

バージョン管理下で移動しようとしている実稼働環境に大きなアプリケーションがあります。そこで、新しいリポジトリを作成してアプリをインポートしましたが、バージョン管理下にあるべきではないさまざまなディレクトリとファイルはありません。次に、インストールしたコピーをチェックアウトする必要があります(ただし、余分なファイルは保持します)。この時点で、SVNの最近のバージョンでは、-forceオプションを使用して、既存のディレクトリの上でチェックアウトを実行するだけです。しかし悲しいことに、私は--forceオプションが追加された前からの古いバージョンのSVNを持っています(そしてまだアップグレードできません...長い話です)。

そこで、アプリを別のディレクトリにチェックアウトし、すべての.svnディレクトリを元のディレクトリにコピーして、余分なファイルを残したまま、元のディレクトリをチェックアウトに変換したいと思います。さて、たぶん私はただ荒れた日を過ごしていて、平凡な場所にある何かを見逃しているかもしれませんが、私はこれを理解することができないようです。これまでに試したアプローチは次のとおりです。

  1. rsyncを使用する:includeディレクティブとex​​cludeディレクティブの正しい組み合わせをヒットして、すべての.svnディレクトリを再帰的にキャプチャすることはできませんが、他には何もありません。

  2. cpを使用する:アプリ全体ですべての.svnディレクトリにヒットさせる良い方法がわかりません。

  3. find with -exec cpを使用します。見つかったファイルのパス名の先頭部分が宛先パスを台無しにしていて、問題が発生しています。-printf'%P'を使用して除外することはできますが、execの{}置換には含まれないようです。

  4. cpにxargsでfindを使用します。親を送信する前に子ディレクトリを送信するfindで問題が発生しています。残念ながら、findには--breadthオプションがありません。

何か考えはありますか?

他の情報:

  • bash 3.0.0.14
  • rsync 2.6.3 p28
  • cp 5.2.1
  • svn 1.3.2
4

2 に答える 2

6

tarとfindを使用して、クリーンなチェックアウトで.svn dirsをキャプチャしてから、アプリにuntarします。

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ターミネーターを使用するようにfind/tarコマンドを切り替えました。元のコマンドは次のとおりです。

tar cf /tmp/XXX.tar $(find . -name .svn)
于 2009-09-23T21:35:55.367 に答える
0

(5)別のディレクトリにチェックアウトしてから、追加のファイルをそのディレクトリにコピーし、すべてが正常であることを確認してから、新しいディレクトリからアプリを実行するように切り替えることはできませんか?

于 2009-09-23T21:28:20.340 に答える