Apa perbedaan antara Forking dan Cloning di GitHub?

187

Saya ingin tahu perbedaan antara melakukan Fork proyek dan melakukan cloneitu.

Bisakah saya mengirim permintaan tarik melalui GitHub jika saya telah melakukan forked proyek?

Steve Dunn
sumber
2
Kemungkinan duplikat apakah garpu git benar-benar klon git?
j08691
2
Bagi orang yang mendarat di sini mencari penjelasan "garpu" dengan Git (bukan GitHub). Tidak ada perintah "garpu" pada Git. Ini lebih merupakan konsep GitHub (bukan Git). Perbedaan yang mudah dilupakan.
ambassallo

Jawaban:

113

Pada dasarnya ya. A forkhanyalah permintaan bagi GitHub untuk mengkloning proyek dan mendaftarkannya di bawah nama pengguna Anda ; GitHub juga melacak hubungan antara dua repositori, sehingga Anda dapat memvisualisasikan komitmen dan menarik antara dua proyek (dan garpu lainnya).

Anda masih dapat meminta orang menarik dari repositori Anda yang dikloning, bahkan jika Anda tidak menggunakan fork- tetapi Anda harus berurusan dengan membuatnya tersedia untuk umum sendiri. Atau kirim tambalan pengembang (lihat git format-patch) yang dapat diterapkan ke pohon mereka.

michel-slm
sumber
4
Garpu membutuhkan lebih banyak pekerjaan untuk diperbarui daripada klon. Klon dapat diperbarui dengan sederhana git pull. Garpu mengambil banyak perintah. Dan tidak mengejutkan, hampir setiap garpu yang saya lihat sudah ketinggalan zaman. Garpu seperti masalah repositori Maven pada steroid. Alih-alih satu repo usang (Maven), ada ribuan dari mereka (Git).
jww
@jww sepertinya yang terbaik untuk tetap menggunakan clone - mengapa menggunakan garpu?
serup
@serup - alasannya adalah salinan yang bercabang dua dapat diedit git pullsehingga masih ada semacam hubungan yang ada. Jika Anda mengkloning seluruh salinannya, itu berada di komputer lokal Anda dan terputus dari repo yang asli.
JonH
134

Ketika Anda mengatakan Anda fork repositori Anda pada dasarnya menciptakan salinan repositori di bawah GitHub ID Anda. Poin utama yang perlu diperhatikan di sini adalah bahwa setiap perubahan yang dilakukan pada repositori asli akan dipantulkan kembali ke repositori bercabang Anda (Anda perlu mengambil dan membuat ulang). Namun, jika Anda membuat perubahan pada repositori bercabang Anda, Anda harus secara eksplisit membuat permintaan tarikan ke repositori asli . Jika permintaan tarik Anda disetujui oleh administrator dari repositori asli , maka perubahan Anda akan dilakukan / digabungkan dengan basis kode asli yang ada . Sampai saat itu, perubahan Anda hanya akan tercermin dalam salinan yang Anda bercabang dua .

Pendeknya:

Fork & Pull Model memungkinkan siapa pun untuk melakukan repositori yang ada dan mendorong perubahan ke garpu pribadi mereka tanpa memerlukan akses diberikan ke repositori sumber. Perubahan kemudian harus ditarik ke dalam repositori sumber oleh pengelola proyek.

Perhatikan bahwa setelah forking Anda dapat mengkloning repositori Anda (yang di bawah nama Anda) secara lokal di mesin Anda. Buat perubahan di dalamnya dan dorong ke repositori bercabang Anda. Namun, untuk mencerminkan perubahan Anda di repositori asli, permintaan tarik Anda harus disetujui.

Beberapa diskusi menarik lainnya -

Apakah garpu git sebenarnya adalah klon git?

Bagaimana cara saya memperbarui repositori bercabang GitHub?

Aniket Thakur
sumber
24
"Poin utama yang perlu diperhatikan di sini adalah bahwa setiap perubahan yang dilakukan pada repositori asli akan dipantulkan kembali ke repositori bercabang Anda." Saya pikir itu agak menyesatkan. AFAIK, perubahan yang dilakukan pada repositori asli setelah fork tidak secara otomatis tercermin dalam fork; Anda harus memindahkan perubahan itu secara manual. Perubahan yang terjadi sebelum garpu meskipun disalin ke garpu baru ketika Anda mengklik tombol garpu.
Ajedi32
"Setiap perubahan yang dilakukan pada repositori asli akan direfleksikan kembali ke repositori bercabang Anda" .. sungguh ?? Tidak secara otomatis saya harap
KansaiRobot
Saya bekerja untuk proyek klien dan menggunakan model kloning dan push untuk bekerja. Suatu hari saya bercabang dan saya segera mendapat pesan yang mengatakan apa perlunya fork repo yang lengkap. Saya benar-benar tidak mengerti bagaimana itu dianggap salah?
user3075740
perubahan yang dibuat ke repositori asli setelah garpu tidak secara otomatis tercermin dalam garpu, tetapi untuk melakukannya, periksa langkah 3 dari blog ini: - help.github.com/articles/fork-a-repo
Suhas Chikkanna
"Setiap perubahan yang dilakukan pada repositori asli akan direfleksikan kembali ke repositori bercabang Anda" - apakah maksud Anda ini tidak mungkin setelah kami mengkloning?
variabel
26
  • Proyek Forked ada di repositori online Anda (repo).
  • Proyek kloning ada di mesin lokal Anda (saya biasanya mengkloning setelah forking repo).

Anda dapat melakukan pada repo online Anda (atau melakukan pada repo lokal Anda dan kemudian mendorong ke repo online Anda), kemudian mengirim permintaan tarik.

Manajer proyek dapat menerimanya untuk mendapatkan perubahan Anda dalam versi online utamanya.

Alisa
sumber
13

Klon adalah tempat Anda memiliki duplikasi yang tepat, dan pemisahan di antara, dua (mungkin berbeda) versi repositori. Ketika satu repo diubah, konten baru harus disalin secara aktif ke repo lainnya menggunakan perintah push. Dan perubahan dalam repo lainnya diambil.

Saat Anda melakukan repo, di server, tidak perlu duplikasi konten karena kedua repo akan menggunakan konten [objek tetap] yang sama dari server yang sama. Triknya adalah dalam mengelola sudut pandang pengguna yang berbeda sehingga setiap pengguna percaya bahwa mereka memiliki salinan pribadi lengkap dari repo tersebut. Mendorong dan mengambil di antara garpu hanya memperbarui petunjuk pengguna.

Pada level yang lebih rendah, git melakukan hal yang sama secara internal. Jika Anda memiliki tiga file berbeda, masing-masing berisiHello World , maka cukup git 'garpu' salinan tunggal gumpalan Hello World dan menawarkannya di masing-masing dari tiga tempat yang diperlukan.

Kemampuan untuk bercabang di server berarti bahwa tunjangan penyimpanan besar Github tidak rata-rata besar karena setiap orang berbagi satu repo yang mendasarinya.

Philip Oakley
sumber
5

Singkatnya, Forking mungkin sama dengan "kloning di bawah ID / profil GitHub Anda". Garpu kapan saja lebih baik daripada tiruan, dengan beberapa pengecualian, jelas. Repositori bercabang selalu dipantau / dibandingkan dengan repositori asli tidak seperti repositori yang dikloning. Itu memungkinkan Anda untuk melacak perubahan, memulai permintaan tarik, dan juga secara manual menyinkronkan perubahan yang dibuat dalam repositori asli dengan yang bercabang dua.

Farhan Haque
sumber
5

Sedangkan jawaban @ AniketThakur sangat bagus. Belum ada yang menjawab pertanyaan berikut.

Bisakah saya mengirim permintaan tarik melalui GitHub jika saya telah melakukan forked proyek?

Tidak. Jika Anda adalah kontributor repositori, Anda dapat: Membuat klon lokal. Buat cabang lokal. Tambahkan komit ke cabang itu. Dorong cabang lokal kembali ke github (membuat cabang jarak jauh dalam proses). Buat permintaan tarik yang meminta cabang itu digabungkan ke cabang master (atau cabang apa pun yang Anda suka).

Theodore Norvell
sumber
3

Jika Anda melakukan apa yang diisyaratkan oleh si penanya (lupa garpu dan baru saja mengkloning repo, buat perubahan dan sekarang perlu mengeluarkan permintaan tarik) Anda bisa kembali ke jalur:

  1. garpu repo yang ingin Anda kirimi permintaan tarik
  2. dorong perubahan lokal ke remote Anda
  3. masalah permintaan tarik
Putri Ruthie
sumber
2

Perbedaan halus aneh lainnya pada GitHub adalah bahwa perubahan pada garpu tidak dihitung dalam log aktivitas Anda sampai perubahan Anda ditarik ke dalam repo asli. Terlebih lagi, untuk mengubah garpu menjadi klon yang tepat, Anda harus menghubungi dukungan Github, rupanya.

Dari Mengapa kontribusi saya tidak muncul :

Komit dibuat dalam garpu

Komitmen yang dibuat dalam garpu tidak akan dihitung terhadap kontribusi Anda. Untuk menghitungnya, Anda harus melakukan salah satu dari yang berikut:

Buka permintaan tarik agar perubahan Anda digabungkan ke dalam repositori induk. Untuk melepaskan garpu dan mengubahnya menjadi repositori mandiri di GitHub, hubungi Dukungan GitHub . Jika garpu memiliki garpu sendiri, beri tahu jika garpu harus pindah dengan repositori Anda ke jaringan baru atau tetap di jaringan saat ini. Untuk informasi lebih lanjut, lihat " Tentang garpu ."

BJennings
sumber
2

Singkatnya, "garpu" membuat salinan proyek yang dihosting di akun GitHub Anda sendiri.

"Clone" menggunakan perangkat lunak git di komputer Anda untuk mengunduh kode sumber dan seluruh riwayat versinya ada di komputer itu

Testilla
sumber