Apa itu Git (Version Control System)? Berikut Definisi Git, Manfaat Git, dan Perintah-Perintah Git.

April 15, 2020

Apa itu Git?

Secara sederhana Git merupakan sesuatu yang disebut Version Control System (VCS). Penjelasan panjangnya akan dibahas di bawah nanti. Sebelum masuk ke definisi Git maka perlu dibahas dulu tentang VCS. Lalu apa itu VCS atau Version Control System?

Version Control System

Menurut wikipedia Version Control System atau biasa disebut juga revision control system atau source code management adalah sistem yang mengelola perubahan dari sebuah dokumen, program komputer, website dan kumpulan informasi lain. Setiap terjadi perubahan biasanya diidentifikasikan bisa dalam berupa kode numerik ataupun serangkaian karakter yang diistilahkan sebagai "nomor revisi" atau sederhananya disebut "revisi".
Kenapa dibuat VCS?

Ada beberapa problem yang sering muncul ketika membuat program atau aplikasi. Pasti pernah atau bahkan sering mengalami yang namanya problem. Contohnya problem mengenai versi.

Jadi, misalnya seorang mahasiswa ingin mengerjakan skripsi atau tugas akhir, mungkin di awal mengerjakan skripsi mahasiswa tersebut membuat satu file yang bernama SKRIPSI.docx, seiring berjalan waktu mahasiswa tersebut melakukan bimbingan ke dosen pembimbing. Setelah bimbingan skripsinya tersebut direvisi. Nanti laporan file SKRIPSI.docx berubah menjadi SRIPSI-revisi1.docx terus si mahasiswa melakukan bimbingan lagi dan laporannya berubah lagi. File setelah bimbingan kedua berubah menjadi SKRIPSI-revisi2.docx begitu seterusnya, bahkan kalau sudah semakin banyak bimbingan maka laporannya juga semakin banyak, bisa SKRIPSI-revisi3.docx, SKRIPSI-revisi4.docx, dst sampai si mahasiswa tersebut di acc oleh dosen pembimbing, laporannya berubah nama jadi SKRIPSI-FINAL-BISMILLAH-SIDANG.docx. Contoh seperti itu.

Hal tersebut adalah cara manual untuk mengelola versi dari sebuah file. Mengelolanya masih ribet. Pasti sudah sering banget melakukan hal tersebut entah ke dokumen atau source code atau memindahkan file ke folder-folder yang berbeda di komputer.

Itulah problem pertama, masih kesulitan untuk mengelola file versi atau mengelola revisi dari sebuah file. Maka dari itu VCS ini sangat membantu dalam hal merevisi, dengan adanya VCS ini hal manual tersebut tidak akan terjadi lagi karena pengelolaannya dilakukan dengan baik dan otomatis oleh VCS ini.


Lalu apa problem berikutnya? Problem ini lebih spesifik dari sebelumnya.

Contoh, mau bikin aplikasi atau ngoding membuat website, membuat front-endnya sendiri, back-endnya sendiri, databasenya sendiri. Hal tersebut tidak menjadi masalah ketika melakukannya semua sendirian.

Namun, bagaimana jika membuatnya secara team? Misal, di sekolah atau kampus mengerjakan tugas membuat website secara kelompok. Kelompok tersebut terdapat team front-end, misal 2 orang yang mengerjakan khusus bagian front-end atau tampilan saja, lalu team back-end 2 orang yang mengerjakan khusus back-endnya atau logika aplikasinya saja, lalu ada juga 1 orang yang mengerjakan database. Misalnya, bisa juga setiap orang mengerjakan satu website namun setiap orang mengerjakan fitur-fitur yang berbeda dari website tersebut. Kalau aplikasinya mau jadi, atau sudah selesai, semua file dari setiap orang harus dikumpulkan dan dijadikan satu dulu. Kalau tanpa VCS akan sangat ribet. Nah, proses penggabungan atau proses pengerjaan secara bersama ini disebut kolaborasi. Kalau tanpa VCS berarti harus menggabungkan semua file tersebut secara manual. Sedangkan dengan menggunakan VCS ini, bisa dengan mudah melakukan kolaborasi dengan orang lain.

Itulah 2 problem utama kenapa dibuat VCS.

Sebenarnya ada aplikasi lain yang konsepnya sama dengan VCS ini untuk mengatasi 2 problem tadi, contohnya dropbox dan google drive. Lalu apa bedanya VCS dengan aplikasi seperti dropbox dan google drive/google docs? Kalau di google docs layanannya bisa mengerjakan file excel untuk dua orang atau lebih, yang satu ngedit baris, yang satu lagi menulis formula atau ngedit baris yang lain, misalnya. Memang aplikasi seperti google docs bisa mengatasi 2 problem tadi, tapi tidak sefleksibel ketika menggunakan VCS yang khusus untuk source code atau ngoding, karena dua aplikasi seperti dropbox dan google docs dibuat bukan untuk mengerjakan source code. Jadi, itulah bedanya. Tidak akan nyaman mengerjakan source code di google docs, kurang tepat kalau mengerjakannya di situ.

Manfaat mengenai Version Control System (Git):

  • Sebuah sistem yang menyimpan ‘rekaman/snapshot’ perubahan source code.
  • Sehingga tidak perlu mengganti manual, misal copy-paste terus ganti namanya manual.
  • Memungkinkan bekerja berkolaborasi dengan lebih baik.
  • Bekerja secara team jadi lebih mudah dan enak, jadi nanti VCS ini bisa tau siapa yang mengubah, apa yang diubah, dan kapan yang diubah ketika membuat aplikasi atau menuliskan source code. Bagian apa yang ditambahkan, diedit ataupun yang dihapus.
  • Terdapat informasi versi revisi sebuah file.
  • Seperti yang sudah dijelaskan sebelumnya, sistem ini bisa mengetahui siapa yang melakukan dan kapan sebuah perubahan terjadi.
  • Memungkinkan untuk kembali ke keadaan sebelum perubahan terjadi. (checkout)
  • Jadi misal sudah melakukan beberapa perubahan namun setelah melakukan perubahan itu merasa tidak cocok atau kurang tepat, misalnya fitur aplikasinya kurang bagus, file bisa balik lagi ke versi sebelumnya dengan mudah, namanya dengan fitur checkout.
Itulah manfaat dari Version Control System. Sebenarnya Git merupakan salah satu contoh Version Control System. Ada contoh aplikasi lain untuk Version Control System selain Git, ada yang namanya subversion, mercurial, CVS, dll.

Sekarang penjelasan mengenai Git.

Lalu, apa itu Git? Apa sebenarnya definisi Git?

Kalau dari penjelasan saya sebelumnya di atas, seharusnya kalian sudah bisa menyimpulkan apa itu Git. Langsung saja ini penjelasannya.
Git adalah sebuah VCS terdistribusi untuk mengelola perubahan file dalam folder.
Kalau menurut wikipedia, Git adalah perangkat lunak pengendali versi atau proyek manajemen kode perangkat lunak yang diciptakan oleh Linus Torvalds, yang pada awalnya ditujukan untuk pengembangan kernel Linux.

REPO dan COMMIT

Jadi Git bisa dibilang juga sebuah software untuk mengelola perubahan file di dalam folder.
Folder ini kalau di software Git namanya berubah menjadi sebagai repository/repo.
Repository/repo merupakan penyebutan folder software Git sebagai tempat penyimpanan file.
Misalkan membuat folder di htdocs. Ingin membuat website dari Laravel atau CodeIgniter, pasti dikasih nama folder baru di htdocs. Di Git ini menyebutkan bukan folder lagi tapi repository/repo. Nanti Git akan menyimpan serangkaian perubahan atau history perubahannya dengan menggunakan sesuatu yang namanya commit.
Commit merupakan perintah yang digunakan untuk merekam riwayat perubahan file ketika akan disimpan. Sebelum melakukan commit, harus memberikan commit message atau pesan yang jelas untuk mengetahui apa yang sudah dilakukan.
Jadi kalau melakukan perubahan biasanya hanya save saja tekan ctrl+s selesai, kalau dengan Git tidak hanya men-save tapi juga harus melakukan commit. Misal fitur apa yang ditambahkan, atau fitur apa yang diubah, menghapus baris apa, hal ini disebut commit. Jadi commit ini merekam satu buah snapshot atau rekaman perubahan yang dilakukan.

BRANCH dan MERGE

Ketika bekerja secara team atau berkolaborasi, dan ingin membuat fitur baru misalnya, tapi masih ragu fitur tersebut nanti bagaimana. Branch ini bisa melakukan perubahan tanpa mengganggu source code utama atau commit utama. Contohnya tidak ingin file SKRIPSI.docx utama berubah, tetapi ingin diedit, pasti biasanya melakukan duplikat file, lalu file duplikat tersebut diedit. Nah di Git, history perubahan atau snapshot perubahannya bisa dikontrol juga ketika mengubah file duplikat tersebut.

Git terdapat fitur yang namanya cabang/branch. Branch ini berguna ketika ingin mencoba-coba dengan source code yang sama seperti utama tetapi tanpa mengganggu commit utama yang dilakukan. Ketika coba buat ternyata fitur yang dibuat tidak cocok, branch tersebut bisa dibuang atau tidak dipakai dan commit utama tidak akan berubah. Apabila fitur yang coba dibuat cocok dan tepat, filenya bisa digabungkan dengan commit utama atau source code utama. Hal ini dinamakan dengan merge.
Branch adalah duplikat dari commit utama dan melakukan perubahan tanpa mengubah commit utama, commit yang dilakukan hanya disimpan di branch, branch juga bisa digabungkan dengan commit utama cara ini disebut merge.

Berikut ini gambaran Branch dan Merge, di mana titik-titik biru merupakan commit.



Software Git ini melakukan kontrol versi di komputer sendiri atau lokal. Bedanya dengan Github, kalau Github itu “Git”nya di cloud atau online. Github merupakan sebuah website yang melayani layanan Git. Ada contoh website lainnya yaitu Gitlab dan Bitbucket.

Github, Gitlab dan Bitbucket merupakan layanan cloud untuk menyimpan dan mengelola project Git.



“Jadi Git ini bisa diinstall tanpa Github?” Ya, benar. Begitupun sebaliknya. Kalau install dua-duanya bagaimana? Jawabannya juga bisa. Kalau diinstall dua-duanya, malah akan ada manfaat lainnya, yaitu push dan pull.

PUSH dan PULL

Push ini sebenarnya adalah sama saja dengan melakukan commit namun ia dikirimkan ke cloud. Sedangkan Pull adalah mengambil repository yang ada di cloud (remote). Ada syarat sebelum menggunakan Push dan Pull. Sebelumnya harus membuat dulu remote (sumber dari repo yang ingin dibuat) setelah membuat repo di remote lalu repo tersebut diclone ke komputer sendiri (lokal). Jika seseorang membuat branch baru dan ingin melakukan penggabungan ke source code utama maka ia akan melakukan pull request (kalau di Gitlab namanya merge request).




Layanan cloud git ini sangat bermanfaat ketika berkolaborasi membuat sebuah project. Jadi tidak akan ada masalah mengelola file versi ketika bekerja berbarengan.

Perintah-perintah Dasar Git

1. Memberitahukan Git
Mengatur nama author dan email yang akan digunakan untuk commits.
git config --global user.name "KSL UR"
git config --global user.email ksl@contoh.com


2. Membuat Repository Lokal Baru
git init

3. Menghubungkan ke Remote Repository
Jika belum menghubungkan repository lokal ke remote server. Tambahkan server agar dapat mengepushnya
git remote add origin
Menampilkan daftar semua remote repository yang dikonfigutasi saat ini
git remote -v

4. Update dari Remote Repository
Untuk mengambil dan menggabungkan perubahan pada remote server ke direktori kerja
git pull
Untuk menggabungkan branch yang berbeda ke branch yang sedang aktif
git merge
Untuk melihat semua konflik penggabungan
git diff
Untuk melihat konflik terhadap file base
git diff --base
Untuk melihat pratinjau prubahan sebelum menggabungkan
git diff
Untuk menandai file yang diubah setelah kita menyelesaikan konflik secara manual
git add

5. Menambah File
Menambahkan satu atau lebih file ke index
git add
git add *

6. Perintah Commit
Commit perubahan to head
git commit -m "Commit message"
Commit file apapun yang telah ditambahkan dengan git add, dan juga commit file apapun yang telah diubah saat itu
git commit -a

7. Push
Mengirim perubahan ke master branch dari repository remote
git push origin master

8. Status
Menampilkan daftar file yang telah kita ubah dan melihat file apa yang perlu ditambahkan atau di commit
git status

9. Memeriksa Repository
Membuat salian kerja dari repository lokal
git clone /path/to/repository
untuk yang menggunakan remote server bisa menggunakan perintah berikut
git clone username@host:/path/to/repository

10. Branch
Membuat sebuah branch baru dan switch ke branch baru itu
git checkout -b
Berganti dari satu branch ke branch lain
git checkout
Menampilkan semua daftar branch pada repository dan juga menampilkan branch saat ini
git branch
Menghapus feature branch
git branch -d
Push branch ke remote repository kita agar yang lain bisa menggunakannya
git push origin
Push semua branch ke remote repository
git push --all origin
Menghapus sebuah branch pada remote repository:
git push origin :

11. Tags
Kita dapat memberikan tag untuk menandai perubahan yang signifikan
git tag 1.0.0
CommitId adalah karakter utama dari Changeset ID, untuk mendapatkan ID-nya bisa menggunakan perintah berikut
git log
untuk push semua tag ke remote repository
git push --tags origin

12. Undo Perubahan Lokal
Jika kita membuat kesalah kita dapat mengganti perubahan pada working tree dengan konten terakhir sebelum terjadi kesalahan.
git checkout --
Sebagai gantinya, untuk membuang semua perubahan dan commit lokal kita, kita ambil riwayat terbaru dari server dana arahkan branch lokal kita padanya.
git fetch origin
git reset --hard origin/master

13. Pencarian
Contoh perintah untuk mencari working directory foo()
git grep "foo()"


Sekian saja dulu tulisan ini, untuk selanjutnya mungkin saya akan buatkan artikel tentang langkah-langkah melakukan perintah Git atau tutorial lainnya.

Semoga bermanfaat.



Referensi:
Youtube Web Programming Unpas
https://ksl-ur.or.id/p/perintah-dasar-git