Belajar Git (II)

MELANJUTKAN tulisan tadi malam. Tentang lokakarya Git yang diselenggarakan channel #blankon di IRC. Setelah masuk ke cabang yang baru. Mari kita mulai mengutak-atik kode yang sudah kita kloning.

Sebelum melakukan perubahan pada cabang, isi master dan cabangbaru sama. Hal ini bisa dilihat dari perintah git status. hasilnya harusnya masih clean.

Sekarang kita coba kompilasi program yang sudah dikloning. Pastikan sudah ada di direktori NgeGitting.
$ ./autogen.sh
$ ./configure
$ make
$ ./program ==> menjalankan program yang sudah dikompilasi

Jika dilihat, hasil perintah di atas menghasilkan beberpa file, seperti configure, configure.ac dll. Tapi kenapa ketika jalankan perintah $ git status ternyata belum ada perubahan? Kok hasilnya masih clean? Ternyata eh ternyata, ini karena di git ada file .gitignore. Di file ini ditulis file-file apa saja yang akan diabaikan oleh Git. Seperti file configure, dll. Inilah alasannya kenapa ketika perintah git status dijalankan, hasilnya masih clean.

Saatnya mengotak-atik. Misalkan kita ingin mengubah file doc/Readme.txt. Ubah file tersebut dengan menggunakan text editor kesukaan. Saya biasanya pakai gedit. Jika sudah, save file itu. Sekarang kita cek hasilnya,apakah sudah ada perubahan atau belum. Seperti biasa, ketik :
$ git status
On branch namacabang
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
no changes added to commit (use "git add" and/or "git commit -a")

CATATAN: untuk memastikan apa yang terjadi di branch, selalau ketik git status

Setelah berhasil diubah, tinggal dicommit, dengan mengetikkan perintah:
$ git commit -a -s
Biasanya keluar editor Vim. Tulis keterangan seperlunya tentang apa yang telah diubah. Setelah itu simpan dan keluar (biasanya saya pakai perintah :wq). Setelah dicommit, ketik perintah:
$ git log
contoh keluarannya seperti ini:

commit 7b66ae4be148b892b90922d7e7afc023358f0f7c
Author: namanya < namaemail@di.si.ni >
Date: Tue Nov 16 00:34:33 2010 +0700

edit program.c, nambah bari 17-18. bener ga pak? hehe
Signed-off-by: namanya < namaemail@di.si.ni >

commit 7b2e0a9e19f48f49fac591b68fdc654e05271125
Author: namalain < namaemaillain@di.si.tu >
Date: Mon Nov 15 23:55:44 2010 +0700

Perubahan dikit buat ngeprint ucapan dan tambah
baris di dokumentasi.

Signed-off-by: namalain < namaemaillain@di.si.tu >

commit c85d4d379395a84489b38561433f5486e146d292
Author: namalain < namaemaillain@di.si.tu >
Date: Mon Nov 15 22:46:39 2010 +0700

Tambah baris

Signed-off-by: namalain < namaemaillain@di.si.tu >

Commit yang terakhir (paling atas) biasa disebut HEAD. Misalnya, apa yang dicommit sudah benar-benar fix dan tak ada kesalahan. Saatnya membuat patch dari commit terakhir tersebut. Ketik perintah:
$ git format-patch HEAD^
Perintah ini menghasilkan sebuah file patch, misalkan saja namanya 0001-edit-program.c-nambah-bari-17-18.-bener-ga-pak-hehe.patch. Nah file ini lah ang nantinya diberikan ke manajer atau projremer lain.

Selain perintah HEAD^, kita bisa pula menggantinya dengan HEAD-n, di mana n adalah n perubahan dari HEAD. (maaf, saya masih belum ngerti dengan penjelasan ini hehe). Misalnya
$ git format patch HEAD-3
Artinya perintah tersebut membuat patch berdasarkan 3 perubahan terakhir.

Ok, setelah berhasil dicommit, ternyata ada kesalahan. Atau kita ingin kembali ke semula sebelum dicommit. Caranya:
$ git reset --soft HEAD^
Ini akan membatalkan commit terakhir, tetapi perubahan masih dibiarkan. Kita masih bisa mengubah kembali lalu melakukan commit lagi. Selain itu, ada juga perintah:
$ git reset --hard HEAD^
Ini akan membatalkan commit terakhir sekaligus membatalkan perubahan yang kita lakukan. Jadi, ketika file doc/Readme.txt yang kita tadi ubah, akan kembali ke seperti semula. Karena itu, hati-hati menggunakan perintah hard HEAD^.

Misalnya kita dikirim patch dari projremer B, misalnya 0001-ini-patchnya-loh.patch. Untuk menggunakan patch tersebut, lakukan perintah
$ git apply 0001-ini-patchnya-loh.patch
atau
$ git apply --reverse 0001-ini-patchnya-loh.patch
Setelah patch masuk, jangan lupa commit
$ git commit -a -s

Tag
Secara singkat, tag berarti penanda. jadi, kita bisa menandai sebuah commit dengan tag ini, misalnya menandai versi01, rc023, dll. Cara penandaan tag adalah seperti berikut:
$ git tag nama_tag commit_id
Misal dari hasil git log didapat hasil berikut yang akan digunakan sebagai penanda:

commit c85d4d379395a84489b38561433f5486e146d292
Author: namalain < namaemaillain@di.si.tu >
Date: Mon Nov 15 22:46:39 2010 +0700

Tambah baris

Signed-off-by: namalain < namaemaillain@di.si.tu >

Kita akan gunakan id commit c85d4d379395a84489b38561433f5486e146d292 sebagai penanda untuk versi02. Maka ketik:
$ git tag versi02 c85d4d379395a84489b38561433f5486e146d292
Untuk melihat hasilnya, ketik:
$ git tag -l
versi02

Jika kita ingin buat patchnya, bisa mengetikan:
$ git diff master > ../inihasil-patch-sampai-akhir.patch

Jika kita ingin menggabungkan hasil patch tersebut ke master, lakukan perintah:
$ git commit -a -m "Sudah ada di versi01"
$ git checkout master
$ git merge cabangbaru

Sekarang, isi master sudah berubah, sama dengan di cabangbaru. Kasarnya, perintah di atas itu artinya : commit, pindah ke master, gabung cabangbaru ke master.
Ya sudah, sampai di sini.
***
Catatan: Tak semua yang saya tulis di atas saya mengerti. Beberapa masih bingung. Jadi kalau ada pertanyaan, silakan tanya ke milis Blankon atau tanya di IRC, channel #blankon @freenode :D. Atau langsung ke pembuatnya, mbah Linus :D.

Sumber:
Catatan log IRC hari Senin (15/11/2010).
Blognya pak Dwi
Wikipedia

%d bloggers like this: