web-dev-qa-db-ja.com

.svnフォルダーとそのサブコンテンツを除くRsync?

Subversionリポジトリと、それがどのように機能するかを完全に理解していない新規ユーザーを扱う。

要するに、ランダムな.svnフォルダーをコピーしたためにローカル構造がめちゃくちゃになったので、次のようにしました。

  • ローカル構造をステージングと呼ばれるフォルダにコピーしました
  • ステージングディレクトリからすべての.svnフォルダーを再帰的に削除
  • リポジトリを「クリーンなフォルダ」にチェックアウトしました

これで最後のステップです。ステージングフォルダーのコンテンツを取得して、クリーンなコンテンツを上書きします。

ステージングディレクトリの内容をクリーンディレクトリにコピーするコマンドで、クリーンディレクトリにのみ存在するものをすべて削除する必要がありますが、クリーンフォルダの.svnフォルダはそのまま残します。

これはrsyncの仕事のように聞こえます。次のコマンドは正しいでしょうか?

rsync -avr --exclude=.svn* [staging] [clean]
10
SeanKilleen

-C rsyncのオプションが必要な場合があります。

Manページの短い説明に騙されないでください。オプションはCVSにのみ適用されるようですが、rsyncのバージョンによっては、存在するほとんどすべての一般的なバージョン管理システムのファイルがスキップされます。

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).
31
Zoredache

ほぼ—これは

rsync -av --exclude='.svn*' [staging] [clean]

または、シェルがワイルドカードを展開できないようにする他の形式の引用。 (ワイルドカードは、名前が--exclude=.svnで始まる、ありそうもないファイルにのみ一致しますが、リスクを冒さず、シェルが一致しないワイルドカードを抑制または拡張するように構成されている場合でも正しく機能するようにすることをお勧めします空のリストに)。

-rはすでに-aに含まれています。余分なrは必要以上にあり、害はありません。

--excludeを指定すると、引数に一致するファイルはコピーされず、再帰的な走査も考慮されません。 rsyncの通常の問題は、ディレクトリの特定の部分を除いて、ディレクトリを除外することです。ヒントについては Rsyncフィルター:1つのパターンのみをコピーする を参照してください。

この特定のケースでは、 バージョン管理ディレクトリを除く は、必要なものをすばやく取得する方法です。