私は、集中バージョン管理下にある大規模な Java Web アプリケーションに取り組んでいますが、ソース ファイルは実際のサーバーの構築と実行に使用され、実行中に作業中のすべてのファイルがランダムな一時ディレクトリにコピーされます。
問題は、ファイルの変更を確認するためにこの巨大なアプリケーションを再構築するか、すべての変更を追跡し、変更したファイルをソースの場所にコピーしてからソース管理にコミットする必要があることです。
私の質問は、ソース フォルダーの変更を監視し、変更されたファイルを自動的に一時フォルダー X にコピーするコマンド ライン スクリプトを実行できるかどうかです。
2 つの場所の問題を手動で緩和しなければならないという人的障害点を排除することが目的です。
答え1
私は提案します無料ファイル同期、これは 2 つのフォルダーを数秒ごとに自動的に同期するスクリプトを作成できるようです。個人的には試していませんが、期待できそうです。
答え2
RoboCopy の使用を検討しましたか?http://ss64.com/nt/robocopy.html
RoboCopy は、設定された時間が経過した後、またはデータセットに一定数の変更が発生した後にデータをコピーするように設定できます。
/MON:n : ソースを監視します。n を超える変更が見つかった場合に再度実行します。
/MOT:m : ソースを監視します。変更があった場合は、m 分後に再度実行します。
答え3
また、(老化)も見てみるといいかもしれません。デルタコピークライアントとサーバーです。基本的にはLinuxのようなrsyncWindows用の実装で、スクリプト可能(必要に応じてWindowsスケジューラを使用)であり、その主な利点は変更された部分のみ変更されたファイル (そうです、ファイルです!) がすべて送信されます。これにより、大規模なプロジェクトで多くのトラフィックを節約できます。もちろん、欠点は、事前にファイル リストを作成して送信する必要があることです。
また、いくつか(小さな)注意点があります。
- 古いソフトウェアなので、交換する必要があるかもしれませんcygwin1.dllWindowsマシンの場合。(LinuxとWindows間でファイルを同期する場合のみ。シグウィン当時は 16 ビット Unicode/UTF-8 ファイル名変換を正しく処理できなかった基盤フレームワークでした。
- それほどユーザーフレンドリーではないので、Linuxを見てみることをお勧めします。rsync マニュアルページその潜在能力を最大限に引き出すために。
- Windows では、「クライアント」マシンと「サーバー」マシンが必要です。
- サーバーがLinuxマシンの場合は、セットアップする必要がありますrsyncd正しく。
- Windows のボリューム シャドウ コピーはサポートされていません (ただし、必要ない場合もあります)。
まあ、それには利点もあります(それが私が今でも毎日使っている理由です)。
- *NIX rsync および rsyncd と完全に互換性があります。実績があり、よく知られ、非常に効率的な同期システムです。
- オーバーヘッドを小さく抑えます。変更されたデータ (ファイル内であっても) のみがネットワーク経由で転送されます。そのため、在宅勤務の場合や低速接続でサーバーに接続する場合にも非常に便利です。
- どうやらフェイルセーフのようです。私は長年にわたり、何ギガバイトものデータを rsync してきましたが、ターゲット ファイルを「パッチアップ」する際に欠陥は 1 つも発生しませんでした。最初は、この概念に少し不安を感じていましたが。
- 私は今でも DeltyCopy を使用して、Windows マシンから中央の Linux サーバーと Windows 2003 サーバーの両方にファイルを毎日バックアップしています。正しくインストールされていれば、非常にうまく機能し、安全です。
まあ、あなた次第です。楽しんでください!(そして、FreeFileSync について教えてください!)
答え4
便利なコマンドは ですxcopy /m src\* dest
。これはsrcからdestにすべてのファイルをコピーし、クリアすべての src ファイルにアーカイブ ビットを設定します。src ファイルに触れるたびに、Windows は自動的にアーカイブ ビットを設定します。次回実行するときに、xcopy /m
変更されたファイルのみがコピーされます。
継続的に実行したい場合は、次のような小さなスクリプトを記述します。
@echo off
echo Watching for changes to %1 ...
:top
xcopy /m /y %1\* %2 | find /v "File(s) copied"
timeout /t 2 >nul
goto :top