Dapatkan praktik terbaik dan bercabang di cabang


141

Saat ini saya sedang belajar menggunakan Git dengan membaca Pro Git . Saat ini saya sedang belajar tentang percabangan dan tag. Pertanyaan saya adalah kapan saya harus menggunakan cabang dan kapan saya harus menggunakan tag?

Misalnya, saya membuat cabang untuk versi 1.1 proyek. Ketika saya selesai dan merilis versi ini, haruskah saya meninggalkan cabang untuk menandai versi rilis? Atau haruskah saya menambahkan tag? Jika saya menambahkan tag, haruskah saya menghapus cabang versi (dengan anggapan bahwa itu digabung menjadi master atau cabang lainnya)?

Jawaban:


162

Singkatnya: Praktik terbaik adalah bercabang, sering bergabung, dan selalu sinkron .

Ada beberapa konvensi yang cukup jelas tentang menjaga kode Anda di cabang terpisah dari cabang utama:

  1. Anda akan membuat implementasi perubahan besar atau mengganggu
  2. Anda akan membuat beberapa perubahan yang mungkin tidak digunakan
  3. Anda ingin bereksperimen pada sesuatu yang Anda tidak yakin itu akan berhasil
  4. Ketika Anda disuruh keluar, orang lain mungkin memiliki sesuatu yang perlu mereka lakukan sebagai master

Aturan praktis adalah setelah bercabang, Anda harus tetap sinkron dengan cabang utama. Karena pada akhirnya Anda perlu menggabungkannya kembali menjadi master. Untuk menghindari kekacauan rumit yang rumit ketika menggabungkan kembali, Anda harus sering melakukan, sering bergabung.

Praktik yang baik untuk diikuti

Model percabangan Git yang sukses oleh Vincent Driessen memiliki saran bagus. Jika model percabangan ini menarik bagi Anda, pertimbangkan ekstensi aliran ke git . Yang lain berkomentar tentang aliran .

Praktik pemberian tag

Seperti yang sudah Anda ketahui, Git memberi Anda pengidentifikasi komit seperti 1.0-2-g1ab3183 tetapi itu bukan tag! Pemberian tag dilakukan dengan tag git, dan tag yang dibuat menggunakan tag git adalah dasar untuk pengidentifikasi komit yang dijelaskan git. Dengan kata lain, di Git Anda tidak menandai cabang. Anda menandai komitmen. Benar untuk mengatakan bahwa tag hanyalah sebuah penunjuk beranotasi untuk sebuah komit.

Mari kita lihat contoh praktis yang menunjukkannya,

                        / - [v1.0]
                       v
---. ---. --- .--- S ---.--- A <- master
                         \ 
                           \ -.--- B <- tes

Mari kita komit 'S' menjadi komit ditunjukkan oleh tag 'v1.0'. Komit ini ada di 'master' cabang dan di 'tes' cabang. Jika Anda menjalankan " git menggambarkan " di atas komit 'A' (atas cabang 'master') Anda akan mendapatkan sesuatu seperti v1.0-2-g9c116e9. Jika Anda menjalankan "git menggambarkan" di atas komit 'A' (alias cabang 'tes') Anda akan mendapatkan sesuatu seperti v1.0-2-g3f55e41, itu adalah kasus dengan konfigurasi default git-uraikan. Perhatikan bahwa hasil ini sedikit berbeda. v1.0-2-g9c116e9berarti bahwa kami sedang berkomitmen dengan id SHA-1 yang diurutkan 9c116e9, 2 komit setelah tag v1.0. Tidak ada tag v1.0-2!

Jika Anda ingin tag Anda hanya muncul di 'master' cabang, Anda dapat membuat komit baru (mis. Hanya memperbarui informasi versi default / cadangan di GIT-VERSION-FILE) setelah titik percabangan dari cabang 'test'. Jika Anda menandai komit pada cabang 'test' dengan mis. 'V1.0.3` itu akan terlihat hanya dari' test '.

Referensi

Saya telah menemukan banyak, banyak, blog dan posting yang bermanfaat untuk dipelajari. Namun, yang diilustrasikan secara profesional adalah yang langka. Jadi, saya ingin merekomendasikan post - Model percabangan Git yang sukses oleh @nvie. Saya sudah meminjam ilustrasinya :)

masukkan deskripsi gambar di sini


4
1.0-2-g1ab3183 adalah pengidentifikasi yang dibangun oleh git menjelaskan dari informasi yang tersedia dari git, tetapi menyebutnya pengenal git agak terlalu banyak. Git diidentifikasi oleh hash SHA; tag dan cabang adalah konstruksi manusia yang git membantu melacak. Karena itu, buat tag ketika Anda berpikir seseorang suatu hari nanti ingin menemukan bookmark yang nyaman untuk komit.
mabraham

2
ilustrasi indah multi-dimensi di alam semesta git. Cantik. terima kasih
Tope

Perlu dicatat bahwa banyak proyek tidak memiliki kebutuhan untuk beberapa jalur yang ditunjukkan dalam diagram ini. Beberapa proyek hanya memerlukan apa yang disebut pengembangan dan fitur di sini. Ini sering benar untuk aplikasi web yang dapat digunakan sesuka hati.
usr

37

Cabang digunakan jika Anda memiliki 2 versi repositori yang berbeda secara bersamaan. Tag adalah cara untuk menandai titik waktu di repositori Anda.

Anda harus menambahkan tag untuk menandai versi yang dirilis. Jika kemudian Anda perlu melakukan perbaikan bug untuk rilis itu, Anda akan membuat cabang di tag.

Anda hanya ingin menghapus cabang yang telah digabungkan kembali ke dalam HEAD [atau cabang lain].


3
oh ... dan saya berasumsi maksud Anda cabang itu digabung ke cabang lain, seperti master. KEPALA bergerak setiap kali saya melakukan checkout, kan?
Code-Guru

KEPALA biasanya menunjuk ke cabang (kecuali Anda berada dalam mode KEPALA terpisah), jadi KEPALA bergerak dengan cabang itu mengarah ke
LoicAG
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.