数日間この作業をしてきましたが、何をしても正しく動作できません。 StackExchangeネットワークでrsyncのほぼすべてのQ&Aを読みましたが、まだ答えが見つかりませんでした。
デフォルトでは、ソースGitリポジトリからターゲットにファイルを移動するためにrsyncを使用してGitリポジトリをデプロイするWebサイトデプロイツールを作成しています。配布リポジトリをコミットすると、実際にコードがWebサーバーに配布されるため、rsyncを使用して2つの異なるディレクトリ間を遅延させます。
ソースリポジトリから開発者が削除したすべてのファイルは、デプロイメントリポジトリからも削除されることが非常に重要です。ただし、デプロイメント・リポジトリーには、必要ないくつかの選択されたファイルがあります。いいえ特に、これらのファイルはホスティングプロバイダによって提供され、運用に必要ですが、ソースリポジトリでのメンテナンスに問題があります。
こことは別の場所で読んだ内容によると、man
配布/ターゲットリポジトリに保存したいファイル名を追加した--exclude-from
場合
基本的に私がすることは次のとおりです。
rsync --archive --verbose \
--exclude ".git" --exclude ".git*" \
--exclude-from="/tmp/excludes.txt" --delete-after \
/dir/to/source/repo/ \
/dir/to/deploy/repo
例として、次のようにします/tmp/excludes.txt
。
/foo/bar/baz.php
さて、簡単な例を使ってローカルでこれを試してみると、常に期待どおりに動作するようです。ただし、実際の展開シナリオでCircleCIで使用すると、上記のコマンドを実行した後は常に削除されますrsync
。/foo/bar/baz.php
何が間違っているのかわかりますか?よろしくお願いします。
アップデート - 上記は実際に動作します。
CircleCIで実行されているスクリプトのロジックに問題があることがわかりましたが、表示できません。別のルートを使用して複数のrsyncコマンドを実行しています。(本質的に私のデフォルトルートのサブディレクトリ)これは、さまざまなルールと基本ルートに基づくすべてのファイルパスを含む除外ファイルのリストが必要なためです。ああ。
とにかく、親愛なる読者の皆さん、上記の例は、私が望む仕組みを説明したように正しく機能することがわかりました。
答え1
ループを終了するために、この記事を読んでいる人がrsyncを使用してターゲットディレクトリをソースディレクトリにミラーリングする方法を疑問に思っている場合特に名前の付いたファイルを除くこれがあなたがすることです:
rsync --archive --verbose \
--exclude-from="/tmp/excludes.txt" --delete-after \
/dir/to/source/repo/ \
/dir/to/deploy/repo
/tmp/excludes.txt
ファイルのフルファイルパスを指定した内容は次のとおりです/dir/to/deploy/repo/foo/bar/baz.php
。
/foo/bar/baz.php