Ця відповідь наразі стосується лише використання двох комп’ютерів Linux [чи, можливо, працює і на Mac? - неперевірено на Mac] (синхронізація від одного до іншого), оскільки я написав цей сценарій синхронізації в bash. git
Однак це просто обгортка , тому сміливо візьміть її та перетворіть у кросплатформенне рішення Python або щось таке, якщо хочете
Це не відповідає безпосередньо на запитання ОП, але воно настільки близько, я гарантую, що він відповість на запитання багатьох інших людей, хто приземлився на цій сторінці (в тому числі і моя, адже я прийшов сюди першим, перш ніж написати власне рішення), тож я Я все одно розміщую тут.
Я хочу:
- розробляйте код, використовуючи потужний IDE, як Eclipse, на легкому комп'ютері Linux, а потім
- побудувати цей код через ssh на іншому, більш потужному комп'ютері Linux (з командного рядка, а не зсередини Eclipse)
Давайте назвемо перший комп’ютер, де я записую код "PC1" (Персональний комп'ютер 1), і 2-й комп'ютер, де я будую код "PC2". Мені потрібен інструмент для легкої синхронізації з PC1 на PC2. Я спробував rsync
, але це було шалено повільно для великих репостів і зайняло багато пропускної здатності та даних.
Отже, як це зробити? Який робочий процес я повинен використовувати? Якщо у вас є і це питання, ось такий процес роботи, який я вирішив. Я написав скрипт bash для автоматизації процесу за допомогою git
автоматичного натискання змін з PC1 на PC2 через віддалений сховище, наприклад github. Поки що це працює дуже добре, і я дуже задоволений цим. Це набагато набагато швидше, ніж rsync
, на мою думку, більш надійний, тому що кожен ПК підтримує функціональну функцію git repo та використовує набагато меншу пропускну здатність для усієї синхронізації, тому це легко зробити через гарячу точку мобільного телефону, не використовуючи тонни ваших даних.
Налаштування:
Встановіть скрипт на PC1 (це рішення передбачає, що ~ / 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 клонує ваше репо, яке ви хочете синхронізувати як на PC1, так і на PC2.
- Переконайтесь, що ваші ssh-клавіші налаштовані для того, щоб можна було натискати та тягнути до віддаленого репо з PC1 та PC2. Ось кілька корисних посилань:
- 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 з PC1 на PC2.
Тепер cd
у будь-який каталог в git repo на PC1 та запустіть:
sync_git_repo_from_pc1_to_pc2
Це воно! Приблизно через 30 секунд все буде магічно синхронізовано з PC1 на PC2, і він буде друкувати вихід весь час, щоб розповісти, що він робить і де це робить на своєму диску та на якому комп’ютері. Це також безпечно, оскільки він не перезаписує та не видаляє все, що не передається. Спершу це резервне копіювання! Детальніше читайте нижче про те, як це працює.
Ось процес, який використовує цей сценарій (тобто: що він насправді робить)
- Від PC1: він перевіряє, чи є на ПК1 будь-які незапущені зміни. Якщо це так, він зобов’язує їх тимчасово скористатися поточною гілкою. Потім це сила підштовхує їх до віддаленої гілки SYNC. Потім він розблоковує своє тимчасове зобов’язання, яке він тільки що зробив у локальній гілці, а потім повертає локальний git repo саме таким чином, як це було, налаштовуючи будь-які файли, які раніше були інсценовані під час виклику сценарію. Далі, він
rsync
копіює сценарій на PC2 і робить ssh
дзвінок, щоб сказати PC2 запустити сценарій із спеціальним варіантом просто робити PC2.
- Ось що робить PC2: він
cd
переходить у репо, і перевіряє, чи існують якісь локальні неспроможні зміни. Якщо це так, він створює нову гілку резервного копіювання, роздвоєну з поточної гілки (назва зразка: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- зауважте, що це YYYYMMDD-HHMMhrs - SSsec), і здійснює будь-які невідомі зміни в цій гілці з повідомленням коміті, таким як DO BACKUP OF ALL НЕЗАБАВЛЕНІ ЗМІНИ НА PC2 (ЦІЛЬНИЙ ПК / БУДІВНИЙ МАШИНА). Тепер він перевіряє гілку SYNC, витягуючи її з віддаленого сховища, якщо його вже немає на локальній машині. Потім він отримує останні зміни у віддаленому сховищі та робить жорстке скидання, щоб змусити локальне сховище SYNC відповідати віддаленому сховищу SYNC. Ви можете назвати це "важким". Однак це безпечно, тому що ми вже створили резервні копії будь-яких незавершених змін, які були на локальному рівні на ПК2, тому нічого не втрачено!
- Це воно! Тепер ви створили ідеальну копію з PC1 на PC2, навіть не маючи необхідності забезпечити чисті робочі каталоги, оскільки сценарій обробляв усі автоматичні фіксації та інше для вас! Це швидко і дуже добре працює на величезних сховищах. Тепер у вас є простий механізм для використання будь-якого IDE на ваш комп'ютер під час створення або тестування на іншій машині, легко, через гарячу точку Wi-Fi з вашого мобільного телефону, якщо це потрібно, навіть якщо сховище становить десятки гігабайт і ви час і обмежені ресурсами.
Ресурси:
- Весь проект: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Дивіться ще багато посилань та посилань у самому вихідному коді в рамках цього проекту.
- Як зробити "жорстке тягнення", як я його називаю: Як змусити "git pull" перезаписати локальні файли?
Пов'язані:
- синхронізація сховища git між комп’ютерами під час переміщення?