Jawaban ini saat ini hanya berlaku untuk menggunakan dua komputer Linux [atau mungkin bekerja pada Mac juga? - belum teruji pada Mac] (menyinkronkan dari satu ke yang lain) karena saya menulis skrip sinkronisasi ini di bash. Ini hanyalah sebuah pembungkus git
, jadi jangan ragu untuk mengambilnya dan mengubahnya menjadi solusi Python lintas-platform atau sesuatu jika Anda mau.
Ini tidak secara langsung menjawab pertanyaan OP, tetapi begitu dekat saya jamin itu akan menjawab pertanyaan banyak orang lain yang mendarat di halaman ini (termasuk saya, sebenarnya, ketika saya datang ke sini dulu sebelum menulis solusi sendiri), jadi saya Saya mempostingnya di sini.
Aku ingin:
- kembangkan kode menggunakan IDE yang kuat seperti Eclipse pada komputer Linux yang ringan, lalu
- buat kode itu melalui ssh di komputer Linux yang berbeda dan lebih kuat (dari baris perintah, BUKAN dari dalam Eclipse)
Mari kita panggil komputer pertama tempat saya menulis kode "PC1" (Personal Computer 1), dan komputer ke-2 tempat saya membuat kode "PC2". Saya membutuhkan alat untuk menyinkronkan dengan mudah dari PC1 ke PC2. Saya mencoba rsync
, tetapi itu sangat lambat untuk repo besar dan mengambil banyak bandwidth dan data.
Jadi, bagaimana saya melakukannya? Alur kerja apa yang harus saya gunakan? Jika Anda memiliki pertanyaan ini juga, inilah alur kerja yang saya putuskan. Saya menulis skrip bash untuk mengotomatiskan proses dengan menggunakan git
untuk secara otomatis mendorong perubahan dari PC1 ke PC2 melalui repositori jarak jauh, seperti github. Sejauh ini bekerja dengan sangat baik dan saya sangat senang dengannya. Ini jauh lebih cepat daripada rsync
, lebih dapat dipercaya menurut saya karena setiap PC mempertahankan repositori fungsional, dan menggunakan bandwidth yang jauh lebih sedikit untuk melakukan seluruh sinkronisasi, sehingga mudah dilakukan melalui hot spot ponsel tanpa menggunakan banyak data Anda.
Mempersiapkan:
Instal skrip pada PC1 (solusi ini mengasumsikan ~ / bin berada di $ PATH Anda):
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
Sekarang edit file "~ / .sync_git_repo" yang baru saja Anda salin di atas, dan perbarui parameternya agar sesuai dengan kasus Anda. Berikut adalah parameter yang dikandungnya:
# 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 klon repo Anda yang ingin Anda sinkronkan pada PC1 dan PC2.
- Pastikan kunci ssh Anda sudah diatur untuk dapat mendorong dan menarik repo jarak jauh dari PC1 dan PC2. Inilah beberapa tautan bermanfaat:
- 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
- Pastikan kunci ssh Anda sudah diatur untuk ssh dari PC1 ke PC2.
Sekarang, masuklah cd
ke direktori mana saja di git repo di PC1, dan jalankan:
sync_git_repo_from_pc1_to_pc2
Itu dia! Sekitar 30 detik kemudian semuanya akan disinkronkan secara ajaib dari PC1 ke PC2, dan itu akan mencetak output sepanjang waktu untuk memberi tahu Anda apa yang dilakukannya dan di mana ia melakukannya pada disk Anda dan di komputer mana. Ini aman juga, karena tidak menimpa atau menghapus apa pun yang tidak dikomit. Alih-alih, ia mendukungnya terlebih dahulu! Baca lebih lanjut di bawah untuk cara kerjanya.
Inilah proses yang digunakan skrip ini (yaitu: apa yang sebenarnya ia lakukan)
- Dari PC1: Memeriksa untuk melihat apakah ada perubahan yang tidak dikomit ada pada PC1. Jika demikian, itu mengikat mereka untuk komit sementara di cabang saat ini. Itu kemudian memaksa mendorong mereka ke cabang SYNC jauh. Kemudian ia melakukan komitmen sementara yang baru saja ia lakukan pada cabang lokal, lalu menempatkan repo git lokal kembali ke keadaan semula dengan mementaskan semua file yang sebelumnya dipentaskan pada saat Anda memanggil skrip. Selanjutnya
rsync
adalah salinan skrip ke PC2, dan melakukan ssh
panggilan untuk memberitahu PC2 untuk menjalankan skrip dengan opsi khusus untuk hanya melakukan hal-hal PC2.
- Inilah yang dilakukan PC2: masuk
cd
ke repo, dan memeriksa untuk melihat apakah ada perubahan lokal yang tidak dikomit. Jika demikian, ia membuat cabang cadangan baru yang dipotong dari cabang saat ini (nama sampel: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- perhatikan bahwa YYYYMMDD-HHMMhrs - SSsec), dan melakukan perubahan yang tidak dikomit ke cabang tersebut dengan pesan komit seperti DO BACKUP OF ALL PERUBAHAN YANG TAK TERDAPAT PADA PC2 (TARGET PC / BUILD MACHINE). Sekarang, ia memeriksa cabang SYNC, menariknya dari repositori jarak jauh jika belum ada di mesin lokal. Kemudian, ia mengambil perubahan terbaru pada repositori jarak jauh, dan melakukan hard reset untuk memaksa repositori SYNC lokal agar sesuai dengan repositori SYNC jarak jauh. Anda mungkin menyebutnya "tarikan keras". Namun, ini aman, karena kami telah mendukung setiap perubahan yang tidak dikomit yang kami miliki secara lokal pada PC2, jadi tidak ada yang hilang!
- Itu dia! Anda sekarang telah menghasilkan salinan yang sempurna dari PC1 ke PC2 bahkan tanpa harus memastikan direktori kerja yang bersih, karena skrip menangani semua komit otomatis dan hal-hal untuk Anda! Cepat dan bekerja sangat baik pada repositori besar. Sekarang Anda memiliki mekanisme yang mudah untuk menggunakan IDE apa pun pilihan Anda pada satu mesin saat membangun atau menguji pada komputer lain, dengan mudah, melalui hot spot wifi dari ponsel Anda jika diperlukan, bahkan jika repositori adalah puluhan gigabyte dan Anda punya waktu dan terbatas sumber daya.
Sumber:
- Seluruh proyek: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Lihat lebih banyak tautan dan referensi dalam kode sumber itu sendiri dalam proyek ini.
- Bagaimana cara melakukan "hard pull", seperti saya menyebutnya: Bagaimana cara memaksa "git pull" untuk menimpa file lokal?
Terkait:
- git sinkronisasi repositori antar komputer, saat bergerak?