Menjelajahi kontrol versi menggunakan Git
Ada berbagai jenis sistem kontrol versi (VCS), tetapi umumnya dapat dikategorikan sebagai terpusat dan terdistribusi. Dalam beberapa tahun terakhir (sebagian karena semakin populernya DevOps), kategori terakhir mendapatkan popularitas yang signifikan, dengan Git menjadi standar de facto dalam pengembangan perangkat lunak modern. VCS khusus ini akan menjadi pilihan yang paling cocok untuk organisasi dalam skenario sampel kami, terutama mempertimbangkan niatnya untuk menggunakan GitHub sebagai platform target untuk transisi DevOps-nya. Dalam unit ini, jelajahi penggunaan Git sebagai kontrol versi.
Kontrol Versi Terpusat vs. Terdistribusi
Sistem kontrol versi terpusat (CVCS) dan sistem kontrol versi terdistribusi (DVCS) menawarkan kemampuan untuk mengelola dan melacak perubahan dalam proyek pengembangan perangkat lunak. Perbedaan utama di antara mereka terkait dengan cara mereka menerapkan repositori dan kolaborasi. Khususnya:
- Lokasi repositori: Dalam sistem terpusat, ada satu instans terpusat dari repositori yang berisi riwayat lengkap proyek. Dalam sistem terdistribusi, setiap anggota tim biasanya akan memiliki satu salinan lokal yang berfungsi penuh dari seluruh repositori, berpotensi termasuk riwayat versi lengkapnya.
- konektivitas Jaringan: Dalam sistem terpusat, akses ke instans terpusat repositori diperlukan untuk melakukan banyak tindakan, termasuk pembaruan dan pengambilan riwayat. Dalam sistem terdistribusi, semua aktivitas dapat dilakukan terhadap salinan lokal repositori.
- Model kolaboratif: Dalam sistem terpusat, pengembang memeriksa file dari instans terpusat repositori saat terhubung ke dalamnya melalui jaringan sebelum melakukan modifikasi dan melakukan perubahan. Ini mencegah perubahan pada file yang sedang dibuka oleh orang lain. Dalam sistem terdistribusi, pengembang membuat dan menerapkan perubahan pada salinan lokal repositori mereka, yang, di beberapa titik kemudian, disinkronkan dengan salinan lain.
- model percabangan dan penggabungan: Dalam sistem terpusat, percabangan dan penggabungan biasanya memerlukan koordinasi dengan orang lain. Dalam sistem terdistribusi, cabang dapat dibuat secara independen dalam salinan lokal dan digabungkan setelahnya.
Perlu dicatat bahwa, meskipun model terdistribusi tidak mengandalkan memiliki repositori pusat (dalam arti tradisional), biasanya menerapkan satu salinan repositori, yang dihosting oleh layanan seperti GitHub, GitLab, atau Bitbucket. Instans ini berfungsi sebagai titik fokus kolaborasi dan sinkronisasi.
Terminologi Git
Agar mahir bekerja dengan Git, penting untuk terbiasa dengan terminologinya. Beberapa konsepnya unik untuk Git, membedakannya dari DVCS lainnya. Istilah Git yang paling mendasar meliputi:
- Pohon kerja : struktur direktori yang berisi semua file proyek.
- Repositori (umumnya disebut sebagai repositori): direktori yang terletak di tingkat atas pohon kerja, menghosting semua file proyek bersama dengan riwayat versi file-file ini.
- Kloning: tindakan membuat salinan repositori jarak jauh pada komputer lokal untuk mengerjakan proyek yang dapat Anda akses.
- Fork: tindakan membuat salinan repositori jarak jauh yang dihosting GitHub untuk mengerjakan proyek yang tidak Anda akses. Fork biasanya digunakan jika Anda ingin berkontribusi pada proyek orang lain atau membuat versi proyek tersebut sendiri. Meskipun Anda tidak memiliki akses tulis ke repositori asli, Anda dapat sepenuhnya mengelola fork Anda.
- Commit: rekam jepret perubahan yang dibuat pada file di repositori pada titik waktu tertentu. Commit digunakan untuk merekam dan menyimpan perubahan.
- area Staging lokasi perantara (yang bukan bagian dari repositori) di mana perubahan pada file di pohon kerja disiapkan sebelum di-commit. Ini memungkinkan pengembang untuk memilih perubahan yang ingin mereka terapkan.
- Cabang: serangkaian komit tertaut yang diberi nama. Dalam istilah sederhana, cabang mewakili versi proyek yang berbeda. Ini memungkinkan bekerja pada berbagai bagian proyek secara bersamaan tanpa memengaruhi versi utamanya. Commit terbaru di cabang disebut head. Cabang default yang dihasilkan secara otomatis ketika Anda menginisialisasi repositori disebut utama atau master.
- Gabungkan: proses menggabungkan perubahan dari satu cabang (atau commit) ke cabang lain. Ini mengintegrasikan perubahan dari satu cabang ke cabang lainnya.
- Object: salah satu dari empat jenis entitas yang tersedia dalam repositori. Entitas ini termasuk blobs yang mewakili file individual, sebuah tree yang mewakili pohon kerja, sebuah commit yang mewakili versi tertentu dari pohon kerja, dan sebuah *tag, yang merupakan label yang ditetapkan untuk commit individu.
- Hash: pengidentifikasi panjang tetap yang dibuat secara otomatis dan unik yang mewakili konten objek. Setiap kali objek itu berubah, hash-nya juga berubah. Ini memungkinkan Git untuk menentukan konten mana dalam repositori yang telah diperbarui.
- Remote: referensi ke repositori lain (selain yang lokal), biasanya menunjuk ke instans repositori yang dihosting layanan. Ini berfungsi sebagai default untuk operasi pendorongan dan penarikan.
- Pull: tindakan yang mengambil perubahan-perubahan dari repositori jarak jauh serta menggabungkannya ke dalam cabang saat ini.
- Push: tindakan yang mengirim komit lokal ke repositori jarak jauh, memperbaruinya dengan perubahan yang dibuat secara lokal.
- Ambil: tindakan yang mengambil perubahan dari repositori jarak jauh tanpa menggabungkannya secara otomatis. Ini memungkinkan tinjauan mereka sebelum menerapkan penggabungan.
- Permintaan pull: fitur di platform hosting berbasis Git (seperti GitHub) yang memungkinkan pengembang untuk mengusulkan perubahan dan meminta mereka untuk digabungkan ke cabang target.
Git juga memiliki serangkaian perintah yang luas, yang menyediakan kemampuan untuk sepenuhnya mengimplementasikan dan mengelola kontrol versi melalui shell perintah seperti Linux Bash atau Windows Command Prompt. Atau, Anda dapat mengelola Git melalui aplikasi desktop seperti GitHub Desktop. Platform hosting berbasis Git menyediakan antarmuka web yang memfasilitasi interaksi dengan repositori sisi layanan.
Git vs. GitHub
Seperti yang dijelaskan sebelumnya, Git adalah DVCS sumber terbuka multi-platform yang memfasilitasi kolaborasi dengan menggunakan repositori lokal, yang dapat disinkronkan dengan repositori jarak jauh. GitHub adalah layanan berbasis cloud yang menyediakan platform hosting untuk repositori Git. Ini memperluas rentang kemampuan Git dengan menyertakan dukungan untuk:
- Repositori jarak jauh: memfasilitasi interaksi di antara tim terdistribusi.
- Alat kolaborasi: memberikan fitur seperti masalah, diskusi, permintaan pull, pemberitahuan, label, tindakan, fork, wiki, dan proyek.
- antarmuka berbasis Web: meminimalkan kebutuhan untuk menggunakan perintah Git
- Perlindungan cabang: memberlakukan kondisi yang harus dipenuhi sebelum penggabungan dapat terjadi (seperti, misalnya, peninjauan permintaan pull yang selesai).