Mahir
1. Github Workflow: Cara Berkontribusi di Proyek Open Source
2. Menggunakan Git pada Visual Studio Code (Lebih praktis!)
3. Cara Upload File ke Server FTP ala Git
4. Cara Menggunakan SSH di Github
5. Cara Membuat Halaman Github Kurang dari 10 Menit
6. Cara Menggunakan SSH untuk Bitbucket
7. Cara Membuat Halaman Github untuk Repositori
Bonus:
Git adalah salah satu tool yang sering digunakan dalam proyek pengembangan
software.
Git bahkan menjadi tool yang wajib dipahami oleh programmer, karena banyak
digunakan di mana-mana.
Artikel ini hanya akan membahas pengenalan Git saja. Untuk mempelajari Git lebih
lanjut, saya sudah menyediakan link di bagian akhir.
Mengenal Git
Git adalah salah satu sistem pengontrol versi (Version Control System) pada proyek
perangkat lunak yang diciptakan oleh Linus Torvalds.
Pengontrol versi bertugas mencatat setiap perubahan pada file proyek yang
dikerjakan oleh banyak orang maupun sendiri.
Git dikenal juga dengan distributed revision control (VCS terdistribusi), artinya
penyimpanan database Git tidak hanya berada dalam satu tempat saja.
Semua orang yang terlibat dalam pengkodean proyek akan menyimpan database Git,
sehingga akan memudahkan dalam mengelola proyek baik online maupun offline.
Sedangkan pada VCS (Version Control System) yang terpusat… database disimpan
dalam satu tempat dan setiap perubahan disimpan ke sana.
VCS terpusat memiliki beberapa kekurangan:
Karena itu, Git hadir untuk menutupi kerkurangan yang dimiliki oleh VCS terpusat.
Apa perbedaannya?
Saat kita ingin menyimpan semua perubahan pada file, biasanya kita membuat file
baru dengan “save as”. Lalu, file akan menumpuk dalam direktori proyek seperti
pada ilustrasi di atas.
Git hanya akan menyimpan delta perubahannya saja, dia tidak akan menyimpan
seluruh isi file yang akan memakan banyak memori.
Jadi selain untuk mengontrol versi, git juga digunakan untuk kolaborasi.
Saat ini Git menjadi salah satu tool terpopuler yang digunakan pada pengembangan
software open souce maupun closed source.
Jadi, buat kamu yang punya impian ingin bekerja di sana, maka kamu harus bisa Git.
Selain itu, berikut ini ada beberapa menfaat yang akan kamu rasakan setelah bisa
menggunakan Git.
#Git
Kita sudah mengenal Git pada tulisan sebelumnya. Selanjutnya Kita akan melakukan
instalasi dan persiapan untuk mulai belajar Git.
git --version
Pada komputer saya, versi yang terinstal adalah versi 2.7.4.
Tapi dalam ritual tersebut, ada pilihan yang harus diperhatikan agar
perintah git dapat dikenali di CMD.
Download Git
Silahkan buka website resminya Git ( git-scm.com). Kemudian unduh Git sesuai
dengan arsitektur komputer kita. Kalau menggunakan 64bit, unduh yang 64bit.
Begitu juga kalau menggunakan 32bit.
Selanjutnya konversi line ending. Biarkan saja seperti ini, kemudian klik Next >.
Selanjutnya pemilihan emulator terminal. Pilih saja yang bawah, kemudian klik Next
>.
Selamat, Git sudah terinstal di Windows. Untuk mencobanya, silahkan buka CMD
atau PowerShell, kemudian ketik perintah git --version.
3. Konfigurasi Awal yang Harus Dilakukan
Ada beberapa konfigurasi yang harus dupersiapakan sebelum mulai menggunakan
Git, seperti name dan email.
Apa Selanjutnya?
Bagus, kita sudah mempersiapkan semuanya. Selanjutnya kita bisa langsung
belajar membuat repositori git.
Tutorial Git #3: Simpan Perubahan
Revisi dengan Git Commit
#Git
Pada tutorial Git yang kedua, kita sudah membuat repositori kosong. Belum ada apa-
apa di sana.
Setalah ditambahkan, coba ketik perintah git status untuk melihat status
repositorinya.
Berdasarkan keterangan di atas, saat ini kita berada cabang (branch) master dan ada
tiga file yang belum ditambahkan ke Git.
1. Modified
Modified adalah kondisi dimana revisi atau perubahan sudah dilakukan, tetapi
belum ditandai dan belum disimpan di version control. Contohnya pada gambar di
atas, ada tiga file HTML yang dalam kondisi modified.
2. Staged
Staged adalah kondisi dimana revisi sudah ditandai, tetapi belum disimpan
di version control. Untuk mengubah kondisi file dari modified ke staged gunakan
perintah git add nama_file. Contoh:
git add .
Setelah itu, cobalah ketik perintah git status lagi. Kondisi filenya sekarang akan
menjadi staged.
Setelah itu, ubah kondisi file tersebut ke commited agar semua perubahan disimpan
oleh Git.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Belajar Git - Project 01</title>
</head>
<body>
<p>Hello Semua, Saya sedang belajar Git</p>
</body>
</html>
Setelah itu ketik lagi perintah git status.
Sekarang Git sudah mencatat dua revisi yang sudah kita lakukan. Kita bisa ibaratkan
revisi-revisi ini sebagai checkpoint pada Game. Apabila nanti ada kesalahan, kita bisa
kembali ke checkpoint ini.
Tutorial Git #4: Melihat Catatan Log
Revisi
#Git
Pada tutorial sebelumnya, kita sudah membuat dua revisi pada repositori project-
01. Sekarang bagaimana caranya kita melihat catatan log dari revisi-reivisi tersebut?
Git sudah menyediakan perintah git log untuk melihat catatan log perubahan pada
respositori. Contoh penggunaannya:
git log
Maka kita akan melihat log perubahan apa saja yang sudah dilakukan dalam
repositori.
Pada gambar di atas, terdapat dua revisi perubahan yang telah dilakuan.
commit cf08ca0837cf26f1c595be36bb3a6b815e311be1
Author: Ardianta Pargo <ardianta_pargo@yahoo.co.id>
Date: Mon Feb 13 18:08:56 2017 +0800
commit pertama
commit 06f735af7724558164c87f6b1ce3ca7778eb1c1b
Author: Ardianta Pargo <ardianta_pargo@yahoo.co.id>
Date: Mon Feb 13 18:26:50 2017 +0800
ditambahkan isi
commit cf08ca0837cf26f1c595be36bb3a6b815e311be1
Author: Ardianta Pargo <ardianta_pargo@yahoo.co.id>
Date: Mon Feb 13 18:08:56 2017 +0800
commit pertama
Karena file index.html sudah direvisi sebanyak dua kali.
Penutup
Itulah beberapa cara melihat log revisi pada repositori. Perintah yang digunakan
adalah git log. Selanjutnya kita akan pelajari perintah git diff untuk melihat
perbandingan pada revisi.
Tutorial Git #5: Melihat Perbandingan
Revisi dengan Git Diff
#Git
Pada tutorial sebelumnya, kita sudah belajar cara melihat log revisi di repositori.
Sekarang kita kan peljari perintah git diff, fungsinya untuk melihat perbedaan
perubahan di revisi.
Lihatlah hasil di atas, simbol plus (+) artinya kode yang ditambahkan. Sedangkan
kalau ada kode yang dihapus simbolnya akan menggunakan minus (-).
Contoh:
Ditambahkan:
Sebelum diubah:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Belajar Git - Project 01</title>
</head>
<body>
<p>Hello Semua, Saya sedang belajar Git</p>
</body>
</html>
Setelah diubah:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Belajar Git - Project 01</title>
</head>
<body>
<p>Hello Dunia!, Saya sedang belajar Git</p>
</body>
</html>
Setelah itu lakukan jalankan perintah git diff lagi.
Apa yang dilakukan git diff? Perintah git diff akan membandingkan perubahan
yang baru saja dilakukan dengan revisi/commit terakhir.
Penutup
Kita sudah pelajari fungsi dari perintah git diff. Perintah ini untuk melihat
perbandingan perubahan apa saja yang telah dilakukan pada repositori. Selanjutnya,
kita akan belajar membatalkan revisi.
Tutorial Git #6: Perintah untuk
Membatalkan Revisi
#Git
Pada tutorial git 05, kita sudah belajar cara melihat perbedaan di setiap revisi.
Sekarang kita akan belajar, cara membatalkan sebuah revisi.
Terkadang pada perubahan yang kita lakukan terjadi kesalahan dan kita ingin
mengembalikannya seperti keadaan sebelumnya. Maka kita perlu menyuruh git
untuk megembalikannya. Ada beberapa perintah yang digunakan diantaranya: git
checkout, git reset, dan git revert.
Membatalkan Perubahan
Jika revisi kita belum staged ataupun committed, kita bisa mengembalikannya
menggunakan perintah git checkout nama_file.html.
Contoh: Misalkan kita akan merubah isi dari file index.html pada
repositori project-01.
Sebelum diubah:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Belajar Git - Project 01</title>
</head>
<body>
<p>Hello Dunia!, Saya sedang belajar Git</p>
</body>
</html>
Setelah diubah:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Belajar Git - Project 01</title>
</head>
<body>
<p>Hello Dunia!, Saya sudah belajar Git</p>
<p>Belajar git ternyata cukup menyenangkan</p>
</body>
</html>
Hasil git diff:
$ git diff
diff --git a/index.html b/index.html
index c5082e6..115efcb 100644
--- a/index.html
+++ b/index.html
@@ -5,6 +5,7 @@
<title>Belajar Git - Project 01</title>
</head>
<body>
- <p>Hello Dunia!, Saya sedang belajar Git</p>
+ <p>Hello Dunia!, Saya sudah belajar Git</p>
+ <p>Belajar git ternyata cukup menyenangkan</p>
</body>
</html>
Sekarang kita akan membatalkan perubahan tersebut. Karena kita belum
melakukan stage dan commit, maka kita bisa menggnakan perintah:
$ git status
On branch master
nothing to commit, working directory clean
Hati-hati! Terkadang perintah ini sangat berbahaya, karena akan menghapus
perubahan yang baru saja dilakukan.
Bila kita sudah merubah banyak hal, maka itu akan sia-sia setelah menjalankan
perintah ini.
Sebagai contoh, kita lakukan perubahan lagi di file index.html seperti pada contoh
sebelumnya.
$ git diff
diff --git a/index.html b/index.html
index c5082e6..c99aa5b 100644
--- a/index.html
+++ b/index.html
@@ -5,6 +5,7 @@
<title>Belajar Git - Project 01</title>
</head>
<body>
- <p>Hello Dunia!, Saya sedang belajar Git</p>
+ <p>Hello Dunia!, Saya sudah belajar Git</p>
+ <p>Belajar git ternyata gampang-gampang susah</p>
</body>
</html>
Setelah itu, kita ubah kondisi file menjadi staged dengan perintah:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: index.html
Nah, file index.html sudah masuk ke dalam kondisi staged. Untuk mengubahnya
menjadi kondisi modified, kita bisa menggunakan perintah git reset.
git reset index.html
Cek statusnya lagi:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
Sekarang file index.html sudah dalam kondisi modified, kita bisa membatalkan
perubahannya dengan perintah git checkout seperti contoh sebelumnya.
$ git diff
diff --git a/index.html b/index.html
index c5082e6..3c150a8 100644
--- a/index.html
+++ b/index.html
@@ -5,6 +5,7 @@
<title>Belajar Git - Project 01</title>
</head>
<body>
- <p>Hello Dunia!, Saya sedang belajar Git</p>
+ <p>Hello Dunia!, Saya sudah belajar Git</p>
+ <p>Belajar Git Greget!</p>
</body>
</html>
Kemudian kita melakukan commit.
Apabila kita ingin mengembalikan seluruh file dalam commit, kita cukup
melakukan checkout ke nomer commit saja, tanpa diikuti nama file. Contoh:
#Git
Bayangkan anda sedang bekerja dengan tim pada suatu repositori Git. Repositori ini
dikerjakan secara bersama-sama.
Kadang… akan terjadi konflik, karena kode yang kita tulis berbeda dengan yang lain.
Lalu mereka melakukan commit, dan kode sumber jadi berantakan. Anggota tim
yang lain menjadi pusing.
Agar tidak terjadi hal yang seperti ini, kita harus membuat
cabang (branch) tersendiri.
Misalnya, si A akan mengerjakan fitur X, maka dia harus membuat cabang sendiri. Si
A akan bebas melakukan apapun di cabangnya tanpa menggangu cabang
utama (master).
Contoh:
Untuk melihat cabang apa saja yang ada di repositori, gunakan perintah git branch.
Contoh:
$ git branch
halaman_login
* master
Tanda bintang (*) artinya cabang yang sedang aktif atau Kita sedang berada di sana.
Latihan
Untuk memantapkan pemahaman tentang percabangan Git, mari kita coba praktik.
Tips: Jangan lupa untuk menggunakan printah git status untuk melihat status
repositori.
Kita sudah menambahkan file login.html. Selanjutnya kita lakukan commit.
project-01/
├── index.html
└── login.html
Ternyata ada. Yep! kita bisa mengambil kesimpulan, kalau perubahan pada
cabang halaman_login tidak akan berpengaruh di cabang master.
Menggabungkan Cabang
Anggaplah kita sudah selesai membuat fitur login di cabang halaman_login.
Sekarang kita ingin Menggabungkannya denga cabang master (utama).
Mengatasi Bentrok
Bentrok biasanya terjadi jika ada dua orang yang mengedit file yang sama.
Bisa jadi, di cabang yang mereka kerjakan ada file yang sama dengan cabang lain.
Kemudian, saat digabungkan terjadi bentrok.
Mengatasi bentrok adalah tugas dari pemilik atau pengelola repostiri. Dia harus
bertindak adil, kode mana yang harus diambil.
$ git diff
diff --git a/login.html b/login.html
index 23a3f5c..eea5658 100644
--- a/login.html
+++ b/login.html
@@ -1 +1 @@
-di sini berisi kode untuk halaman login
+<p>di sini berisi kode untuk halaman login<p>
Setelah itu, lakukan commit lagi:
Menghapus Cabang
Cabang yang sudah mati atau tidak ada pengembangan lagi, sebaiknya dihapus.
Cara menghapus cabang, gunakan perintah git branch dengan argumen -d dan
diikuti dengan nama cabangnya.
Contoh:
Pada tutorial ke-6, kita sudah mebahas cara membatalkan revisi menggunakan
perintah git checkout, git reset, dan git revert.
Sekilas, tiga perintah tersebut melakukan hal yang sama. Akan tetapi ada
perbedaanya.
Apa itu?
Git Checkout
Perintah git checkout seperti mesin waktu, kita bisa kembalikan kondisi file proyek
seperti waktu yang dituju.
Misalnya:
Kita bisa sebut perintah git checkout sebagai perintah untuk mengecek kondisi file
di setiap commit.
Tips: Untuk kembali dari masa lalu gunakan perintah: git checkout master
Selain itu juga, perintah ini digunakan untuk berpindah dan membuat cabang. Ini
bisa kita gunakan untuk membuat perubahan baru berdasarkan kode di masa lalu.
Contoh:
Misalnya kita ingin membuat cabang baru berdasarkan kondisi kode di masa lalu,
maka kita bisa menggunakan perintah:
Git Reset
Perintah git reset sering disebut sebagai perintah berbahaya yang dapat
menghancurkan catatan sejarah perubahan.
Hati-hati! Perintah ini membuat kita tidak bisa kembali lagi ke masa depan. Mau
tidak mau, kita harus menulis ulang sejarah.
Perintah ini memiliki tiga argumen atau opsi utama, yaitu --soft, --mixed, dan --
hard.
Contoh penggunaan:
Coba periksa catatan perubahan dengan perintah git log, pasti ada yang hilang dan
kita tidak akan bisa kembali lagi ke masa depan. Ini seperti melakukan Re:Zero .
Hati-hati! Jangan lakukan git reset pada repositori yang sudah di bagikan ke publik,
karena dapat merusaknya.
Git Revert
Revert artinya mengembalikan. Perintah ini lebih aman daripada git reset, karena
tidak akan menghapus catatan sejarah revisi.
Revert akan akan mengambil kondisi file yang ada di masa lalu, kemudian
menggabungkannya dengan commit terakhir.
Masih belum paham?
Sebelumnya, berikut ini adalah kondisi repositori yang dijadikan bahan percobaan.
Ada empat commit di sana, kemudian kita ingin melakukan revert ke commit ke-2.
Terjadi error, karena ada file yang bentrok.
Nah, sekarang kita sudah punya lima catatan revisi/commit di dalam repositori.
Kesimpulan
• Perintah git checkout mengembalikan file dalam kondisi sebelumnya, tapi
bersifat sementara.
• Perintah git reset, akan mengembalikan file ke kondisi sebelumnya,
kemudian menghapus catatan sejarah commit beikutnya.
• Perintah git revert mengembalikan file dengan tidak menghapus sejarah
commit.
Kira-kira seperti itulah perbedaan perintah git checkout, git reset, dan git
revert.
Referensi:
• http://stackoverflow.com/a/4114122
• https://www.atlassian.com/git/tutorials/undoing-changes
Tutorial Git #9: Bekerja dengan Remote
Repositori
#Git
Pada proyek pengembangan software yang melibatkan banyak orang (tim), kita
tidak hanya akan menyimpan sendiri repository proyeknya.
Semua tim yang terlibat dalam pengkodean (coding) akan menyimpan repository
lokal di komputernya masing-masing.
Biasanya akan ada repository pusat atau untuk menyimpan source code yang sudah
digabungkan (merge) dari beberapa orang.
Bisa di server kantor atau bisa juga menggunakan layanan seperti Github, Gitlab,
Bitbucket, dll.
Github adalah layanan yang paling populer untuk menyimpan (hosting) repository
secara remote. Banyak proyek open source tersimpan di sana.
Kita akan menggunakan Github pada tutorial ini, pastikan kamu sudah memiliki
akun Github.
Silahkan buka kembali repository lokal yang pernah kita buat, yaitu project-01.
Melalui HTTPS:
https://github.com/petanikode/belajar-git.git
dan melalui SSH:
git@github.com:petanikode/belajar-git.git
Apa bedanya?
Kalau kita menggunakan HTTPS, maka kita akan diminta password setiap kali
melakukan push.
Sedangkan yang menggunakan SSH, kita tidak akan diminta password. Namun,
kita harus melakukan konfigurasi SSH Key terlebih dahulu.
Selanjutnya kita bisa melakukan push atau mengirim revisi ke repository remote
(Github).
Nah untuk menghapus dan mengubah nama remote dapat dilakukan dengan
perintah berikut:
Hapus remote:
git remote remove github
keterangan:
git add .
git commit -m "menambahkan beberapa revisi"
Sebagai contoh, saya memiliki 5 catatan revisi.
Maka tinggal kita kirim saja dengan perintah git push github master.
Jika ktia klik commit terakhir, maka kita akan dibawa ke git diff-nya Github.
Misalnya begini.
Pada repository remote ada kontributor lain yang sudah menambahkan dan
merubah sesuatu di sana.
Maka kita harus mengambil perubahan tersebut, agar repository lokal kita tetap
ter-update atau sama persis seperti repository remote.
Apa perbedaanya?
Perintah git fetch hanya akan mengambil revisi (commit) saja dan tidak langsung
melakukan penggabungan (merge) terhadap repository lokal.
Sedangkan git pull akan mengambil revisi (commit) dan langsung melakukan
penggabungan (merge) terhadap repository lokal.
Setelah itu, isilah file RAEDME.md dengan apapun yang kamu inginkan.
Pesan commit bersifat opsional, boleh di isi boleh tidak. Karena Github akan
membuatkannya secara otomatis.
Sekarang ada perubahan baru di repository remote dan kita akan mengambil
perubahan tersebut.
Revisi sudah diambil, tapi belum ada file README.md di dalam repository lokal.
Ya, balik lagi dari pengertian git fetch. Dia hanya bertugas mengambil revisi saja
dan tidak langsung menggabungkannya dengan repository lokal.
Bila ingin mengecek apa saja perbedaannya, coba gunakan perintah git diff.
Kali ini kita akan membuat file baru bernama register.html melalui Github.
Berikan nama file dengan register.html dan isi dengan apa saja.
Simpan revisi dan tambahkan persan commit seperti ini.
Sekarang ada perubahan baru di repository remote dan kita akan mengambilnya
dengan perintah git pull.
• https://... adalah URL repository remote, kita juga bisa menggunakan SSH.
• [nama dir] (opsional) adalah nama direktory yang akan dibuat. Jika kita tidak
berikan nama direktori, maka akan otomatis menggunakan nama repository.
cd ~/Desktop
Setelah itu melakukan clone di sana.
FYI: Saat kalian clone sebuah repository dari Github, nama remote origin akan diberikan
secara otomatis
Apa Selanjutnya?
Kita sudah belajar beberapa perintah untuk bekerja pada remote repository,
diantaranya git remote, git fetch, git pull, git clone, dll.
Semua perintah itu kita perlukan saat berkolaborasi dengan tim di proyek open
source maupun closed source.
Apa selanjutnya?
#Git #Github
Perintah git pull dan git fetch adalah dua perintah untuk mengambil commit
terbaru dari remote repository.
Pertanyaanya:
…dan kapan waktu yang tepat menggunakan git pull dan git fetch?
Perintah git pull dan git fetch fungsinya sama. Yaitu mengambil commit terbaru
dari remote repository.
Fungsi perintah git pull dan git fecth
Untuk penjelasan yang lebih detail, kita bisa membaca di dokumentasi dengan
mengetik perintah git pull --help atau git fetch --help.
Gampang kan?
Sedangkan apabila kita tidak pernah melakukan apa-apa di lokal repository, kita bisa
menggunakan git pull.
Perintah git pull akan mengambil commit terbaru ke branch origin/master dan
langsung menggabungkannya dengan branch master (lokal).
Saat ini sudah terdapat 14 kontributor di dalam repositori tersebut. Sedangkan pada
repositori lokal, saya belum melakukan apa pun.
Pada repository remote sudah terjadi 48 commit, sedangkan pada lokal hanya 10
saja.
Sekarang saya akan melakukan sebuah commit di repository lokal. Saya akan
mengubah file README.md menjadi seperti ini:
Jadi sekarang di repositori lokal ada 11 commit.
Lalu perintah yang mana yang harus kita gunakan untuk mengambil 48 commit di
Github?
Tentu saja kita akan menggunakan git fetch, karena saya sudah melakukan
perubahan di repo lokal.
Apabila kita sudah yakin, kita bisa menggabungkan (merge) dua branch tersebut.
Caranya:
Berhasil …
Untuk mencoba git pull, saya akan mengubah file README.md dari Github.
Artinya sekarang di repositori remote (Github) ada 1 commit baru.
Caranya:
Jadi, Kesimpulannya
Gunakan perintah git pull saat tidak ada commit yang pernah dilakukan di lokal.
Sedangkan perintah git fetch digunakan kalau sudah ada commit yang dilakukan.
Penggunaan git fetch lebih aman, karena kita akan melakukan merge branch
secara manual. Sehingga kita bisa terhindar dari bentrokan.
Perintah git pull biasanya digunakan untuk sync repo lokal dengan remote.
Jika kamu menggunakan vs Code, pada pojok kanan bawah ada ikon
untuk sync repo. Ini juga mungkin saja menggunakan git pull.