Git Basic

Git as Version Control

        Dalam mengerjakan tak jarang kita membuat revisi tetapi kita tidak mau merubah file sebelumnya alhasil kita membuat replikasi file yang sama dengan nama yang berbeda, hal ini sungguh sangat merepotkan jika kita lupa perbedaan antara satu versi dengan versi lainnya. Seiring berjalannya waktu munculah version control untuk mengatasi masalah ini. Version control adalah suatu sistem yang merekam perubahan file dari waktu ke waktu, kita bisa melihat perubahan yang kita lakukan sebelumnya dengan mudah. Version control sebenarnya ada 3 jenis yaitu: 

        1. Local version control

Local version control adalah version control yang berjalan hanya pada local komputer. jadi setiap kali melakukan perubahan akan hanya terekam untuk local komputer saja, ini bukan jadi masalah kalau hanya melakukan pengembangan aplikasi/tugas seorang diri. Jika butuh kolaborasi maka akan sulit harus replikasi secara manual dengan kolabolatornya.

        2. Centralized version control

Berbeda dengan Local Version Control, Centralized lebih mengacu pada penyimpanan riwayat pada server terpusat. Jadi ketika dibutuhkan kolaborasi, kolaborator tinggal mengambil dari server terpusat tersebut. Pendekatan ini sangat berpaku pada server pusat jadi setiap kali server itu down/punya masalah kita tidak bisa melihat riwayat atau melakukan perubahan. Contoh dari centralized version control adalah Subversion.

        3. Distributed version control

Pada distributed version control, tidak hanya terpaku pada server terpusat karena riwayat yang diambil bukan hanya yang terakhir tetapi seluruh riwayat yang ada. Hal ini memungkinkan kita melakukan melakukan perubahan tanpa harus terhubung dengan server terpusat. Contoh dari Distributed version control adalah Git, Mercurial. dll.

Contoh dari version control adalah Mercurial, Subversion, CVS, RCS, Git. 

        Git awalnya tercipta karena kesulitan pada pengembangan linux oleh Linus Torvald dan teman-temanya pada 1991-2002, tetapi jika setiap kali kontribusi baru terhadap pengembangan linux mereka harus archived file secara manual dan mengirimnya. Sebenarnya mereka sudah memakai version control bernama BitKeeper karena hubungan antara mereka kurang baik Linus Torvald membuat Version Control sendiri bernama Git, hingga akhirnya Git sebagai aplikasi open source pertama kali diperkenalkan tahun 2005 dan sekarang menjadi version control yang paling banyak dipakai. Menurut survey yang dilakukan stackoverflow tentang version control yang dipakai didapati sebanyak 93% memakai Git.

Jika anda belum pernah menginstall Git, bisa untuk menginstalnya pada https://git-scm.com/downloads sesuai dengan arsitektur dan operating system komputer masing-masing. Lalu bagaimana alur workflow dari Git ini? Git menerapkan 3 states hingga akhirnya perubahan disimpan secara permanen.

        1. Working Directory

Working Directory adalah tempat Git menandai perubahan yang ada terjadi pada file. Perubahan yang dimaksud adalah penambahan, penghapusan, edit file.

        2. Staging Area/Index

Staging area adalah section dimana file sudah disiapkan untuk disimpan secara permanen nantinya, staging area akan menyimpan perubahan file.

        3. Repository

Repository adalah tempat dimana semua file dan database riwayat versi file disimpan. Terdapat 2 jenis repository yaitu local repository dan remote repository, pembahasan tentang local dan remote akan dibahas ketika praktik nanti.

Jadi setiap kali mau menyimpan perubahan di local repository harus melewati ketiga state tersebut. Misal ada 10 perubahan yang tercatat pada working directory jika hanya ingin menyiapkan 6 file untuk disimpan secara permanen itu bisa saja.

Jika sudah menginstal Git, untuk mengecek apakah sudah terinstall atau belum dengan command “Git version -v”

Notes:

Versi dari git mungkin berbeda tergantung pada waktu anda menginstall installer-nya. per 9 Oktober 2023 versi dari git adalah 2.41.0

Lalu kita akan melakukan konfigurasi awal pada git dengan mensetting username dan email kita dengan command “git config –global user.name <Nama>” dan “git config –global user.email <email> ”, jika nama kalian lebih dari satu kata bisa menggunakan petik dua untuk awal dan akhir nama kalian. email yang kalian pakai adalah email yang kalian pakai untuk registrasi Github.

Untuk mengecek apakah config user.name dan user.email sudah benar dengan “git config –list –show-origin ”

config optional:

  • Git config –global core.editor “code –wait”

command itu digunakan supaya dalam menggunakan teks editor visual studio code sebagai default code editor dan akan menunggu sampai editor itu ditutup baru bisa melanjutkan command di terminal.

  • git config –global diff.tool “default-difftool”

command itu digunakan untuk melakukan konfigurasi diff tool.

  • git config –global difftool.default-difftool.cmd “code –wait –diff  \$LOCAL \$REMOTE” 

command itu digunakan untuk menentukan perintah yang akan digunakan oleh alat pembanding “default-difftool.” dan akan menggunakan visual studio code untuk membandingkan versi local dan remote.

Jika sudah melakukan konfigurasi, lalu bagaimana cara membuat local repository? cara membuat local repository adalah dengan menginisialisasikan dalam suatu folder menggunakan command “git init”.

jika sudah melakukan inisialisasi maka akan ke bentuk file .git

sebagai contoh workflow git, akan ditambahkan file test1.txt dengan isinya yaitu “ini test1.txt”

untuk melihat kita ada di stages mana, gunakan perintah “git status”, didapati kalau kita masih ada di working directory

Kalau test1 mau di track perubahannya bisa memindahkannya ke staging area dengan “git add test1.txt”

kalau mau memasukan perubahan file ke local repository dengan menggunakan command “git commit -m “initial test1.txt”, menggunakan -m untuk menjelaskan message dari commit ini apa.

Untuk mengecek apakah sudah benar-benar masuk ke dalam local repository dengan menggunakan “git log” akan didapati hash value dari hasil commit “initial test1.txt”. Setiap commit selesai akan mempunyai data hash value, author dan date. Hash value terbentuk bukan hanya dari perubahan file tetapi juga dari author, parent dan message, dengan menggunakan algoritma hashing SHA-1 dengan mempertimbangkan parameter perubahan file, author, parent dan message maka terbentuklah hash value tersebut. Hash pada commit ini digunakan untuk menentukan integritas data. Maksudnya setiap kali melakukan commit akan merujuk juga pada hash commitan sebelumnya. Jika diilustrasikan akan seperti ini

Jika dipaksa rubah perubahan file/author/parent/message akan merusak hash value dan akan rusak.

 

Referensi:

Jonathan & Johanes