Jadi, sebenarnya apa yang dimaksud dengan Git? Ini adalah bagian penting
untuk dipahami, karena jika anda memahami apa itu Git dan cara
kerjanya, maka dapat dipastikan anda dapat menggunakan Git secara
efektif dengan mudah. Selama mempelajari Git, cobalah untuk melupakan
VCS lain yang mungkin telah anda kenal sebelumnya, misalnya Subversion
dan Perforce. Git sangat berbeda dengan sistem-sistem tersebut dalam hal
menyimpan dan memperlakukan informasi yang digunakan, walaupun
antar-muka penggunanya hampir mirip. Dengan memahami perbedaan tersebut
diharapkan dapat membantu anda menghindari kebingungan saat menggunakan
Git.
Salah satu perbedaan yang mencolok antar Git dengan VCS lainnya
(Subversion dan kawan-kawan) adalah dalam cara Git memperlakukan
datanya. Secara konseptual, kebanyakan sistem lain menyimpan informasi
sebagai sebuah daftar perubahan berkas. Sistem seperti ini (CVS,
Subversion, Bazaar, dan yang lainnya) memperlakukan informasi yang
disimpannya sebagai sekumpulan berkas dan perubahan yang terjadi pada
berkas-berkas tersebut, sebagaimana yang diperlihatkan pada Gambar dibawah
Sistem lain menyimpan data perubahan terhadap versi awal setiap berkas.
Git tidak bekerja seperti ini. Melainkan, Git memperlakukan datanya
sebagai sebuah kumpulan snapshot dari sebuah miniatur sistem berkas.
Setiap kali anda melakukan commit, atau melakukan perubahan pada proyek
Git anda, pada dasarnya Git merekam gambaran keadaan berkas-berkas anda
pada saat itu dan menyimpan referensi untuk gambaran tersebut. Agar
efisien, jika berkas tidak mengalami perubahan, Git tidak akan menyimpan
berkas tersebut melainkan hanya pada file yang sama yang sebelumnya
telah disimpan. Git memperlakukan datanya seperti terlihat pada Gambar dibawah
Ini adalah sebuah perbedaan penting antara Git dengan hampir semua VCS
lain. Hal ini membuat Git mempertimbangkan kembali hampir setiap aspek
dari version control yang oleh kebanyakan sistem lainnya disalin dari
generasi sebelumnya. Ini membuat Git lebih seperti sebuah miniatur
sistem berkas dengan beberapa tool yang luar biasa ampuh yang dibangun
di atasnya, ketimbang sekadar sebuah VCS. Kita akan mempelajari beberapa
manfaat yang anda dapatkan dengan memikirkan data anda dengan cara ini
ketika kita membahas "Git branching"
Hampir Semua Operasi Dilakukan Secara Lokal
Kebanyakan operasi pada Git hanya membutuhkan berkas-berkas dan
resource lokal – tidak ada informasi yang dibutuhkan dari komputer lain
pada jaringan anda. Jika Anda terbiasa dengan VCS terpusat dimana
kebanyakan operasi memiliki overhead latensi jaringan, aspek Git satu
ini akan membuat anda berpikir bahwa para dewa kecepatan telah
memberkati Git dengan kekuatan. Karena anda memiliki seluruh sejarah
dari proyek di lokal disk anda, dengan kebanyakan operasi yang tampak
hampir seketika.
Sebagai contoh, untuk melihat history dari proyek, Git tidak
membutuhkan data histori dari server untuk kemudian menampilkannya untuk
anda, namun secara sedarhana Git membaca historinya langsung dari
basisdata lokal proyek tersebut. Ini berarti anda melihat histori proyek
hampir secara instant. Jika anda ingin membandingkan perubahan pada
sebuah berkas antara versi saat ini dengan versi sebulan yang lalu, Git
dapat mencari berkas yang sama pada sebulan yang lalu dan melakukan
pembandingan perubahan secara lokal, bukan dengan cara meminta remote
server melakukannya atau meminta server mengirimkan berkas versi yang
lebih lama kemudian membandingkannya secara lokal.
Hal ini berarti bahwa sangat sedikit yang tidak bisa anda kerjakan
jika anda sedang offline atau berada diluar VPN. Jika anda sedang berada
dalam pesawat terbang atau sebuah kereta dan ingin melakukan pekerjaan
kecil, anda dapat melakukan commit sampai anda memperoleh koneksi
internet hingga anda dapat menguploadnya. Jika anda pulang ke rumah dan
VPN client anda tidak bekerja dengan benar, anda tetap dapat bekerja.
Pada kebanyakan sistem lainnya, melakukan hal ini cukup sulit atau
bahkan tidak mungkin sama sekali. Pada Perforce misalnya, anda tidak
dapat berbuat banyak ketika anda tidak terhubung dengan server; pada
Subversion dan CVS, anda dapat mengubah berkas, tapi anda tidak dapat
melakukan commit pada basisdata anda (karena anda tidak terhubung dengan
basisdata). Hal ini mungkin saja bukanlah masalah yang besar, namun
anda akan terkejut dengan perbedaan besar yang disebabkannya.
Git Memiliki Integritas
Segala sesuatu pada Git akan melalui proses checksum terlebih dahulu
sebelum disimpan yang kemudian direferensikan oleh hasil checksum
tersebut. Hal ini berarti tidak mungkin melakukan perubahan terhadap
berkas manapun tanpa diketahui oleh Git. Fungsionalitas ini dimiliki
oleh Git pada level terendahnya dan ini merupakan bagian tak terpisahkan
dari filosofi Git. Anda tidak akan kehilangan informasi atau
mendapatkan file yang cacat tanpa diketahui oleh Git.
Mekanisme checksum yang digunakan oleh Git adalah SHA-1 hash. Ini
merupakan sebuah susunan string yang terdiri dari 40 karakter
heksadesimal (0 hingga 9 dan a hingga f) dan dihitung berdasarkan isi
dari sebuah berkas atau struktur direktori pada Git. sebuah hash SHA-1
berupa seperti berikut:
24b9da6552252987aa493b52f8696cd6d3b00373
Anda akan melihat nilai seperti ini pada berbagai tempat di Git.
Faktanya, Git tidak menyimpan nama berkas pada basisdatanya, melainkan
nilai hash dari isi berkas.
Secara Umum Git Hanya Menambahkan Data
Ketika anda melakukan operasi pada Git, kebanyakan dari operasi
tersebut hanya menambahkan data pada basisdata Git. It is very difficult
to get the system to do anything that is not undoable or to make it
erase data in any way. Seperti pada berbagai VCS, anda dapat kehilangan
atau mengacaukan perubahan yang belum di-commit; namun jika anda
melakukan commit pada Git, akan sangat sulit kehilanngannya, terutama
jika anda secara teratur melakukan push basisdata anda pada repositori
lain.
Hal ini menjadikan Git menyenangkan karena kita dapat berexperimen
tanpa kehawatiran untuk mengacaukan proyek. Untuk lebih jelas dan dalam
lagi tentang bagaimana Git menyimpan datanya dan bagaimana anda dapat
mengembalikan yang hilang, lihat "Under the Covers"
3 Keadaan dalam Git
Sekarang perhatikan. Ini adalah hal utama yang harus diingat tentang
Git jika anda ingin proses belajar anda berjalan lancar. Git memiliki 3
keadaan utama dimana berkas anda dapat berada: committed, modified dan
staged. Committed berarti data telah tersimpan secara aman pada
basisdata lokal. Modified berarti anda telah melakukan perubahan pada
berkas namun anda belum melakukan commit pada basisdata. Staged berarti
anda telah menandai berkas yang telah diubah pada versi yang sedang
berlangsung untuk kemudian dilakukan commit.
Ini membawa kita ke tiga bagian utama dari sebuah projek Git: direktori Git, direktori kerja, dan staging area.
|
Direktori kerja, staging area, dan direktori git. |
Direktori Git adalah dimana Git menyimpan metadata dan database objek
untuk projek anda. Ini adalah bahagian terpenting dari Git, dan inilah
yang disalin ketika anda melakukan kloning sebuah repository dari
komputer lain.
Direktori kerja adalah sebuah checkout tunggal dari satu versi dari
projek. Berkas-berkas ini kemudian ditarik keluar dari basisdata yang
terkompresi dalam direktori Git dan disimpan pada disk untuk anda
gunakan atau modifikasi.
Staging area adalah sebuah berkas sederhana, umumnya berada dalam
direktori Git anda, yang menyimpan informasi mengenai apa yang menjadi
commit selanjutnya. Ini terkadang disebut sebagai index, tetapi semakin
menjadi standard untuk menyebutnya sebagai staging area.
Alur kerja dasar Git adalah seperti ini:
- Anda mengubah berkas dalam direktori kerja anda.
- Anda membawa berkas ke stage, menambahkan snapshotnya ke staging area.
- Anda melakukan commit, yang mengambil berkas seperti yang ada di
staging area dan menyimpan snapshotnya secara permanen ke direktori Git
anda.
Jika sebuah versi tertentu dari sebuah berkas telah ada di direktori
git, ia dianggap 'committed'. Jika berkas diubah (modified) tetapi sudah
ditambahkan ke staging area, maka itu adalah 'staged'. Dan jika berkas
telah diubah sejak terakhir dilakukan checked out tetapi belum
ditambahkan ke staging area maka itu adalah 'modified'.
Tutorial diatas saya dapatkan dari
https://git-scm.com.
Jika anda masih belum paham mengenai git anda dapat bertanya pada kolom komentar.