デスクトップコンピューターからいくつかのソースファイルを操作しています。ソースファイルはコンパイルされ、リモートサーバーで実行されます。
私とサーバーの間にはかなりの遅延があるため、rsync
を使用してファイルをコンピューターにコピーし、編集してから、再度rsync
を使用して同期することにしました。 。
ただし、問題があります... rsync
は、ファイルを編集した後、サーバーに同期してファイルを更新しません。インクリメンタルファイルリストが送信されますが、ファイルの内容は変更されません。
これが私のbashセッションの完全な出力であり、何が起こるかを詳細に説明します。
vim
などのエディターを使用して、これらのファイルの1つを編集します。ファイル構造はかなり一般的です。 2016-07-01
というプロジェクトルートディレクトリがあります。このディレクトリには、多くのサブフォルダとソースファイルが含まれています。フォルダには、バージョン管理の方法として日付が付けられています。(bash)
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
user@server's password: [enter password]
sending incremental file list
2016-07-01/subfolder/
2016-07-01/subfolder/main.cpp
sent 2,238 bytes received 272 bytes 557.78 bytes/sec
total size is 632,957 speedup is 252.17
Main.cppが更新されたように見えますが、サーバーにssh
して、vim
で開くと、変更されていないことがわかります。なんでこんなことが起こっているの?
次に、同じコマンドを再度実行すると、次の出力が生成されます。
(bash)
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
user@server's password: [enter password]
sending incremental file list
sent 1,342 bytes received 36 bytes 110.24 bytes/sec
total size is 632,957 speedup is 459.33
今回は増分ファイルリストは送信されません-理由はわかりません-rsync
はファイルがすでに更新されていると考えているため、更新されていない場合は何もしません...
最後にmain.cpp
をチェックすると、間違いなく変更されています。
サーバー側のmain.cpp
は変更されていません。
また、日付と時刻のスタンプではなく、チェックサムに-c
フラグを使用してみましたが、同じ結果が見られます。
要するに、これはnot正しいコマンドです...
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
これis正しいコマンド...
$ rsync -av ./2016-07-01 user@server:./path-to-project
注スラッシュまたは宛先のディレクトリ名はありません-これらを省略した場合、rsync
は必要に応じてディレクトリを作成します。 /
と2016-07-01
は、2つの異なることを行う必要があることを意味すると思います。いいえ/
はディレクトリの作成を意味します。 2016-07-01
isがある場合、/
を追加/削除した場合の効果がわかりません。おそらく誰かがこれを明確にすることができます。
また、リモートサーバーで宛先をアドレス指定する方法は3つあることに注意してください。
上記の方法を使用して、アドレスを.
で開始します。 rsyncコマンドはデフォルトでユーザーのホームディレクトリに設定されるため、ホームディレクトリへのこの相対パスが機能します。
ルートディレクトリから絶対パスを入力することもできます。私にとって、これは/afs/servername/u/username/rest_of_path_from_home_dir
のようなものです
最後に、上記のショートカットとして~
展開を使用することもできます。