git repository sync antar komputer, saat berpindah-pindah?

89

Katakanlah saya memiliki pc desktop dan laptop, dan terkadang saya bekerja di desktop dan terkadang saya bekerja di laptop.

Apa cara termudah untuk memindahkan repositori git bolak-balik?

Saya ingin repositori git identik, sehingga saya dapat melanjutkan tempat yang saya tinggalkan di komputer lain.

Saya ingin memastikan bahwa saya memiliki cabang dan tag yang sama di kedua komputer.

Terima kasih Johan

Catatan: Saya tahu bagaimana melakukan ini dengan SubVersion, tapi saya penasaran bagaimana ini akan bekerja dengan git. Jika lebih mudah, saya dapat menggunakan pc ketiga sebagai server klasik yang dapat disinkronkan oleh dua pc: s.

Catatan: Kedua komputer menjalankan Linux.


Pembaruan :

Jadi mari kita coba ide XANI: s dengan repo git kosong di server, dan sintaks perintah push dari KingCrunch. Dalam contoh ini ada dua klien dan satu server.

Jadi mari kita buat bagian server dulu.

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

Jadi dari salah satu komputer lain saya mencoba mendapatkan salinan repo dengan klon:

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

Lalu masuk ke repo itu dan tambahkan file:

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

Sekarang server diperbarui dengan testfile1.txt.

Bagaimanapun, mari kita lihat apakah kita bisa mendapatkan file ini dari komputer lain.

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

Dan sekarang kita bisa melihat testfile.

Pada titik ini kita dapat mengeditnya dengan lebih banyak konten dan memperbarui server lagi.

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

Kemudian kita kembali ke klien pertama dan melakukan git pull untuk melihat file yang diperbarui. Dan sekarang saya dapat berpindah-pindah antara dua komputer, dan menambahkan komputer ketiga jika saya mau.

Johan
sumber
Sinkronkan skrip untuk mengotomatiskan proses menggunakan git untuk menyinkronkan dari PC1 ke PC2 dengan cepat dan dengan penggunaan data yang rendah, bahkan melalui hotspot wifi ponsel (ratusan kali lebih cepat daripada rsync untuk kasus penggunaan ini!): Stackoverflow.com/questions / 4948190 /…
Gabriel Staples

Jawaban:

27

Menurut saya, ada beberapa pendekatan. Saya hanya akan menjelaskan, bagaimana saya menangani ini

Saya memiliki satu netbook sebagai server 24/7, yang menampung beberapa git-repositories. Dari / Ke sana saya mendorong dan menarik perubahan melalui SSH. Untuk akses dari luar saya menggunakan dyndns.org. Ini berfungsi dengan baik, terutama karena saya memiliki lebih dari dua sistem, yang memerlukan akses ke beberapa repositori.

Pembaruan: Sebuah contoh kecil. Katakanlah netbook saya disebut "netbook". Saya membuat repositori di sana

$ ssh [email protected]
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

Pada desktop saya, saya akan membuat tiruannya. Mungkin saya akan menambahkan beberapa file juga

$ git clone [email protected]:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

Pada portabel saya, saya akan (pertama) melakukan hal yang sama, tetapi untuk akses jarak jauh (dari luar LAN saya), saya juga akan menambahkan alamat eksternal.

$ git clone [email protected]:/home/username/git/newThing
$ git remote add externalName [email protected]:/home/username/git/newThing
$ git pull externalName master

Ini hanya cara kerja git (/ git workflows). Anda dapat menambahkan repositori jarak jauh sebanyak yang Anda suka. Tidak masalah, jika dua atau lebih mengacu pada repositori "fisik" yang sama. Anda tidak memerlukan "server" lokal sendiri, Anda dapat menggunakan server publik mana pun, yang Anda miliki akses sshnya. Dan tentu saja Anda tidak membutuhkan server publik sama sekali, jika Anda tidak membutuhkan akses dari luar. Repositori telanjang juga dapat berada di sistem desktop dan Anda kemudian dapat membuat repositori-copy-kerja dalam sistem file lokal.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

Inilah caranya, bagaimana saya menangani ini, dan bagi saya itu bekerja dengan cukup baik (jika tidak sempurna;))

Sesuatu untuk dibaca: http://progit.org/ Buku yang sangat bagus.-

KingCrunch
sumber
Bagaimana tampilannya, ketika Anda menggunakan cara yang berbeda ke dalam repo? Apakah Anda ingin menjelaskan jawaban Anda dengan sebuah contoh?
Johan
Terima kasih, contoh-contoh itu banyak menjelaskan :)
Johan
6

Saya akan mengkloning repo dari satu kotak ke kotak lainnya, dan kemudian mengatur dua repo sehingga saya bisa git fetchdari kotak lainnya.

Mengganti nama remote dari originke nama kotak lain membuat cabang remote lebih mudah dibaca.

Perhatikan bahwa dengan hanya menggunakan git fetch(dan tidak git push), ini berfungsi dengan baik dengan repositori non-telanjang:

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo
ndim
sumber
5

Cara termudah: repo pusat dibuat dengan --bare(jadi tidak ada file yang diperiksa, hanya file .git), atau github

"Didistribusikan" akan terlihat seperti itu:

Mendirikan:

  1. Di laptop: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. Di desktop: git remote add laptop ssh://user@laptop/home/user/repo/path

Menyinkronkan:

git pull laptop/desktop (push tidak akan berfungsi dengan baik pada repo non-bare karena git tidak akan mengubah file yang diperiksa saat mendorong ke repo jarak jauh)

Atau, buat repo di flashdisk;)

XANi
sumber
Saya mencoba menggunakan --bare repo, tetapi saya tidak bisa mendapatkan seluruh alur kerja dengan benar.
Johan
Saya baru saja memulai dengan git, dan beralih dari git lokal ke github dan kembali sejauh ini dapat saya lakukan, tetapi metode komputer-ke-komputer saya tidak dapat bekerja. Pertanyaan bodoh - kredensial apa yang saya gunakan user? Untuk github, saya hanya perlu menambahkan kunci rsa-pub. Saya sudah mencoba menambahkan rsa-pub untuk komputer pemohon klon ke known_hosts, tetapi itu tidak berhasil ...
Dave
Ini adalah cara termudah bagi saya untuk melakukan sinkronisasi antara dua mesin lokal tanpa terus-menerus masuk ke server jarak jauh.
johnzachary
1

Bagaimana kalau hanya menggunakan rsync?

seriyPS
sumber
3
Saya telah menggunakan rsync selama bertahun-tahun untuk menjaga tiga server tetap sinkron. Ini berfungsi tetapi rsync tidak memberi Anda cara untuk mengembalikan perubahan setelah sinkronisasi selesai. Saya juga kehilangan begitu banyak file dengan cara ini karena saya tidak membaca output dry-run cukup dekat dan rsync disetel untuk menghapus file yang tidak ada di master. Sejak itu saya pindah ke git dan menganggapnya sebagai cara yang jauh lebih aman untuk menjaga agar direktori penting tetap sinkron.
Cloudkiller
1

Tidak bisakah Anda membuat repositori jarak jauh di GitHub, BitBucket atau GitLab? (Dua perusahaan terakhir menawarkan repositori pribadi gratis tanpa batas). Ketika Anda menyelesaikan hari di tempat kerja, cukup gunakan git pushuntuk mendorong perubahan Anda ke repo jarak jauh. Saat Anda tiba di rumah, lakukan saja git pulluntuk menarik perubahan dari pekerjaan ke mesin rumah Anda. Demikian juga, ketika Anda selesai di rumah, lakukan git pushdan kemudian ketika Anda kembali bekerja, lakukan git pull.

Mahasiswa
sumber
1

Apa cara termudah untuk memindahkan repositori git bolak-balik [antara 2 komputer]?

Skenario 1: Saya bekerja (mengedit kode dan file) secara eksklusif di PC1 tetapi ingin memiliki salinan duplikat file (mis: untuk membangun seluruh basis kode) juga di PC2.

Sinkronkan dari PC1 ke PC2 dalam <1 menit melalui hotspot wifi sambil menggunakan <25 MB data:

Saya bekerja pada satu komputer lemah yang saya bawa (laptop), tetapi membangun di atas komputer yang lebih kuat yang terletak di tempat lain. Saya menggunakan git sepanjang waktu untuk melakukan sinkronisasi dari laptop saya ke komputer lain menggunakan skrip. Saya hanya mengetik perintah ini untuk menjalankannya:

sync_git_repo_from_pc1_to_pc2

Itu dia! Biasanya membutuhkan sekitar 25 MB data dan ~ 30 detik hingga 1 menit, bahkan saat menggunakan hotspot wifi ponsel dan bekerja pada repo yang berukuran puluhan gigabyte . Saya ssh'ed ke PC2, jadi saya lakukan git log -1di PC2 untuk memverifikasi bahwa sinkronisasi berfungsi, lalu saya menjalankan perintah build. Bekerja dengan sempurna. Cobalah. Lihat tautan di bawah untuk detailnya.

Catatan: repo kloning pada PC2 akan berada di cabang git bernama somename_SYNC. Ubah skrip dengan tepat jika Anda ingin memiliki nama cabang yang sama daripada selalu menggunakan "cabang SYNC". Dimungkinkan untuk memodifikasi skrip untuk mendapatkan efek yang lebih seperti Skenario 2 di bawah jika diinginkan. Namun demikian, melakukan Skenario 2 secara manual tidaklah sulit, jadi Anda mungkin ingin terus melakukan Skenario 2 secara manual. Ini Skenario 1 di mana skrip otomatis adalah yang paling bermanfaat dan menghemat waktu, karena memungkinkan alur kerja "ubah, sinkronkan, bangun" yang mudah dan cepat di mana "modifikasi" terjadi di PC1, "sinkronisasi" dijalankan dari PC1 tetapi juga memengaruhi PC2, dan "build" dilakukan di PC2.

Tautan:

  1. Petunjuk penyiapan dan penginstalan lengkap di sini:
    Bekerja pada proyek jarak jauh dengan Eclipse melalui SSH
  2. Baca, dokumentasi, & repo di sini: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. Skrip persis yang dimaksud ada di sini:
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

Skenario 2: Saya bekerja (mengedit kode dan file) di banyak komputer, dan ingin dapat mengedit repositori kode yang sama dari komputer mana pun di dunia:

Saya ingin repositori git identik, sehingga saya dapat melanjutkan tempat yang saya tinggalkan di komputer lain. Saya ingin memastikan bahwa saya memiliki cabang dan tag yang sama di kedua komputer.

  1. Buka https://github.com dan buat akun dan secara opsional (disarankan) siapkan kunci ssh .

  2. Sekarang gunakan antarmuka web mereka untuk membuat repositori baru.

    1. Mulai tahun 2020 atau lebih awal, GitHub juga mengizinkan repositori pribadi gratis , jadi ini berfungsi dengan baik bahkan untuk proyek pribadi, sumber tertutup.
  3. Temukan repositori baru ssh atau https clone URL. Contoh: [email protected]: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git atau https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .

  4. Clone proyek ke PC1. Ex:

     [email protected]:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. Dan ulangi perintah klon yang sama persis di PC2.

  6. Sekarang di PC1, buat beberapa perubahan, lakukan, dan dorong ke repositori "jarak jauh" Anda di github:

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
    
  7. Sekarang di PC2, lakukan perubahan Anda:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. Sekarang Anda dapat mengedit file di PC2, menjalankannya, dan mendorongnya ke github menggunakan perintah yang ditunjukkan hanya 2 langkah di atas, lalu dari PC1 Anda dapat menjalankan git pulluntuk menarik perubahan tersebut dari PC2.

  9. Terus lakukan proses ini, sesuai kebutuhan, bekerja pada PC1 ATAU PC2, dan dengan mudah berbagi file dan membagi pekerjaan Anda antara dua komputer. Ingatlah bahwa semua perubahan Anda harus dilakukan dan didorong ke github di satu PC sebelum Anda dapat memeriksanya (menariknya) dan melanjutkan bekerja di PC lain.

  10. Jika Anda pernah mengalami situasi di mana file agak tidak sinkron antara dua PC, Anda mungkin harus menggunakan beberapa cabang tambahan, melakukan beberapa penggabungan, menyelesaikan konflik, dll. Kemudian, ini menjadi lebih mirip dengan bekerja dengan tim kecil tempat Anda semua mengerjakan repo yang sama. Google adalah teman Anda. Git sangat sangat kuat, dan memiliki perintah, sekumpulan perintah, atau alur kerja untuk hampir semua hal.

Gabriel Staples
sumber
0

Nah, Anda dapat mendorong dan menarik (melalui Git) ke server yang berpotensi Anda siapkan. Atau Anda dapat menyimpan repo Anda di GitHub dan menggunakannya sebagai jembatan sinkronisasi.

mipadi
sumber
0

Anda dapat membuat repositori di komputer mana pun, mungkin di desktop dan mendorong / menariknya dari laptop dan dirinya sendiri.

Kerhong
sumber