Я работаю с некоторыми исходными файлами с настольного компьютера. Исходные файлы компилируются и запускаются на удаленном сервере.
Поскольку между мной и сервером существует значительная задержка, я решил использовать rsync
чтобы скопировать файлы на мой компьютер, отредактировать их, а затем синхронизировать их резервную копию, снова используя rsync
.
Однако есть проблема ... rsync
не обновляет файлы, когда я синхронизирую их с сервером после редактирования на моей стороне. Список дополнительных файлов отправляется, но содержимое файла не изменяется.
Вот полный результат моего сеанса bash, который подробно объяснит, что происходит.
vim
. Файловая структура довольно универсальна. У меня есть корневой каталог проекта под названием 2016-07-01
, который содержит множество подпапок и исходных файлов. Папка просто названа с указанием даты в качестве метода контроля версий.(баш)
$ 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
Я вижу, что он без изменений. Почему это происходит?
Затем я снова запускаю ту же команду, и получается следующий результат ...
(баш)
$ 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
флаг для контрольных сумм, а не меток даты и времени, снова виден тот же результат.
Короче, это не правильная команда ...
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
это является правильная команда ...
$ rsync -av ./2016-07-01 user@server:./path-to-project
Заметка, без косой черты или имени каталога для пункта назначения - когда они останутся rsync
создаст каталог по мере необходимости. я думаю /
и 2016-07-01
подразумевают, что нужно сделать 2 разные вещи. Нет /
означает создать каталог. Я не уверен, каков эффект добавления / удаления 2016-07-01
если /
является там. Возможно, кто-то сможет это прояснить.
Также обратите внимание, что существует 3 способа адресации пункта назначения на удаленном сервере.
Используя описанный выше метод, начиная с адреса .
. Команда rsync по умолчанию использует домашний каталог пользователя, поэтому этот относительный путь к домашнему каталогу работает.
Также можно ввести полный абсолютный путь из корневого каталога. Для меня это что-то вроде /afs/servername/u/username/rest_of_path_from_home_dir
Наконец, используя ~
расширение как ярлык для вышеуказанного также будет работать.