Apakah repositori mercurial besar menderita "balapan dorong"?

9

Membaca beberapa "Mengapa DVCS lebih baik" menjawab beberapa pertanyaan tentang Programmer. SEGAR-BENAR mereka semua mengatakan bahwa secara umum, DVCS lebih baik karena Anda tidak memiliki ras komit dalam proyek besar, IE berkomitmen, ketinggalan zaman sehingga perbarui, komit, kedaluwarsa lagi, komit, masih ketinggalan zaman, dll.

DVCS membatasi ini dengan konsep push. Namun dalam proyek yang sangat besar tidak akan ada "lomba dorong", terutama pada akhir hari? Saya tahu di Git ini agak diperbaiki oleh percabangan konstan untuk semuanya, tetapi dalam Mercurial Anda tidak bercabang, Anda membuat kepala baru.

Masalah yang saya lihat

  1. Pengguna mencoba mendorong
  2. Kedaluwarsa (lincah tidak akan membiarkan Anda mendorong jika repo lokal Anda kedaluwarsa), jadi Anda menarik dan menggabungkan perubahan lokal Anda
  3. Pengguna mencoba mendorong lagi tetapi saat mereka menggabungkan orang lain didorong, sehingga mereka kedaluwarsa lagi
  4. Tarik dan gabungkan lagi
  5. Masih ketinggalan zaman
  6. Ulang

Terdengar akrab?

Apakah ini masalah aktual dengan reposisi mercurial yang sangat besar dan populer? Bagaimana dengan di dalam perusahaan ketika semua orang melakukan dorongan terakhir hari ini?

TheLQ
sumber
siapa yang tidak bercabang lincah? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers
@Carson In git cabang murah. Secara lincah mereka jauh lebih permanen. Secara umum saya pernah mendengar bahwa di git Anda bercabang untuk mengerjakan fitur, secara luring Anda membuat head baru atau mengkloning ke direktori yang berbeda.
TheLQ
baik Anda dapat menambahkan --close-branchketika melakukan - dan lincah telah menamai cabang, Anda tidak harus mengkloning ke direktori baru
Carson Myers
@Carson Saya tidak mengatakan Anda tidak bisa atau itu tidak mungkin, saya hanya mengatakan saya selalu mendengar bahwa konvensi adalah untuk mengkloning atau membuat kepala baru, bukan cabang. Kebanyakan repositori mercurial yang pernah saya lihat hanya memiliki beberapa cabang sementara repositori git cenderung memiliki banyak
TheLQ
Saya tidak yakin, saya tidak pernah menggunakan git
Carson Myers

Jawaban:

8

Sejauh yang saya ketahui sebagian besar proyek open source besar menggunakan DVCS menggunakan "permintaan tarik" alih-alih dorongan, yaitu pengguna meminta proyek menarik dari cabang mereka, dan proyek dapat memilih untuk melakukan permintaan tarik ini dalam urutan apa pun , jika sama sekali. Ini menghilangkan kebutuhan untuk "lomba push", seperti yang Anda sebutkan.

Di perusahaan lain saya tidak bisa menjamin proses, tetapi di mana saya bekerja ini bukan masalah.

Lihat, ketika Anda sedang mengerjakan case Anda sedang mengerjakan cabang dari seluruh repo, jadi permintaan push Anda menuju ke versi remote dari trunk utama. Saat Anda ingin mengintegrasikan perubahan Anda (selesai) ke dalam bagasi, Anda memuatnya, menarik, menggabungkan, mendorong.

Kadang-kadang ( sangat kadang-kadang) dua orang akan mencoba dan melakukan ini pada waktu yang sama (biasanya karena beberapa komunikasi). Dalam hal ini siapa pun yang "kalah" hanya perlu menarik kembali, menggabungkan, mendorong. Karena tidak ada jam 5 sore terburu-buru untuk melakukan repositori pusat, masalah yang Anda sebutkan tidak benar-benar ada.

Itulah keindahan DVCS: percabangan tidak menyakitkan, sehingga semua orang dapat bekerja di cabang mereka sendiri.

EDIT

Oh, saya baru saja memperhatikan komentar "Kamu tidak bercabang ...": Ya, benar. Anda tidak harus melakukannya, tetapi karena itu sangat mudah dan manfaat dari melakukannya lebih besar daripada tidak melakukannya dengan sangat, Anda memang cenderung banyak melakukan repo cabang.

Ed James
sumber
Saya selalu mendengar bahwa Anda mengkloning untuk bekerja pada fitur eksperimental, bukan cabang. Sebagian besar alasan yang saya dengar adalah bahwa di cabang lincah jauh lebih permanen daripada di Git. Namun saya bisa saja salah
TheLQ
Itulah masalahnya, sejauh menyangkut mercurial, klon adalah cabang, Anda masih dapat melakukan hampir semua yang dapat Anda lakukan dengan "kepala" standar (dan beberapa hal lagi!), Tetapi Anda memiliki kemewahan tambahan pada tarikan / dorong tingkat jarak dari bagasi. Saya tidak yakin apa yang Anda maksud tentang keabadian, ketika Anda selesai dengan klon Anda, Anda bisa menghapusnya.
Ed James
Kenapa tidak ada push rush jam 5 sore?
Cem Catikkas
Seperti yang saya katakan, sebagian besar waktu semua orang bekerja di cabang mereka sendiri (Anda sangat tidak mungkin bekerja pada masalah yang sama persis seperti orang lain), jadi sementara semua orang mendorong pada akhirnya itu ke cabang yang berbeda. Ditambah lagi, di tempat kerja saya, kami memiliki waktu yang fleksibel sehingga lebih sibuk dari jam 4 sore - 6 sore;)
Ed James
1

Tidak, tidak ada lomba dorong karena pekerjaan dilakukan di cabang topik . Master gabungan mengelola kompleksitas (relatif lebih rendah) untuk menggabungkan cabang menjadi cabang integrasi . Ini biasanya dilakukan terus menerus. Untuk info lebih lanjut tentang didistribusikan alur kerja kontrol versi, sumber pertama akan menjadi mulut kuda: man gitworkflows, online di sini . Alur kerja Mercurial memang menggunakan percabangan meskipun Anda mengklaim dan tekniknya serupa.

Rein Henrichs
sumber
OP membuat perbedaan tentang git dan hg di sini tetapi jawaban Anda ditujukan untuk git (misalnya, tautan pertama sangat berorientasi git). Ini adalah jawaban yang benar (karena interpretasi awal OP tentang percabangan dalam hg mengarah pada pertanyaan itu sendiri), tetapi perlu dicatat bahwa itu sama untuk hg.
Ed James
@ Ed Good point, diperbarui untuk memperjelas bahwa jawabannya berlaku untuk git dan lincah.
Rein Henrichs
lihat repositori git.git, ini adalah contoh yang baik dari penggabungan menggunakan DVCS. Ada banyak titik penggabungan. Mungkin ada lebih dari 10 cabang sementara pada saat yang sama sebelum akhirnya digabung menjadi cabang utama.
linquize