Linus Torvalds merevolusi industri perangkat lunak dua kali, pertama dengan Linux kernel-nya, kedua dengan git. Git merupakan DVCS, distributed version control system, atau dalam man-page nya dikatakan: git - the stupid content tracker. Secara sederhana dapat dikatakan, jika anda mempunyai "sesuatu", entah itu tulisan, novel, source code, gambar, program, dll, yang anda ingin track perubahan tiap versinya, misal dari versi 0.1, 0.3, ... versi n, git-lah yang dapat melakukannya. Dengan git anda tidak perlu khawatir karya anda terhapus karena anda bisa kembali ke versi tertentu kapanpun!
Jika anda baru belajar git, saya sarankan untuk membaca tulisan-tulisan saya tentang pengenalan git sebelumnya:
Tentang Bitbucket
Bitbucket merupakan penyedia layanan git. Ada banyak penyedia layanan git: gitlab, gitorous, github bitbucket, dan bitbucket-lah yang terbaik. Kenapa? Karena bitbucket menyediakan layanan private repository free unlimited, layanan tim (maks 5 user) yang tidak disediakan penyedia lainnya. Dengan bitbucket, kita bisa meng-host karya kita di server cloud mereka secara free. Git akan menyinkronkan data dalam PC kita dan server bitbucket secara aman dengan protokol git, ssh ataupun https.
Anda bisa login dengan mendaftar (sign up) atau dengan menggunakan akun google.
Membuat Tim
Kelebihan git sebagai content tracker adalah kemampuannya bekerja secara simultan. Misal dalam suatu tim bekerja dalam suatu project. Project 1 di-inisiasi, si A melakukan rancangan awal, si B menambahkan, si C memberi tambahan, si D menyempurnakan dan si A merevisi kesalahan yang dibuat si B. Maka, pekerjaan tersebut dapat dengan mudah dilakukan dengan git.
Ilustrasi pekerjaan yang dilakukan secara tim |
Saya asumsikan anda sudah bisa membuat repo sendiri. Kini saatnya membuat tim. Caranya, klik tanda plus (+) pada halaman bitbucket anda (saya asumsikan anda menggunakan tampilan baru bitbucket), klik "team" dan isikan data tim anda. Lebih jelasnya, perhatikan gambar di bawah ini.
Membuat tim dalam bit bucket |
Menambahkan akses dalam repo
Ada dua cara menambahkan akses orang lain ke dalam repository kita:
- Menambahkan akun user lain
- Menambah grup/tim
Menambahkan user atau grup dalam repo |
Branching dan Merging
Tahap ini merupakan kelanjutan dari tutorial git sebelumnya. By default, saat kita membuat repo baru, ada satu main branch, yang disebut master.
Isi branch master:
$ ls readme.txt coba.txt
Kemudian saya membuat "branch" baru dengan nama future-plans,
$ git branch future-plans $ echo "from bitbucket tutorial >> location.txt $ echo "Earth's location" >> location.txt $ ls coba.txt location.txt readme.md
Jika saya berpindah ke branch master, maka file location.txt tersebut tidak ada,
$ git checkout master $ ls coba.txt readme.md
Maka dua branch tersebut saya gabung dengan perintah
git merge
$ git checkout future-plans $ git merge master future-plans
Maka branch future-plans akan dilebur menjadi satu dengan master. Perhatikan gambar diagram berikut untuk lebih jelasnya.
diagram branch future-plans dan master sebelum dan setelah merge |
$ git checkout future-plans namafileygdipindah.txt
Mengedit file di Bitbucket Cloud
Menambahkan file juga bisa dilakukan secara online melalui web Bitbucket. Misal kita membuat file baru melalui bitbucket, source >> new file. Kita isi dengan content berikut,<p>Bitbucket has the following space stations:</p> <p> <b>Earth's Moon</b><br> Headquarters </p>
Beri nama, misal, stationLocation, kemudian lakukan commit. Di local repo (PC), pull repo tsb untuk mendapatkan update terbaru.
$ git checkout master $ git pull origin master
Sekarang kita berpindah ke branch future-plans kembali (di Bitbucket cloud sekrang branch ini sudah tidak aktif karena sudah di merge, tapi tetap ada di local PC kita),
$ git checkout future-plans $ git merge master future-plans
Nah, sekarang file stationLocation.html (ekstensi.html otomatis dikenali dan ditambahkan oleh Bitbucket). Kita edit file tsb menjadi sbb,
<p>Bitbucket has the following space stations:</p> <p> <b>Earth's Moon</b><br> Headquarters </p> <p> <b>Mars</b><br> Recreation Department </p>
Save dan close (:wq pada Vim).
Sekarang pada branch "future-plans" telah terjadi perubahan. Bagaimana menggabungkannya dengan branch "master"? Dengan menggunakan merge seperti yang telah digunakan sebelumnya.
$ git status $ git checkout master $ git status $ git merge future-plans $ git push origin master
Beberepa keterangan saat checkout adalah sebagai berikut (singkatan),
M = modified A = added D = deleted R = renamed C = copied U = updated but unmerged
Berikut diagram ilustrasi proses-proses di atas (sumber gambar: Bitbucket).
|
Repo kita (git-tutorial) sekarang sudah clean dan update. Jika ingin menghapus branch "future-plans" lakukan hal berikut.
git branch -d future-plans
Lebih lengkapnya berikut tentang merging dan rebase (akan diterangkan selanjutnya).
Visualiasi proses branching dan merging [4] |
Menyelesaikan Konflik
Masalah yang
Persiapan: setting .gitconfig
Sebelum menyelesaikan konflik, atur .gitconfig menjadi seperti ini (fokus pada merge). Baca setting .gitconfig jika anda baru pertama kali menge-set .gitconfig ini.
$ vim ~/.gitconfig
[merge] tool=vimdiff conflictstyle=diff3 prompt=false
Sekarang kembali ke repo (git-tutorial). Skenario konfliknya adalah sebagai berikut,
$ vim animals.txt cat dog octopus octocat pinguing
Sekarang buat branch baru, octodog, dan edit octopus menjadi octodog.
$ git branch octodog $ git checkout octodog $ vim animals.txt #edit octopus dengan octodog $ git commit -am "change octopus to octodog"
Kemudian pindah ke branch master, edit octopus menjadi octoman, dan merge octodog dengan master.
$ git checkout master $ vim animals.txt #edit octopus menjadi octoman $ git commit -am "change octopus menjadi octoman" $ git merge octodog
Apa yang terjadi? Terjadi konflik sebagai berikut.
Auto-merging animals.txt CONFLICT (content): Merge conflict in animals.txt Automatic merge failed; fix conflicts and then commit the result.
Solusi
Solusi dari konflik di atas adalah dengan merge tool. Berikut langkahnya,
$ git mergetool
Maka akan muncul tampilan terminal dengan beberapa tab sbb,
Tampilan git mergetool |
- Local, merupakan versi yang ada di branch lokal (master) saat ini
- Base, merupakan versi awal sebelum terjadi konflik
- Remote, merupakan versi branch (octodog) yang ingin di-merge
:diffg RE " menampilkan isi versi REMOTE :diffg BA " menampilkan isi versi BASE :diffg LO " menampilkan isi versi LOCAL
Misal, kita ingin memakai versi branch, yakni mengganti octopus dengan octodog, maka kita perlu berpindah ke versi remote (Ctrl + w, j pada vim) kemudian tutup semua tab (:wqa). Jika ingin mengedit lagi, maka edit pada tab paling bawah, misal ganti octodog dengan octo-pinguin, kemudian tutup semuanya. Konflik terselesaikan.
Sesuai alur git, kita dapat mempush origin master untuk mengupdate repo kita di bitbucket cloud.
Visualisasi version control
Sebaik apapun pekerjaan tim kita, jika tampilannya jelek akan dicap jelek pula (itulah realita!). Yang menarik dari version control system, kita bisa mem-visualisasikan kerja tim dalam suatu repository dengan sangat ciamik dengan bantual tool yang disebut gource. Beriut instalasinya pada Ubuntu,
sudo apt install gource gource .
Perintah di atas akan menginstall gource kemudian mem-visualisasikan direktory repository (.). Berikut tampilan videonya.
Dengan cara ini, kita bisa mengukur kinerja tim, siapa yang paling aktif, file apa saja yang sering diupdate maupun informasi-informasi lainnya berkenaan dengan kerja tim. Untuk menyimpan visualisasi tersebut dalam video .mp4 gunakan perintah di bawah ini.
gource -1280x720 -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 gource.mp4
Membuat Bitbucket Page
Kelebihan lain yang ditawarkan Atlassian dalam layanan bitbukectnya adalah tersedianya web page untuk user (maupun untuk project di subdomainnya) yang bisa dimanfaatkan dengan nama domain sebagai berikut,
https://akunanda.bitbucket.ioBagaimana cara membuatnya? Caranya adalah dengan membuat repo dengan nama yang sama dengan nama akun anda. Misal akun saya bagustris, maka saya membuat repo dengan nama bagustris,
$ mkdir bagustris $ cd bagustris $ git init $ echo "tes" >> index.html $ git add ./* $ git remote add origin https://bagustris@bitbucket.org/bagustris/bagustris.bitbucket.org #buat dulu di bitbucket $ git push origin master
Kemudian cek di bitbucket page, misal milik saya di http://bagustris.bitbucket.io. Berikut tampilannya.
Tampilan web page akun bitbucket dengan bootstrap |
Bagaimana dengan repo project? Kita hanya perlu membuat sub-direktori dalam repo akunkita. Sebagai contoh saya punya project simulasi gerak planet di repo berikut, https://bitbucket.org/bagustris/planetsictp16, web page untuk project tersebut saya letakaan dalam folder/direktori "planetsictp16" didalam repo bagustris, sehingga alamat web page dari project tersebut menjadi https://bagustris.io/planetsictp16. Berikut contoh tampilannya.
Tampilan web repo project di bitbucket |
Itulah pengalaman saya menggunakan bitbucket, khususnya dalam bekerja dalam tim dengan Git. Tidak hanya mempermudah pekerjaan tim (dan individu), git juga merevolusi cara bekerja kita.
Referensi:
- http://www.rosipov.com/blog/use-vimdiff-as-git-mergetool/
- https://developer.atlassian.com/blog/2015/12/tips-tools-to-solve-git-conflicts/
- https://www.sitepoint.com/getting-started-git-team-environment/
- https://gitforteams.com
- https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud