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
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.
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)
Untuk menginstal git, diperlukan perintah brew
. Kamu dapat menginstal Homebrew di sini.
- Unduh dan instal git
- Buat sebuah akun di GitHub
- Unduh dan instal GitHub CLI
- Buka terminal (cmd, Windows Terminal, Terminal, atau sejenis)
- 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
- 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:
- Membuat suatu folder menjadi git repository
- 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
.
- Windows
- Linux/macOS
PS C:\Users\User> cd C:\lokasi\ke\proyek
PS C:\lokasi\ke\proyek> git init
$ cd /home/user/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
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)
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.
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.
- Buat sebuah folder, lalu
cd
ke folder tersebut di command line - Lakukan init repository dengan perintah
git init
- Buat file bernama
README.md
yang berisikan "Halo git!" - Tambahkan file tersebut ke tracking git dengan perintah
git add README.md
- Ganti nama file tersebut menjadi
README
- Commit perubahan kamu dengan perintah
git commit -m "Membuat README"
- Cek status yang ada di git dengan perintah
git status
(Ingat pula nama branchnya!) - Ubah tracking git dari file
README
menggunakan perintahgit rm README.md
dangit add README
- Buat commit baru dengan perintah
git commit -m "Mengganti nama README"
- Buat sebuah repository di GitHub dengan nama bebas (kamu tidak perlu mengganti setting apapun)
- Simpan link repository yang ada di bagian atas halaman
- Buat remote baru bernama
origin
dengan link yang kamu simpan.git remote add origin <LINK>
- 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:
- Mengunduh perubahan terbaru
- Melakukan tracking untuk semua file/folder yang berubah
- Membuat pesan commit
- Mengirim perubahan