Синхронизируйте весь диск между двумя компьютерами с Windows 10 по запросу, не обращаясь в облако

Я хочу синхронизировать файлы всего диска между двумя моими компьютерами с Windows 10, настольным компьютером и ноутбуком. Я хочу иметь возможность сделать это , выбрав , т. е. запустив команду из командной строки.

Если я удаляю файл на одном компьютере, я хочу, чтобы он был удален и на другом. Если я случайно внесу изменения в один и тот же файл на обоих компьютерах, я хочу иметь возможность разрешать конфликты.

Я хочу, чтобы все это происходило по моей локальной сети , без перехода в облако. Я хочу, чтобы он мог обрабатывать ~ 50 ГБ файлов. И я хочу, чтобы процесс синхронизации был максимально эффективным, а не пересылал файлы, копии которых уже есть на другом компьютере.

@Chenmunka Не похоже, что Robocopy позволяет различать файлы, которые вы удалили намеренно (и хотите также удалить на другом компьютере), от файлов, которые вы удалили случайно и хотите восстановить. Думаю, это самый легко определяемый недостаток.

Ответы (2)

Я решил использовать Git . В частности, 64-разрядная версия Git для Windows. 32-битная версия израсходует все 32-битное адресное пространство, а затем умрет.

Оба компьютера подключены к одному и тому же DSL-маршрутизатору с помощью гигабитных проводных кабелей Ethernet. Я обнаружил, что это сделало синхронизацию намного быстрее, чем использование беспроводной связи для обоих или проводного соединения для одного и беспроводного соединения для другого. Ваши результаты могут отличаться.

Обратите внимание, что синхронизация всего диска сразу не работает. Пришлось разбивать по подпапкам. То есть вместо:

E:\

Я разделил его на:

E:\Users\Public
E:\Users\<My User Name>

И т. д.

Чтобы установить Git и поддерживать его в актуальном состоянии, я использую Chocolatey . Чтобы установить Git изначально:

choco install git

...из окна Windows PowerShell с правами администратора.

Чтобы проверить и установить любые обновления Git:

choco upgrade all

...опять же, из окна PowerShell с правами администратора.

Назовем мой настольный компьютер DESKTOP-PC, а мой ноутбук LAPTOP-PC. (Не их настоящие имена машин.) Теперь, когда Git был установлен на обеих машинах, я перезагрузил их обе. Затем на DESKTOP-PC я создал файл .gitignore в папке E:\Users\Public, чтобы указать Git игнорировать определенные файлы и папки, такие как корзина, информация о системном томе и *.tmp.

Затем я запустил следующее из окна PowerShell без прав администратора:

cd E:\Users\Public
git init
git add .
git commit -m "Initial Commit"

Затем я поделился своим диском E: по сети как \DESKTOP-PC\e. Я использовал расширенный общий доступ вместо мастера общего доступа. Я удалил разрешения по умолчанию для всех и вместо этого добавил запись разрешения специально для моего пользователя с полными разрешениями.

Затем я переключился на LAPTOP-PC. LAPTOP-PC не имеет диска E:. Поэтому вместо этого я создал папку с именем C:\E_Users. Затем я открыл окно PowerShell без прав администратора и выполнил следующее:

git clone file://///DESKTOP-PC/e/Users/Public

Это скопировало все файлы с DESKTOP-PC на LAPTOP-PC. Файлов было около 30 ГБ, так что это заняло несколько минут. (file:///// — это совместимый с Unix/Linux способ обращения к пути UNC \.... Это позволяет мне время от времени использовать Git Bash, если я хочу, вместо командной строки Windows или Windows PowerShell. )

Следующим шагом был общий доступ к папке C:\E_Users LAPTOP-PC в сети как \E5-772G\E_Users. Я настроил это с теми же разрешениями, что и общая папка на DESKTOP-PC. (Обратите внимание, что это, вероятно, не сработало бы, если бы у меня не было одинакового имени пользователя и пароля на обоих компьютерах.)

Затем я снова переключился на DESKTOP-PC. Все еще в PowerShell я выполнил следующее:

git remote add LAPTOP-PC file://///LAPTOP-PC/E_Users/Public
git fetch --all
git branch --set-upstream-to=LAPTOP-PC/master master
git pull --all

Все настроено. Теперь каждый раз, когда я добавляю, изменяю или удаляю какие-либо файлы на DESKTOP-PC, я открываю PowerShell или Git Bash, переключаюсь в нужный каталог и запускаю:

git status

чтобы увидеть, какие именно файлы я изменил. Затем:

git add .
git status
git commit -m "<Brief, present-tense description of the changes I made>"

Это регистрирует мои последние изменения в Git. Затем я переключаюсь на LAPTOP-PC и запускаю:

git pull --all --prune

Это переносит мои последние изменения с DESKTOP-PC на LAPTOP-PC.

Наконец, я снова переключаюсь на DESKTOP-PC и запускаю:

git pull --all --prune

снова. Теперь Git на DESKTOP-PC знает, что на LAPTOP-PC есть все последние изменения.

(По какой-то причине я обнаружил, что тянуть работает лучше, чем толкать.)

Если я изменяю некоторые файлы на LAPTOP-PC, процесс такой же, как и выше, за исключением того, что я меняю местами, на каком компьютере я запускаю какую команду и в каком порядке.

Я надеюсь, что это поможет кому-то!

Лично я бы выбрал Bvckup2 или, может быть, Bit Torrent Sync, но если вы довольны, это главное. Через 2 дня вы можете принять свой собственный ответ, который поможет другим читать это в будущем.

Я знаю, что это старо, но я обнаружил, что хочу сделать почти то же самое. В итоге я использовал Free File Sync и исключил скрытые файлы.

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста , отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре .