Похож на этот вопрос, но более сложный:Как скопировать файлы, вообще не меняя время создания файлов?
Я хочу копировать файлы между компьютерами, не нарушая даты «Изменено» и «Создано».
Цель состоит в том, чтобы сравнить diff
s некоторого кода проекта на 3 разных компьютерах, которые мне удалось синхронизировать, когда я работал над ними. Но я работал только на одной машине за раз, и теперь я не помню, какая из них была самой обновленной. Это беспорядок, и я хочу объединить копии (и, надеюсь, поставить их под контроль версий) раз и навсегда.
Поэтому, когда я использую diff
инструменты, знание дат изменения файлов может помочь мне понять и объединить изменения.
На 2 из 3 компьютеров установлена ОС Linux, а на 1 — Windows 8.
Приветствуются любые другие способы достижения вышеперечисленного, любые передовые практики в подобных ситуациях.
решение1
В Linux (и других Unix-подобных ОС) вы можете копировать файлы на флэш-накопитель и с него или с сервера SMB/FTP с помощью
cp -p
Это должно сохранить временные метки.
Я не знаю, можно ли сохранить временные метки при загрузке на сервер.
решение2
Обычно для файла/папки существует три атрибута. Время создания, изменения и доступа. Время доступа не имеет особого значения. В Linux время создания не используется (и недоступно с помощью стандартных процедур). Поэтому единственным важным атрибутом является время изменения. При копировании данных с помощью инструмента ОС время изменения не изменяется (по крайней мере, для Linux). Если это не так, вы можете сжать данные перед передачей и распаковать их на другом конце. Обычно инструменты резервного копирования сохраняют все атрибуты.
Если вы хотите строго сохранить все атрибуты, вы можете использовать следующие методы.
cp
с опцией -a
aka --archive
или --preserve=all
или
rsync
с -t
.
Эти команды доступны в Linux по умолчанию (также доступны для загрузки для Windows).
Если вам не интересны инструменты командной строки, используйте инструмент синхронизации, который поддерживает копирование атрибутов, чтобы скопировать данные.
решение3
Если вы не уверены, какой код на компьютере лучше, я думаю, лучше всего скопировать все три исходных каталога на одну машину, а затем объединить файл за файлом.Инструменты слияния.
Другой способ — создать git-репозиторий на компьютере и скопировать исходники с другого компьютера, перезаписав файлы git-репозитория, или просто добавить их в новую ветку, а затем использоватьмерзавец's merge. Для Windows я предпочитаюTortoise Git-клиентдля выполнения всех основных задач по управлению версиями.
Что касается копирования метаданных, как предлагают другие, вы можете использовать rsync -t
, cp --preserve=all
. Для передачи по FTP вы можете использовать scp -p
.
решение4
Между двумя компьютерами Linux вы можете использоватьrsync, он сохранит временные метки такими, какие они есть.
Для Windows вы можете использоватьробокопияЧтобы скопировать файлы, не меняя временные метки, возможно, вы можете использовать его для копирования файлов с FTP-сервера на вашем компьютере с Linux на Windows.