perbedaan antara garpu dan cabang di github

127

Jika saya garpu proyek yang di-host di github. Apakah saya bercabang semua cabang? Bagaimana saya tahu cabang cabang garpu mana saya? Dengan kata lain cabang mana yang akan diunduh ke PC saya?

Jonathan.
sumber
1
Penjelasan bahasa Inggris yang sederhana: Cabang adalah seperti garpu yang berasal dari garpu induk. Garpu seperti cabang yang tidak memiliki cabang induk.
Ken Kin

Jawaban:

41

Semua cabang di GitHub akan disalin dalam garpu. (Jelas, ini tidak termasuk cabang yang tidak pernah didorong ke GitHub.)

Tetapi garpu adalah operasi GitHub-to-GitHub; tidak ada yang disalin ke PC Anda. Itu tidak persis sama dengan klon Git . Jika Anda bermaksud bertanya "apa yang disalin ketika saya mengkloning suatu proyek?", Lihat manual untuk git-clone(1).

JC Salomon
sumber
153

Pikirkan seperti ini:

Repo [sitory] berhubungan dengan kerja sama tim dalam satu atau banyak cabang. Semua kontributor memiliki salinannya sendiri.

Setiap garpu repo utama sesuai dengan karya kontributor. Garpu sebenarnya adalah konstruksi Github (bukan Git) untuk menyimpan klon repo di akun pengguna Anda. Sebagai klon, itu akan berisi semua cabang di repo utama pada saat Anda membuat garpu.

Setiap cabang dalam garpu dan / atau dalam repo utama dapat berhubungan dengan beberapa hal, tergantung pada bagaimana Anda ingin bekerja. Setiap cabang dapat merujuk ke versi proyek tetapi juga dapat sesuai dengan saluran pengembangan yang berbeda, seperti perbaikan terbaru atau pekerjaan eksperimental.

The permintaan tarik (dalam ekosistem GitHub) sesuai dengan tugas. Setiap kali saya ingin berkontribusi tugas jadi yang terisolasi ke repo utama, saya membuat permintaan tarik yang sesuai dengan komitmen yang dibuat dalam tugas itu. Komit ini ditarik baik dari saya garpu atau saya cabang ke repo utama .

Sebuah komit adalah seperangkat perubahan pada kode. Ini adalah salah satu hal paling menarik tentang Git. Anda tidak mentransfer file, Anda mentransfer log perubahan.

Adam Grant
sumber
4
menyukai bagaimana Anda menjelaskan semua bit terkait yang relevan seperti pemetaan permintaan tarik ke fork / branch. "Anda tidak mentransfer file, Anda mentransfer log perubahan" ... saya sudah tahu itu tetapi frasa ini sempurna!
harshvchawla
2
ditambah satu untuk memperjelas bahwa garpu adalah github, bukan git. Terima kasih!
emery.noel
10

Fork adalah tiruan dari sisi GitHub (ia mengkloning segalanya).
Ketika Anda mengkloning repo, Anda mendapatkan semua sejarah repo tersebut, dengan semua cabangnya.

Walaupun secara teori Anda dapat mengubah cabang default repo jarak jauh , klon dari repo GitHub terutama mencari cabang master. Berarti untuk mengubah cabang "default" yang akan diperoleh klon GitHub, Anda perlu mengganti nama cabang master.

VONC
sumber
Jadi ketika saya mengkloning repo bercabang dua (unduh secara efektif ke PC saya), apakah semua cabangnya ada di PC saya? Namun dalam satu cabang file tambahan telah ditambahkan. Jadi apakah PC saya punya file-file itu atau tidak?
Jonathan.
1
@ Jonathan: PC Anda akan mendapatkan semua cabang dengan semua file. Tetapi direktori kerja Anda (ruang tempat Anda checkout salah satu cabang itu) sebenarnya satu-satunya ruang di mana Anda akan melihat file-file itu.
VonC
BEGITU dimana file-file lain akan disimpan di folder .git?
Jonathan.
@Jonathan: sebagai objek yang longgar atau penuh, lihat book.git-scm.com/7_how_git_stores_objects.html (objek menjadi gumpalan ("file" Anda), pohon, komit atau tag: book.git-scm.com/ 1_the_git_object_model.html )
VonC
4

Jika Anda bercabang sebuah proyek, Anda membuat salinan seluruh proyek ke akun git hub Anda. Anda tidak mengatasi apa pun pada PC Anda

Untuk membuat salinan di PC Anda, Anda harus mengkloning dan menarik semua barang dan Anda akan mendapatkan semua cabang & kode proyek itu

Berburu
sumber
2

Jika Anda membuat garpu proyek dari situs web Github, Anda mendapatkan semua cabang dari proyek hulu.

Jika Anda mengkloning dari garpu yang baru dicetak ke PC lokal Anda, Anda akan memiliki originremote pada PC Anda menunjuk ke cabang utama dari garpu Anda di Github.

Bhamby
sumber
Menurut halaman Help.GitHub Forking sebuah proyek , membuat upstreamcabang adalah sesuatu yang harus Anda lakukan; dan mereka memberi tahu Anda cara melakukannya.
JC Salomon
2
Itu remote, bukan cabang.
Arrowmaster
1

Ini bisa dijelaskan dengan sangat baik. Anda memiliki repositori pusat di GitHub. Setiap kali Anda mengambil klon di komputer pribadi Anda untuk melakukan beberapa perubahan, klon lokal dari repositori utama ini disebut garpu.

Cabang adalah sesuatu yang berbeda dan termasuk dalam garpu / repo. Sebenarnya cabang adalah pekerjaan Anda di tahap perkembangan yang berbeda. Mereka dibuat ketika dan ketika diminta untuk menyimpan serangkaian fungsi, untuk memberikan akses ke pengguna yang berbeda, untuk menunjukkan situs kepada klien, dll.

Avinash Thombre
sumber
1

Saya ingin membagikan contoh kehidupan nyata ketika kita menggunakan Cabang dan ketika kita menggunakan Garpu

Kami memiliki GitLab di toko kami dan terkadang kami harus mengerjakan paket dari proyek Laravel. Kami biasanya membuat cabang dan mendorong perubahan ke cabang yang kami uji di lingkungan VM dev lokal kami ketika bekerja dengan proyek Laravel yang sebenarnya.

Katakanlah proyek kami berlokasi di

https://github.com/yardpenalty/mainproject.git

Penggunaan cabang:

Katakanlah cabang itu dipanggil It_doesnt_matter

Setelah kami memiliki cabang kami seperti yang kami inginkan untuk produksi kami kemudian membuat dorongan terakhir kami ke cabang ini dan membuat permintaan penggabungan yang kemudian masuk ke UAT untuk pengujian. Setelah pengujian melewati QC, perubahan digabung menjadi produksi.

The gabungan dari It_doesnt_matter cabang sekarang didorong ke proyek induk

di https://github.com/yardpenalty/mainproject.git

Katakanlah proyek paket berada di

https://github.com/yardpenalty/mypackage.git

Ingatlah bahwa proyek utama menggunakan paket ini dalam produksi sehingga kami tidak dapat melakukan perubahan hanya dengan mendorongnya ke paket ini (di antara alasan lain). Katakanlah pengembang web harus mengedit paket ini untuk membuat perubahan pada produksi.

Cabang sederhana tidak akan berfungsi baik karena kami tidak dapat melihat perubahan kami tanpa menerbitkan paket dll.

Penggunaan Fork: Sekarang adalah ketika kita harus melakukan sedikit tipu daya dengan paket kami sehingga kami membuat klon dari paket produksi melalui garpu. File composer.json dapat diperbarui untuk menunjuk ke garpu yang sekarang terletak di jalur Pengguna atau Grup

Jadi kami akan membuat garpu di https://github.com/yardpenalty/mypackage.git

dan menyebutnya https://github.com/yardpenalty/yards/mypackage.git

Sekarang kita dapat memperbarui file composer.json kita untuk menunjuk ke paket ini di "repositori" kita: [array seperti itu dan kita pergi!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

yardpenalty.com
sumber