Subversionリポジトリと、それがどのように機能するかを完全に理解していない新規ユーザーを扱う。
要するに、ランダムな.svnフォルダーをコピーしたためにローカル構造がめちゃくちゃになったので、次のようにしました。
これで最後のステップです。ステージングフォルダーのコンテンツを取得して、クリーンなコンテンツを上書きします。
ステージングディレクトリの内容をクリーンディレクトリにコピーするコマンドで、クリーンディレクトリにのみ存在するものをすべて削除する必要がありますが、クリーンフォルダの.svnフォルダはそのまま残します。
これはrsyncの仕事のように聞こえます。次のコマンドは正しいでしょうか?
rsync -avr --exclude=.svn* [staging] [clean]
-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).
ほぼ—これは
rsync -av --exclude='.svn*' [staging] [clean]
または、シェルがワイルドカードを展開できないようにする他の形式の引用。 (ワイルドカードは、名前が--exclude=.svn
で始まる、ありそうもないファイルにのみ一致しますが、リスクを冒さず、シェルが一致しないワイルドカードを抑制または拡張するように構成されている場合でも正しく機能するようにすることをお勧めします空のリストに)。
-r
はすでに-a
に含まれています。余分なr
は必要以上にあり、害はありません。
--exclude
を指定すると、引数に一致するファイルはコピーされず、再帰的な走査も考慮されません。 rsyncの通常の問題は、ディレクトリの特定の部分を除いて、ディレクトリを除外することです。ヒントについては Rsyncフィルター:1つのパターンのみをコピーする を参照してください。
この特定のケースでは、 バージョン管理ディレクトリを除く は、必要なものをすばやく取得する方法です。