Skip to main content

4. Git

Informasi Umum

  • Penulis: rorre
  • Semester: 2
  • Mata kuliah yang relevan:
    • Dasar-Dasar Pemrograman 2
    • Pemprograman Berbasis Platform
    • Basis Data
    • Sistem Operasi
    • Pemrograman Lanjut
    • Mata kuliah lain yang memerlukan tugas kelompok

Git

Version Control System (VCS)

Version Control System adalah program-program yang digunakan untuk mendeteksi perubahan dari source code. Tidak hanya itu, VCS juga digunakan untuk kolaborasi. VCS mendeteksi perubahan dari folder dan isinya dengan snapshot-snapshot yang tersimpan, di mana setiap snapshot menyimpan kondisi folder/file yang ada. Tidak hanya itu, setiap snapshot juga memiliki metadata yang berisi kapan snapshot itu dibuat, pesan yang terkait, dan lain-lain.

VCS berguna tidak hanya untuk mengakomodasi kolaborasi, namun juga dapat membantu melakukan perubahan yang terkait dengan snapshot, seperti mengembalikan kondisi source code ke suatu snapshot.

Terdapat berbagai macam program VCS, seperti svn, Mercurial, dan git. Namun, git merupakan VCS yang paling populer digunakan.

Konsep Git

xkcd 1597: Git

Seperti yang dapat dilihat dalam komik xkcd tersebut, git memiliki konsep yang sangat keren, namun memiliki interface yang tidak ramah bagi kebanyakan pengguna (terutama pemula). Untuk itu, materi ini akan memberikan informasi mengenai konsep-konsep yang ada di git, sehingga kamu diharapkan agar lebih mudah mengerti interface yang ada.

info

Banyak informasi di sini yang disimplifikasi, meskipun tidak merepresentasikan apa yang dilakukan git secara akurat, informasi yang diberikan diharapkan tetap memberi gambaran besar mengenai konsep-konsep yang ada di git.

Repository

Suatu repository adalah tempat penyimpanan virtual yang menyimpan segala hal mengenai proyek yang dibuat. Konsep yang dimiliki mirip seperti folder, namun suatu repository dapat menyimpan snapshot-snapshot dari perubahan yang dilakukan, serta metadata yang diikuti.

Repository dapat berada di lokal dan juga remote. Repository lokal adalah repository yang berada di dalam komputer kamu, sedangkan repository remote adalah repository yang berada di service git yang ada di internet, seperti GitHub atau Gitlab.

Branch

Seperti dengan namanya, suatu branch adalah "cabang" dari repository tersebut. Artinya, suatu repository dapat memiliki versi-versi yang berbeda. Branch membantu dalam mengorganisasikan pekerjaan dengan melakukan pekerjaan tersebut di tempat yang berbeda tanpa menyentuh versi utamanya. Suatu branch juga dapat "menimpa" perubahan-perubahan dari branch lain, sehingga perubahan yang ada di branch lain dapat juga dimasukkan ke dalam branch yang sedang dipakai.

Setiap repository pasti memiliki satu branch, secara default, branch awal yaitu main (atau master).

Sebagai contoh, kamu sedang membuat website bersama teman-temanmu. Kamu ingin membuat suatu fitur, sehingga kamu membuat branch baru agar orang lain tidak terganggu dengan perubahan-perubahan kamu. Setelah selesai, kamu "menimpa" branch kamu ke branch utama, sehingga fitur kamu dirilis.

Commit

Commit adalah snapshot dari suatu perubahan yang terjadi di suatu branch. Commit tidak hanya menyimpan snapshot dari file yang berubah, namun juga metadata yang terkait dengan commit tersebut, seperti siapa yang membuat commit tersebut, kapan waktu commit tersebut dibuat, dan lain-lain.

Pada sistem git, suatu commit terkait dengan commit-commit lainnya, sehingga sistem yang digunakan git adalah "relasi dari commit". Hal ini membuat git menjadi fleksibel untuk melakukan kolaborasi dengan banyak branch, hingga melakukan undo dari suatu commit.

Instalasi Git (+ GitHub)

Setup tambahan untuk pengguna macOS

Untuk menginstal git, diperlukan perintah brew. Kamu dapat menginstal Homebrew di sini.

  1. Unduh dan instal git
  2. Buat sebuah akun di GitHub
  3. Unduh dan instal GitHub CLI
  4. Buka terminal (cmd, Windows Terminal, Terminal, atau sejenis)
  5. Set up configurasi git menggunakan perintah berikut: (ganti apapun yang disekitari <>)
$ git config --global user.name "<NAMA_KAMU>"
$ git config --global user.email "<EMAIL_KAMU>"
$ git config pull.ff true
  1. Set up git dan GitHub dengan perintah gh auth login dan ikuti instruksinya
$ gh auth login
? What account do you want to log into? Pilih [GitHub.com]
? What is your preferred protocol for Git operations? Pilih [HTTPS]
? Authenticate Git with your GitHub credentials? Pilih [Yes]
? How would you like to authenticate GitHub CLI? Pilih [Login with a web browser]

! First copy your one-time code: [Kode 8 karakter, catat]
Press Enter to open github.com in your browser... [Tekan enter, lalu isi dengan kode di atas]

Menggunakan Git

Setelah kamu mengenal konsep-konsep penting git, kamu akan mempelajari bagaimana cara menggunakan git secara langsung. Karena banyak sekali perintah yang ada di git, tidak semua perintah akan dipelajari dalam materi ini. Materi ini hanya akan menginformasikan kamu perintah-perintah dasar yang selalu dipakai dalam pengoperasian git.

Jika kamu ingin mempelajari lebih lanjut, kamu bisa membaca Pro Git Book.

Repository

Inisialisasi

Dalam git, kamu dapat menginisialisasikan suatu repository git dengan dua cara:

  1. Membuat suatu folder menjadi git repository
  2. Melakukan clone suatu repository dari tempat lain (seperti internet)
Inisialisasi Folder

Apabila kamu ingin mengubah suatu folder menjadi suatu repository git, seperti membuat baru, maka kamu harus memindahkan command line kamu ke folder proyek tersebut. Lalu melakukan init di folder tersebut dengan git init.

Perintah yang dilakukan adalah seperti berikut:
PS C:\Users\User> cd C:\lokasi\ke\proyek
PS C:\lokasi\ke\proyek> git init

Ini akan membuat suatu folder bernama .git di dalam folder tersebut. Folder ini digunakan git untuk melakukan kepengurusan repository kamu. Jangan hapus folder ini. Jika kamu menghapus folder ini, sama saja kamu menghapus hubungan git dengan folder tersebut.

Clone Repository

Apabila kamu ingin mengunduh dan melakukan inisialisasi repository yang ada di tempat lain (seperti GitHub), kamu bisa mendapatkan link atau path ke repository git tersebut, dan menggunakan perintah git clone seperti berikut:

$ git clone git@github.com:kambi-ng/missing-semester.git
# atau
$ git clone https://github.com/kambi-ng/missing-semester.git

Kamu juga bisa memberi argumen lokasi di mana repository akan disimpan. Jika tidak ada argumen tersebut, maka nama repository akan digunakan sebagai path tujuan. Dalam kasus ini, akan dibuat folder baru bernama missing-semester yang berisi repository git dari website ini.

Commit

Untuk membuat suatu commit, kamu harus memberi tahu git file atau folder apa saja yang ingin kamu update. Kamu bisa melakukan hal ini dengan perintah git add. Kamu juga bisa menambahkan semua yang ada di dalam repository dengan flag -A.

$ git add README.md
$ git add main.py
$ git add foo/
$ git add -A
tip

Kamu bisa melihat status dari repository kamu (file apa saja yang sudah di-stage, apa yang belum, dan lain-lain) dengan menggunakan perintah git status.

$ git status
On branch main
Your branch is up-to-date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)

README

nothing added to commit but untracked files present (use "git add" to track)
danger

Apabila kamu memindahkan/rename suatu file/folder, kamu harus memberi tahu git untuk menghapus file/folder tersebut untuk didelete juga di git menggunakan perintah git rm.

Contoh saat melakukan rename file README.md menjadi README:

$ mv README.md README
$ git rm README.md
$ git add README

Setelah itu, kamu bisa menggunakan perintah git commit -m "pesan commit" (ubah pesan commit sesuai dengan perubahan yang kamu lakukan) untuk melakukan commit. Kamu juga bisa menghapus semua argumen, ini akan memunculkan editor kamu untuk melakukan edit pesan. Tidak disarankan apabila kamu tidak pernah menggunakan editor berbasis command line seperti vim atau nano.

Push dan Pull

Setelah kamu melakukan perubahan dan menyimpan perubahan tersebut ke dalam repository git, kamu mungkin ingin menyimpan repository tersebut di tempat lain, seperti GitHub. Untuk itu, kamu harus melakukan setting remote terlebih dahulu, agar git tahu tujuan penyimpanannya.

tip

Apabila kamu mendapatkan repository menggunakan clone, maka kamu tidak perlu melakukan setting remote.

Untuk melihat remote-remote yang sudah ada, kamu bisa menggunakan perintah git remove -v.

$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)

Untuk menambahkan remote, kamu dapat menggunakan perintah git remote add <nama> <link>. Pada umumnya, kamu akan menggunakan nama origin untuk repository yang ada di internet.

$ git remote add origin https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/paulboone/ticgit (fetch)
origin https://github.com/paulboone/ticgit (push)

Setelah kamu melakukan set remote, kamu bisa menggunakan perintah git push <nama_remote> <branch> untuk meng-upload perubahan ke remote repository, dan git pull untuk menarik perubahan dari remote repository.

$ git push origin main
$ git pull

Tutorial

Untuk mempertajam pemahaman, kamu dapat melakukan tutorial ini menggunakan akun GitHub kamu.

  1. Buat sebuah folder, lalu cd ke folder tersebut di command line
  2. Lakukan init repository dengan perintah git init
  3. Buat file bernama README.md yang berisikan "Halo git!"
  4. Tambahkan file tersebut ke tracking git dengan perintah git add README.md
  5. Ganti nama file tersebut menjadi README
  6. Commit perubahan kamu dengan perintah git commit -m "Membuat README"
  7. Cek status yang ada di git dengan perintah git status (Ingat pula nama branchnya!)
  8. Ubah tracking git dari file README menggunakan perintah git rm README.md dan git add README
  9. Buat commit baru dengan perintah git commit -m "Mengganti nama README"
  10. Buat sebuah repository di GitHub dengan nama bebas (kamu tidak perlu mengganti setting apapun)
  11. Simpan link repository yang ada di bagian atas halaman
  12. Buat remote baru bernama origin dengan link yang kamu simpan. git remote add origin <LINK>
  13. Push ke git menggunakan perintah git push -u origin <branch>

Branching

Mengganti

Untuk mengganti atau membuat sebuah branch baru, kamu dapat menggunakan perintah git checkout <branch>. Apabila branch tersebut tidak ada, kamu harus memberikan flag -b sebelum argumen nama branch. Sebagai contoh, kamu ingin membuat ke branch chat untuk mengembangkan fitur chat, kamu dapat menggunakan perintah berikut:

$ git checkout -b chat

Setelah pembuatan branch awal, jika kamu ingin mengganti branch ke chat lagi, kamu cukup menggunakan perintah berikut:

$ git checkout chat

Setelah kamu merubah branch, semua commit yang akan dibuat akan disimpan dalam branch ini.

Merge

Anggap kamu sudah selesai dalam mengembangkan fitur chat dan sudah siap untuk dirilis yang berada di branch main. Untuk melakukan itu, kamu akan melakukan merge branch chat menuju branch main. Kamu hanya perlu mengubah branch kamu ke branch yang dituju dan menjalankan perintah git merge seperti berikut:

$ git checkout main
$ git merge chat

Setelah melakukan merge, semua commit dan perubahan yang ada di branch chat akan tersedia juga di branch main. Berikut visualisasi yang dapat membantu pemahaman kamu mengenai branch dan merge:

4 Mantra Git: Pull, Add, Commit, Push

Karena penggunaan git yang sangat repetitif, terdapat "mantra" yang dicetuskan oleh bapak Drs. Rahmat Mustafa Samik-Ibrahim, M.Kom. dalam mata kuliah Sistem Operasi yang berisi perintah-perintah yang harus dilakukan dalam mengoperasikan git. Perintah-perintah tersebut adalah:

$ git pull
$ git add -A
$ git commit -m "PESAN"
$ git push

Pada umumnya, mantra ini akan:

  1. Mengunduh perubahan terbaru
  2. Melakukan tracking untuk semua file/folder yang berubah
  3. Membuat pesan commit
  4. Mengirim perubahan

Resources