Saya terus mendengar orang mengatakan mereka mencari kode di Git. Git "fork" terdengar mencurigakan seperti Git "clone" ditambah beberapa kemauan psikologis (yang tidak berarti) untuk melupakan penggabungan di masa depan. Tidak ada perintah fork di Git, kan?
GitHub membuat garpu sedikit lebih nyata dengan menjepit korespondensi. Artinya, Anda menekan tombol garpu dan kemudian, ketika Anda menekan tombol tarik permintaan, sistem cukup pintar untuk mengirim email ke pemilik. Oleh karena itu, ini sedikit tarian di sekitar kepemilikan dan izin repositori.
Ya Tidak? Adakah kecemasan terhadap GitHub yang memperpanjang Git ke arah ini? Atau ada rumor Git menyerap fungsionalitas?
--reference
bekas. Bagaimana cara repo dan penghapusan publik ditangani sama sekali tidak jelas (pindah bergantian ke repo yang dipromosikan yang dipilih secara acak? Arahkan semua garpu ke beberapa alternatif umum yang bukan bagian dari garpu asli?) Tetapi penggunaan alternatif menjelaskan berbagai perilaku yang dapat diamati.Jawaban:
Fork , dalam konteks GitHub, tidak memperluas Git.
Ini hanya memungkinkan klon di sisi server.
Ketika Anda mengkloning repositori GitHub di workstation lokal Anda, Anda tidak dapat berkontribusi kembali ke repositori upstream kecuali jika Anda secara eksplisit dinyatakan sebagai "kontributor". Itu karena tiruan Anda adalah contoh terpisah dari proyek itu. Jika Anda ingin berkontribusi pada proyek, Anda dapat menggunakan forking untuk melakukannya, dengan cara berikut:
Periksa juga " Alur Kerja GitHub Kolaboratif ".
Jika Anda ingin menyimpan tautan dengan repositori asli (juga disebut upstream), Anda perlu menambahkan remote merujuk repositori asli itu.
Lihat " Apa perbedaan antara asal dan hulu di GitHub? "
Dan dengan Git 2.20 (Q4 2018) dan lebih banyak, mengambil dari garpu lebih efisien, dengan pulau delta .
sumber
"Forking" adalah sebuah konsep, bukan perintah yang secara khusus didukung oleh sistem kontrol versi apa pun.
Jenis forking yang paling sederhana adalah identik dengan percabangan. Setiap kali Anda membuat cabang, terlepas dari VCS Anda, Anda telah "bercabang". Garpu-garpu ini biasanya cukup mudah untuk digabungkan kembali.
Jenis garpu yang Anda bicarakan, di mana pihak yang terpisah mengambil salinan lengkap kode dan pergi, tentu saja terjadi di luar VCS dalam sistem terpusat seperti Subversion. VCS terdistribusi seperti Git memiliki dukungan yang jauh lebih baik untuk forking seluruh basis kode dan secara efektif memulai proyek baru.
Git (bukan GitHub) secara native mendukung "forking" seluruh repo (yaitu, mengkloningnya) dalam beberapa cara:
origin
dibuat untuk Andaorigin
padanannyaGit membuat kontribusi perubahan kembali ke sumber garpu semudah meminta seseorang dari proyek asli untuk menarik dari Anda, atau meminta akses tulis untuk mendorong perubahan kembali sendiri. Ini adalah bagian yang membuat GitHub lebih mudah, dan terstandarisasi.
Tidak ada kegelisahan karena anggapan Anda salah. GitHub "memperluas" fungsi forking dari Git dengan GUI yang bagus dan cara standar mengeluarkan permintaan tarik, tetapi itu tidak menambah fungsionalitas ke Git. Konsep full-repo-forking dimasukkan ke dalam kontrol versi terdistribusi pada level fundamental. Anda dapat meninggalkan GitHub kapan saja dan masih terus mendorong / menarik proyek yang telah "bercabang".
sumber
X project
di mesin saya. Jika saya membuat perubahan di lokal saya dan tidak memiliki akses tulis ke asal, saya akan mengirim email kepada penulis proyek untuk meminta penarikan. Dia akan membuat gideon bernama remote yang akan menjadi url ke klon lokal saya, dan dia bisa menarik, kan?Ya, garpu adalah tiruan. Itu muncul karena, Anda tidak dapat mendorong ke salinan orang lain tanpa izin mereka . Mereka membuat salinannya untuk Anda ( garpu ), di mana Anda juga akan memiliki izin menulis.
Di masa depan jika pemilik sebenarnya atau pengguna lain dengan garpu menyukai perubahan Anda, mereka dapat menariknya kembali ke repositori mereka sendiri. Atau Anda dapat mengirim mereka "permintaan-tarik".
sumber
fork
berarti ada salinan pekerjaan Anda di server GitHub, yang Anda bisapush
dan yang orang lain punya akses URL sehingga mereka bisapull
. Inipull request
hanyalah cara standar untuk mendapatkan URL untuk salinan Anda (di GitHub) kepada mereka sehingga mereka dapat dengan mudah menariknya ke dalam repositori mereka."Fork" dalam konteks ini berarti "Buat salinan kode mereka sehingga saya dapat menambahkan modifikasi saya sendiri". Tidak banyak lagi yang bisa dikatakan. Setiap klon pada dasarnya adalah garpu, dan tergantung pada yang asli untuk memutuskan apakah akan menarik perubahan dari garpu.
sumber
on the GitHub server
sehingga saya dapat menambahkan modifikasi saya sendiriand others can have URL access to my version
". Sebagian besar stasiun kerja lokal tidak menawarkan akses URL bagi siapa pun untuk dapat menarik. Tetapi jika Anda menekan garpu Anda di server, maka mereka dapat memiliki URL untuk menariknya.Kloning melibatkan membuat salinan repositori git ke mesin lokal, sementara forking mengkloning repositori ke repositori lain. Kloning hanya untuk penggunaan pribadi (meskipun penggabungan di masa depan mungkin terjadi), tetapi dengan forking Anda menyalin dan membuka jalur proyek baru yang mungkin
sumber
Forking dilakukan ketika Anda memutuskan untuk berkontribusi pada suatu proyek. Anda akan membuat salinan seluruh proyek bersama dengan log sejarahnya. Salinan ini dibuat seluruhnya di repositori Anda dan setelah Anda melakukan perubahan ini, Anda mengeluarkan permintaan tarik. Sekarang terserah pemilik sumber untuk menerima permintaan tarik Anda dan memasukkan perubahan ke dalam kode asli.
Git clone adalah perintah aktual yang memungkinkan pengguna untuk mendapatkan salinan sumbernya. git clone [URL] Ini harus membuat salinan [URL] di repositori lokal Anda sendiri.
sumber
Saya pikir garpu adalah salinan dari repositori lain tetapi dengan modifikasi akun Anda. misalnya, jika Anda mengkloning repositori lain secara lokal, asal objek jauh masih menggunakan akun dari siapa Anda mengkloning. Anda tidak dapat melakukan dan berkontribusi kode Anda. Ini hanya salinan kode murni. Jika tidak, Jika Anda membayar repositori, itu akan mengkloning repo dengan pembaruan pengaturan akun Anda di akun github Anda. Dan kemudian kloning repo dalam konteks akun Anda, Anda dapat melakukan kode Anda.
sumber
Ada kesalahpahaman di sini sehubungan dengan apa "garpu" itu. Garpu sebenarnya tidak lebih dari satu set cabang per-pengguna. Ketika Anda mendorong ke sebuah garpu, Anda benar-benar mendorong ke repositori asli, karena itu adalah repositori ONLY.
Anda dapat mencoba ini dengan mendorong ke suatu fork, mencatat komit dan kemudian pergi ke repositori asli dan menggunakan ID komit, Anda akan melihat bahwa komit tersebut "di" repositori asli.
Ini masuk akal, tetapi itu jauh dari jelas (saya hanya menemukan ini secara tidak sengaja baru-baru ini).
Ketika John forks repositori SuperProject apa yang tampaknya benar-benar terjadi adalah bahwa semua cabang di repositori sumber direplikasi dengan nama seperti "John.master", "John.new_gui_project", dll.
GitHub "menyembunyikan" si "John." dari kami dan memberi kami ilusi bahwa kami memiliki "salinan" sendiri dari repositori di GitHub, tetapi kami tidak dan tidak satu pun dibutuhkan.
Jadi cabang "master" cabang garpu saya sebenarnya bernama "Korporal.master", tetapi GitHub UI tidak pernah mengungkapkan ini, hanya menunjukkan kepada saya "master".
Ini cukup banyak apa yang saya pikir berjalan di bawah tenda tetap berdasarkan pada hal-hal yang telah saya lakukan baru-baru ini dan ketika Anda merenungkannya, desain yang sangat bagus.
Untuk alasan ini saya pikir akan sangat mudah bagi Microsoft untuk mengimplementasikan garpu Git dalam penawaran Layanan Tim Visual Studio mereka.
sumber
git clone
- benar repositori baru (bahkan yang "telanjang") setiap kali seseorang menekan tombol "garpu" - itu akan menjadi pemborosan penyimpanan yang luar biasa, dan kemungkinan juga vektor serangan .Terlepas dari kenyataan bahwa kloning adalah dari server ke mesin Anda dan forking membuat salinan pada server itu sendiri, perbedaan penting adalah bahwa ketika kami mengkloning, kami benar-benar mendapatkan semua cabang, label, dll.
Tetapi ketika kita bercabang, kita sebenarnya hanya mendapatkan file saat ini di cabang master, tidak lain dari itu. Ini berarti kami tidak mendapatkan cabang lain, dll.
Karenanya jika Anda harus menggabungkan sesuatu kembali ke repositori asli, itu adalah gabungan antar-repositori dan pasti akan membutuhkan hak istimewa yang lebih tinggi.
Fork bukan perintah di Git; itu hanya konsep yang diimplementasikan GitHub. Remember Git dirancang untuk bekerja di lingkungan peer-to-peer tanpa perlu menyinkronkan hal-hal dengan salinan master apa pun. Server hanyalah rekan lain, tetapi kami melihatnya sebagai salinan utama.
sumber
git branch -a
.Secara sederhana,
Ketika Anda mengatakan Anda forking -repositori, pada dasarnya Anda membuat salinan repositori asli di bawah ID GitHub Anda di akun GitHub Anda.
dan
Ketika Anda mengatakan sedang mengkloning repositori, Anda sedang membuat salinan lokal dari repositori asli di sistem Anda (PC / laptop) secara langsung tanpa memiliki salinan di akun GitHub Anda.
sumber