Я хочу синхронизировать файлы всего диска между двумя моими компьютерами с Windows 10, настольным компьютером и ноутбуком. Я хочу иметь возможность сделать это , выбрав , т. е. запустив команду из командной строки.
Если я удаляю файл на одном компьютере, я хочу, чтобы он был удален и на другом. Если я случайно внесу изменения в один и тот же файл на обоих компьютерах, я хочу иметь возможность разрешать конфликты.
Я хочу, чтобы все это происходило по моей локальной сети , без перехода в облако. Я хочу, чтобы он мог обрабатывать ~ 50 ГБ файлов. И я хочу, чтобы процесс синхронизации был максимально эффективным, а не пересылал файлы, копии которых уже есть на другом компьютере.
Я решил использовать 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, процесс такой же, как и выше, за исключением того, что я меняю местами, на каком компьютере я запускаю какую команду и в каком порядке.
Я надеюсь, что это поможет кому-то!
Я знаю, что это старо, но я обнаружил, что хочу сделать почти то же самое. В итоге я использовал Free File Sync и исключил скрытые файлы.
Стивен Джи Тагги