Bekerja dengan Git pada banyak mesin

15

Ini mungkin terdengar agak aneh, tapi saya bertanya-tanya tentang cara yang baik untuk bekerja di Git dari beberapa mesin yang terhubung bersama dalam beberapa cara. Sepertinya saya memiliki dua opsi, dan saya dapat melihat manfaat di kedua sisi:

  • Gunakan git sendiri untuk berbagi, setiap mesin memiliki repo sendiri dan Anda harus memilih di antara mereka.
    • Anda dapat bekerja di salah satu mesin meskipun yang lain sedang offline. Ini dengan sendirinya cukup besar menurut saya.
  • Gunakan satu repo yang dibagi melalui jaringan antar mesin.
    • Tidak perlu melakukan git pull setiap kali Anda mengganti mesin, karena kode Anda selalu terkini.
    • Jangan pernah khawatir bahwa Anda lupa untuk mendorong kode dari mesin non-hosting Anda yang lain, yang sekarang tidak terjangkau, karena Anda sedang mengerjakan fileshare pada mesin ini.

Intuisi saya mengatakan bahwa setiap orang biasanya memilih opsi pertama. Tapi sisi negatifnya adalah Anda mungkin tidak selalu dapat mengakses kode dari komputer lain, dan saya tentu saja tidak ingin mendorong semua cabang WIP saya ke github pada akhir setiap hari. Saya juga tidak ingin harus membiarkan komputer saya menyala sepanjang waktu sehingga saya dapat mengambilnya secara langsung. Poin terakhir adalah bahwa semua perintah git untuk menjaga banyak cabang tetap up to date bisa membosankan.

Apakah ada pegangan ketiga pada situasi ini? Mungkin beberapa alat pihak ketiga tersedia yang membantu membuat proses ini lebih mudah? Jika Anda menghadapi situasi ini secara teratur, apa yang Anda sarankan?

Tesserex
sumber
git adalah alat versi desentralisasi dan git selalu membuat salinan lokal dari repo Anda ketika kloning, konsep tentang repositori "terpusat" atau "unik" sama sekali tidak ada di dunia git dalam istilah global.
user827992
2
@ user827992 Saya sepenuhnya 100% menyadari fakta itu. Saya tidak berpikir saya menyarankan sesuatu tentang pemusatan. Satu-satunya hal yang saya maksudkan adalah jika Anda menggunakan fileshare, satu mesin adalah tuan rumah, dalam arti itu secara fisik menyimpan file. Itu konsep yang sepenuhnya terpisah dari DVD.
Tesserex
utas ini stackoverflow.com/questions/1550378/… berisi beberapa pemikiran bagus. Berkomitmen, mendorong, menarik, mengatur ulang, dan menghapus cabang adalah salah satunya (mungkin otomatis)
phil294

Jawaban:

14

Saya berurusan dengan kedua solusi yang Anda usulkan setiap hari. Ada dua konsep kunci untuk menanganinya dengan baik.

  1. Gunakan cabang topik. Saya percaya sejarah produksi harus murni. Sebagai hasilnya, saya menghabiskan banyak waktu membuat productionsejarah cabang saya logis, dapat ditiru, dan dapat ditiadakan. Namun, ketika menggunakan beberapa mesin, Anda kadang-kadang perlu melakukan pekerjaan yang sedang berjalan. Gunakan cabang topik. Anda bisa pulldan pushcabang ini dari kedua mesin dengan sedikit usaha, dan ketika sudah siap untuk bergabung masteratau production rebase untuk membuat sejarah yang lebih dapat dipertahankan.
  2. Menggunakan satu repo yang dibagikan melalui jaringan baik-baik saja, kecuali Anda juga membaginya dengan pengguna lain. Kami menggunakan repositori bersama untuk skrip, yang secara kreatif dinamai scriptsrepositori. Awalnya sepertinya ide yang bagus karena repo tidak sering berubah, tetapi seiring waktu itu menjadi mimpi buruk. Sangat mudah untuk saling menimpa pekerjaan satu sama lain, dan Anda menghabiskan banyak waktu lalu lintas udara untuk mengendalikan siapa yang menggunakan repositori seperti halnya Anda mengerjakannya.

Solusi terbaik adalah menjaga repositori lokal di setiap mesin dan berbagi cabang topik di antara mereka melalui remote. Berkomitmen bekerja dalam proses ke cabang-cabang itu sesering yang Anda inginkan. Selama Anda mau rebasemereka menjadi sejarah yang lebih mudah dipahami, itu cukup efektif dalam praktik.

Jika Anda menemukan diri Anda mengerjakan lebih dari satu cabang topik sepanjang hari tetapi tidak ingin mendorong masing-masing secara terpisah ke remote, git push <remote>secara default akan mendorong semua cabang yang cocok ke <remote>. Default ini akan berubah di versi git yang lebih baru , tetapi dapat dikesampingkan dengan menetapkan push.defaultdalam file konfigurasi atau dengan menentukan yang cocok refspec:

git push <remote> :
Christopher
sumber
3

Jika tidak semua mesin selalu menyala, tidak ada peluru perak: sebelum mematikan mesin, Anda harus mendorong perubahan di tempat lain. Saya mendorong ke server pribadi, tetapi bisa juga dropbox atau kunci usb yang Anda bawa ke mana-mana.

Ya, mendorong beberapa cabang ke tempat sentral bisa jadi membosankan, tapi itu seharusnya tidak terlalu sulit untuk dituliskan. Saya menggunakan push.shskrip untuk itu, yang saya jalankan setiap kali saya selesai mengerjakan mesin.

janos
sumber
2

Saya datang pada ini dari arah yang sedikit berbeda (dan saya menggunakan lincah, tetapi secara filosofis itu sama). Ini bukan ide saya, saya hanya menggunakannya dan berfungsi untuk hal-hal pribadi saya.

Saya membuat tiruan dari repositori saya di folder SkyDrive (bisa juga dropbox atau alat sinkronisasi ajaib pilihan Anda), saya kemudian mengkonfigurasi instances pada dua mesin saya untuk secara otomatis mendorong ke repositori SkyDrive saat melakukan.

Ketika saya mengganti kotak maka itu hanya masalah melakukan tarik dan pembaruan - secara teori Anda akan selalu bekerja secara linier meskipun dalam beberapa repositori.

Kuncinya di sini adalah bahwa repo SkyDrive sebagian besar ada untuk menyediakan sarana untuk memastikan bahwa saya memiliki akses ke lebih atau kurang versi terbaru dari kode pada kedua mesin saya - meskipun itu akan bekerja dengan baik untuk lebih banyak - dan untuk menyediakan cadangan ekstra. Apa pun yang "selesai" akan didorong ke Kiln (jika saya menggunakan git dan saya benar memahami cara permainan dimainkan maka itu akan menjadi titik di mana saya melakukan rebase).

Apa yang saya benar-benar tidak ingin lakukan adalah menjalankan folder bersama ... jika Anda menggunakan DVCS maka Anda juga dapat menikmati manfaatnya.

Murph
sumber
0

Yang pertama dari dua alternatif Anda adalah jawabannya. Itu tersirat oleh "D" di "DVCS". Setiap pengguna memiliki instance repositori lokal mereka sendiri, dan repositori berbicara di antara mereka sendiri dengan cara yang dapat dikelola.

Anda bisa melakukan alternatif kedua Anda, tetapi masalahnya adalah, hanya ada satu direktori kerja repositori. Jadi pohon kerja bisa hanya dalam satu negara pada satu waktu - tidak ada Joe bekerja di satu cabang dan Jane bekerja di cabang lainnya. Jadi, pengembang dapat menimpa perubahan satu sama lain, memotong pekerjaan masing-masing. Kenapa, rasanya seperti tidak memiliki kontrol versi sama sekali!

Ada jalan tengah yang disebut, memiliki repositori kosong pada drive jaringan, dan meminta pengguna individual untuk keluar-masuk. Ini memisahkan pekerjaan WIP Anda (yang ya, Anda simpan secara lokal) dari pekerjaan yang Anda terbitkan hingga repositori. Itu bukan "simpan" - itu "publikasikan". Pekerjaan yang Anda ingin dilihat dan digunakan rekan-rekan Anda.

Dan Ray
sumber