Этот ответ в настоящее время относится только к использованию двух компьютеров Linux [или, может быть, работает на Mac тоже? - не тестировался на Mac] (синхронизация от одного к другому), потому что я написал этот скрипт синхронизации в bash. Однако это просто оболочка git
, поэтому вы можете взять его и преобразовать в кроссплатформенное решение Python или что-то еще, если хотите
Это не дает прямого ответа на вопрос ОП, но оно настолько близко, что я гарантирую, что оно ответит на вопрос многих других людей, которые попадают на эту страницу (включая мой, на самом деле, поскольку я пришел сюда прежде, чем написать свое собственное решение), поэтому я Выкладываю это здесь в любом случае.
Я бы хотел:
- разрабатывать код с использованием мощной IDE, такой как Eclipse, на легковесном компьютере с Linux, затем
- собрать этот код через ssh на другом, более мощном компьютере с Linux (из командной строки, а не из Eclipse)
Давайте назовем первый компьютер, на котором я пишу код «PC1» (персональный компьютер 1), а второй компьютер, на котором я создаю код «PC2». Мне нужен инструмент для простой синхронизации с ПК1 на ПК2. Я пытался rsync
, но это было безумно медленно для больших репозиториев и занимало тонны пропускной способности и данных.
Итак, как мне это сделать? Какой рабочий процесс я должен использовать? Если у вас есть этот вопрос, вот рабочий процесс, который я решил. Я написал скрипт bash для автоматизации процесса с помощью git
автоматической отправки изменений с ПК1 на ПК2 через удаленный репозиторий, такой как github. Пока это работает очень хорошо, и я очень доволен этим. Это намного намного быстрее, чем rsync
, на мой взгляд, заслуживает большего доверия, потому что каждый ПК поддерживает функциональное git-репо и использует гораздо меньшую полосу пропускания для выполнения всей синхронизации, поэтому его легко выполнить по горячей точке мобильного телефона без использования тонны ваших данных.
Настроить:
Установите скрипт на ПК1 (это решение предполагает, что ~ / bin находится в вашем $ PATH):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
Теперь отредактируйте файл "~ / .sync_git_repo", который вы только что скопировали выше, и обновите его параметры в соответствии с вашим случаем. Вот параметры, которые это содержит:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
Git клонировать репо, который вы хотите синхронизировать как на ПК1, так и на ПК2.
- Убедитесь, что все ваши ssh-ключи настроены так, чтобы иметь возможность выдвигать и извлекать данные удаленного репо с ПК1 и ПК2. Вот несколько полезных ссылок:
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Убедитесь, что все ваши ssh-ключи настроены на ssh с ПК1 на ПК2.
Теперь cd
в любой каталог в git-репо на ПК1 и запустите:
sync_git_repo_from_pc1_to_pc2
Это оно! Примерно через 30 секунд все будет магически синхронизировано с ПК1 на ПК2, и он будет выводить на печать все время, чтобы сообщить вам, что он делает, и где он это делает на вашем диске и на каком компьютере. Это также безопасно, потому что он не перезаписывает и не удаляет все, что не передано. Вместо этого он сначала поддерживает это! Читайте больше ниже о том, как это работает.
Вот процесс, который использует этот скрипт (т.е. что он на самом деле делает)
- С ПК1: он проверяет, есть ли какие-либо незафиксированные изменения на ПК1. Если это так, он фиксирует их на временную фиксацию в текущей ветви. Затем он принудительно выталкивает их в удаленную ветку SYNC. Затем он отменяет временную фиксацию, которую он только что сделал в локальной ветке, а затем возвращает локальное git-репо точно в прежнее состояние, размещая любые файлы, которые были ранее подготовлены во время вызова сценария. Затем он
rsync
копирует сценарий на ПК2 и ssh
вызывает ПК2, чтобы он запускал сценарий со специальной опцией, просто выполняющей действия на ПК2.
- Вот что делает PC2: он
cd
входит в репозиторий и проверяет, существуют ли какие-либо локальные незафиксированные изменения. Если это так, он создает новую резервную ветвь, разветвленную из текущей ветви (имя образца: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- обратите внимание, что это ГГГГММДД-ЧЧММчс - SSsec), и фиксирует любые незафиксированные изменения в этой ветви с сообщением фиксации, например DO BACKUP OF ALL НЕОГРАНИЧЕННЫЕ ИЗМЕНЕНИЯ НА ПК2 (ЦЕЛЬ ПК / СТРОИТЕЛЬНАЯ МАШИНА), Теперь он проверяет ветку SYNC, извлекая ее из удаленного хранилища, если она еще не находится на локальной машине. Затем он извлекает последние изменения в удаленном репозитории и выполняет полный сброс, чтобы заставить локальный репозиторий SYNC соответствовать удаленному репозиторию SYNC. Вы могли бы назвать это «жестким натяжением». Однако это безопасно, потому что мы уже создали резервные копии любых незафиксированных изменений, которые мы имели локально на ПК2, поэтому ничего не потеряно!
- Это оно! Теперь вы создали идеальную копию с ПК1 на ПК2, даже не заботясь о чистоте рабочих каталогов, так как скрипт обрабатывает все автоматические фиксации и прочее для вас! Это быстро и очень хорошо работает на огромных репозиториях. Теперь у вас есть простой механизм для использования любой IDE по вашему выбору на одной машине при сборке или тестировании на другой машине, легко, по необходимости, через точку доступа Wi-Fi со своего мобильного телефона, даже если в репозитории десятки гигабайт, и у вас есть время и ограниченные в ресурсах.
Ресурсы:
- Весь проект: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Смотрите больше ссылок и ссылок в самом исходном коде этого проекта.
- Как сделать «жесткое извлечение», как я его называю: как заставить «git pull» перезаписать локальные файлы?
Связанный:
- git репозиторий синхронизируется между компьютерами при перемещении?