Bagian penting dalam pengunaan kontrol versi adalah kolaborasi, yaitu bekerja sama dengan banyak orang untuk mengembangkan sistem dalam satu kode yang sama. Tulisan ini akan menjelaskan mengenai bagiamana mengatasi konflik yang dapat terjadi ketika kita memiliki banyak kontributor untuk kode yang sama. Konflik yang mungkin terjadi misalnya: beberapa orang melakukan perubahan pada kode yang sama, ataupun penambahan kode pada bagian yang berbeda.

Catatan: Tulisan ini merupakan bagian 3, jika anda belum membaca bagian 1 dan 2, silahkan baca dahulu:

Ebook dari seri tulisan ini juga dapat di-download di sini.

Untuk ilustrasi, kita akan melanjutkan kisah penulisan ramuan polijus yang masih menggantung dari bagian 2. Pada akhir bagian 2, Ramiel dan Alex telah berhasil menyelesaikan bagian pertama dari ramuan polijus, yang akan digunakan untuk mengembalikan Alex menjadi manusia seutuhnya. Pada tulisan ini, kita akan melihat bagaimana bagian 2 dari ramuan polijus dibuat.

Penggabungan Sederhana

Selesai membuat resep bagian 1 polijus, Ramiel memutuskan untuk langsung menambahkan bagian 2 dari resep ramuan polijus.

Tambahan Bagian 2 dari Ramuan Polijus

[email protected] ~/Desktop/polijuice (master)
$ git diff
diff --git a/polijus.txt b/polijus.txt
index a0fb16d..fccd214 100644
--- a/polijus.txt
+++ b/polijus.txt
@@ -8,3 +8,16 @@ Bagian 1
 6. Tambahkan dua sendok lalat lacewing yang telah ditumbuk menjadi bubuk ke dal
 7. Panaskan selama 30 detik, dalam suhu rendah.
 8. Ayunkan tongkat untuk menyelesaikan ramuan.
+
+Bagian 2
+
+Setelah selesai membuat ramuan sesuai dengan langkah-langkah pada bagian pertam
+
+1. Tambahkan tiga takaran kulit boomslang ke dalam panci.
+2. Tambahkan satu takaran tanduk bicorn yang telah ditumbuk menjadi bubuk ke da
+3. Panaskan ramuan selama 20 menit pada temperatur tinggi.
+4. Ayunkan tongkat dan biarkan ramuan matang sendiri selama 24 jam jika menggun
+5. Tambahkan lagi satu sendok lacewing ke dalam panci.
+6. Aduk tiga kali, berlawanan arah dengan jarum jam.
+7. Pisahkan ramuan menjadi beberapa dosis (jika diperlukan) dan tambahkan bagia
+8. Ayunkan tongkat untuk menyelesaikan ramuan.
\ No newline at end of file

[email protected] ~/Desktop/polijuice (master)
$ git commit -ma "Penambahan bagian 2 ramuan"
error: pathspec 'Penambahan bagian 2 ramuan' did not match any file(s) known to
git.

[email protected] ~/Desktop/polijuice (master)
$ git commit -am "Penambahan bagian 2 ramuan"
[master ccdfeb8] Penambahan bagian 2 ramuan
 1 file changed, 13 insertions(+)

[email protected] ~/Desktop/polijuice (master)
$ git log
commit ccdfeb8b7096aaf1e5dca90e664c3a41e689e757
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:10:17 2013 +0700

    Penambahan bagian 2 ramuan

commit a0ba93957a475bc54888e9b04a9b716c94cb3856
Author: Ramiel <[email protected]>
Date:   Sat Dec 29 14:38:40 2012 +0700

    Perbaikan pada langkah 4

commit ecd0cacf60d4e56f2e4ebd9de2776fc6ac7e3bbe
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sat Dec 29 14:07:43 2012 +0700

    Penambahan resep polijus

Sementara itu, Alex juga melakukan penambahan pada teks dengan memberikan judul pada bagian pertama ramuan:

Penambahan judul pada bagian 1

[email protected] ~/Desktop/polijuice (master)
$ git diff
diff --git a/polijus.txt b/polijus.txt
index a0fb16d..3d7adae 100644
--- a/polijus.txt
+++ b/polijus.txt
@@ -1,4 +1,4 @@
-Bagian 1
+Bagian 1: Ramuan Awal

 1. Masukkan tiga takaran fluxweed ke dalam panci.
 2. Tambahkan dua ikat knotgrass ke dalam panci.

[email protected] ~/Desktop/polijuice (master)
$ git commit -am "Penambahan judul pada bagian 1"
[master 8183a11] Penambahan judul pada bagian 1
 1 file changed, 1 insertion(+), 1 deletion(-)

[email protected] ~/Desktop/polijuice (master)
$ git log
commit 8183a1159ad1e181b4d5065e4f4efe2b3f4dc5ff
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sun Jan 6 14:16:31 2013 +0700

    Penambahan judul pada bagian 1

commit a0ba93957a475bc54888e9b04a9b716c94cb3856
Author: Ramiel <[email protected]>
Date:   Sat Dec 29 14:38:40 2012 +0700

    Perbaikan pada langkah 4

commit ecd0cacf60d4e56f2e4ebd9de2776fc6ac7e3bbe
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sat Dec 29 14:07:43 2012 +0700

    Penambahan resep polijus

Setelah memasukkan kedua perubahan tersebut, sejarah pada repositori Ramiel dan Alex mulai berbeda, seperti pada gambar berikut:

Perbedaan repo Ramiel dan Alex

Sampai titik ini, kita dapat bahwa pada commit ketiga, kedua repositori memiliki isi yang berbeda. Karena kedua perubahan memang diperlukan, tentunya kita tidak dapat langsung membuang salah satu perubahan tersebut. Yang akan kita lakukan ialah menggabungkan kedua commit tersebut, sehingga didapatkan kode terbaru yang adalah merupakan hasil gabungan dari kedua repositori tersebut. Penggabungan ini dikenal dengan nama merging pada DVCS.

Baik Alex maupun Ramiel dapat melakukan perubahan kode sebanyak yang mereka inginkan, tanpa mengetahui apa yang dilakukan oleh satu sama lain. Tentunya sampai di satu titik, salah satu dari mereka harus mengirimkan pull request agar perubahan yang dilakukan oleh kedua belah pihak dapat ditambahkan. Karena pada bagian sebelumnya kita telah menentukan repositori Alex sebagai pusat, maka Ramiel-lah yang harus melakukan penggabungan dari repositori Alex. Terlebih dahulu Ramiel harus menjalankan perintah git status untuk melihat seberapa jauh ia berbeda dari repositori Alex:

[email protected] ~/Desktop/polijuice (master)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit, working directory clean

Dapat dilihat bahwa git mencatat repositori Ramiel berada 1 commit di depan repositori Alex, tetapi perhatikan bahwa perubahan pada repositori Alex tidak dicatat oleh git! Lantas apa yang terjadi jika kita melakukan git pull sekarang? Mari kita coba jalankan.

[email protected] ~/Desktop/polijuice (master)
$ git pull origin master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git://127.0.0.1
 * branch            master     -> FETCH_HEAD
Auto-merging polijus.txt
Merge made by the 'recursive' strategy.
 polijus.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

[email protected] ~/Desktop/polijuice (master)
$ git log
commit d81ffc79e7a183472da436171471e81201a26c77
Merge: ccdfeb8 8183a11
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:40:17 2013 +0700

    Merge branch 'master' of git://127.0.0.1

commit 8183a1159ad1e181b4d5065e4f4efe2b3f4dc5ff
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sun Jan 6 14:16:31 2013 +0700

    Penambahan judul pada bagian 1

commit ccdfeb8b7096aaf1e5dca90e664c3a41e689e757
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:10:17 2013 +0700

    Penambahan bagian 2 ramuan

commit a0ba93957a475bc54888e9b04a9b716c94cb3856
Author: Ramiel <[email protected]>
Date:   Sat Dec 29 14:38:40 2012 +0700

    Perbaikan pada langkah 4

commit ecd0cacf60d4e56f2e4ebd9de2776fc6ac7e3bbe
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sat Dec 29 14:07:43 2012 +0700

    Penambahan resep polijus

Apa yang terjadi? Ketika kita melakukan git pull, secara otomatis git melakukan penggabungan dari perbedaan kode antara repositori Ramiel dan Alex. Untuk memastikan perubahan benar-benar terjadi, mari kita lihat isi dari file polijus.txt sekarang:

[email protected] ~/Desktop/polijuice (master)
$ cat polijus.txt
Bagian 1: Ramuan Awal

1. Masukkan tiga takaran fluxweed ke dalam panci.
2. Tambahkan dua ikat knotgrass ke dalam panci.
3. Aduk tiga kali, searah jarum jam.
4. Ayunkan tongkat dan biarkan ramuan matang sendiri selama 80 menit jika menggu
nakan panci timah campuran, 68 menit pada panci kuningan, dan 60 menit pada panc
i kaleng.
5. Masukkan empat ekor lintah ke dalam panci.
6. Tambahkan dua sendok lalat lacewing yang telah ditumbuk menjadi bubuk ke dala
m panci.
7. Panaskan selama 30 detik, dalam suhu rendah.
8. Ayunkan tongkat untuk menyelesaikan ramuan.

Bagian 2

Setelah selesai membuat ramuan sesuai dengan langkah-langkah pada bagian pertama
, tambahkan beberapa hal berikut:

1. Tambahkan tiga takaran kulit boomslang ke dalam panci.
2. Tambahkan satu takaran tanduk bicorn yang telah ditumbuk menjadi bubuk ke dal
am panci.
3. Panaskan ramuan selama 20 menit pada temperatur tinggi.
4. Ayunkan tongkat dan biarkan ramuan matang sendiri selama 24 jam jika mengguna
kan panci timah campuran, 1224 menit pada panci kuningan, dan 18 jam pada panci
kaleng.
5. Tambahkan lagi satu sendok lacewing ke dalam panci.
6. Aduk tiga kali, berlawanan arah dengan jarum jam.
7. Pisahkan ramuan menjadi beberapa dosis (jika diperlukan) dan tambahkan bagian
 dari orang yang ingin anda samar (dapat berupa rambut atau kuku misalnya).
8. Ayunkan tongkat untuk menyelesaikan ramuan.

Ternyata benar bahwa penggabungan telah dilakukan secara otomatis. Tentunya setelah penggabungan ini, repositori Ramiel akan berada semakin jauh dari repositori Alex:

[email protected] ~/Desktop/polijuice (master)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#
nothing to commit, working directory clean

Dari 1 commit di depan menjadi 3 commit di depan. Perbedaan 3 commit tersebut disebabkan karena ketertinggalan kita terhadap origin tidak penting, karena ketertinggalan tersebut dapat dengan mudah diselesaikan dengan merging. Yang diperlukan ialah seberapa banyak repositori origin (dalam kasus ini, repositori Alex) harus mengambil perubahan yang telah kita lakukan, karena hasil akhir kode akan diambil dari repositori origin.

Sampai di titik ini, kedua repositori akan berbentuk kira-kira seperti gambar berikut:

Repositori sebelum digabungkan ke pusat

dan tentunya Alex harus menggabungkan kembali repositori pusat dengan perubahan yang telah dilakukan oleh Ramiel. Untuk mempersingkat tulisan, langkah melakukan pull request akan kita lewatkan. Jika anda belum mengerti, silahkan baca mengenai pull request pada bagian 2.

[email protected] ~/Desktop/polijuice (master)
$ git pull git://localhost/ master
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From git://localhost
 * branch            master     -> FETCH_HEAD
Updating 8183a11..d81ffc7
Fast-forward
 polijus.txt | 13 +++++++++++++
 1 file changed, 13 insertions(+)

[email protected] ~/Desktop/polijuice (master)
$ git log
commit d81ffc79e7a183472da436171471e81201a26c77
Merge: ccdfeb8 8183a11
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:40:17 2013 +0700

    Merge branch 'master' of git://127.0.0.1

commit 8183a1159ad1e181b4d5065e4f4efe2b3f4dc5ff
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sun Jan 6 14:16:31 2013 +0700

    Penambahan judul pada bagian 1

commit ccdfeb8b7096aaf1e5dca90e664c3a41e689e757
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:10:17 2013 +0700

    Penambahan bagian 2 ramuan

commit a0ba93957a475bc54888e9b04a9b716c94cb3856
Author: Ramiel <[email protected]>
Date:   Sat Dec 29 14:38:40 2012 +0700

    Perbaikan pada langkah 4

commit ecd0cacf60d4e56f2e4ebd9de2776fc6ac7e3bbe
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sat Dec 29 14:07:43 2012 +0700

    Penambahan resep polijus

[email protected] ~/Desktop/polijuice (master)
$ cat polijus.txt
Bagian 1: Ramuan Awal

1. Masukkan tiga takaran fluxweed ke dalam panci.
2. Tambahkan dua ikat knotgrass ke dalam panci.
3. Aduk tiga kali, searah jarum jam.
4. Ayunkan tongkat dan biarkan ramuan matang sendiri selama 80 menit jika menggu
nakan panci timah campuran, 68 menit pada panci kuningan, dan 60 menit pada panc
i kaleng.
5. Masukkan empat ekor lintah ke dalam panci.
6. Tambahkan dua sendok lalat lacewing yang telah ditumbuk menjadi bubuk ke dala
m panci.
7. Panaskan selama 30 detik, dalam suhu rendah.
8. Ayunkan tongkat untuk menyelesaikan ramuan.

Bagian 2

Setelah selesai membuat ramuan sesuai dengan langkah-langkah pada bagian pertama
, tambahkan beberapa hal berikut:

1. Tambahkan tiga takaran kulit boomslang ke dalam panci.
2. Tambahkan satu takaran tanduk bicorn yang telah ditumbuk menjadi bubuk ke dal
am panci.
3. Panaskan ramuan selama 20 menit pada temperatur tinggi.
4. Ayunkan tongkat dan biarkan ramuan matang sendiri selama 24 jam jika mengguna
kan panci timah campuran, 1224 menit pada panci kuningan, dan 18 jam pada panci
kaleng.
5. Tambahkan lagi satu sendok lacewing ke dalam panci.
6. Aduk tiga kali, berlawanan arah dengan jarum jam.
7. Pisahkan ramuan menjadi beberapa dosis (jika diperlukan) dan tambahkan bagian
 dari orang yang ingin anda samar (dapat berupa rambut atau kuku misalnya).
8. Ayunkan tongkat untuk menyelesaikan ramuan.

Dapat dilihat bahwa ketika Alex melakukan pull, git lagi-lagi secara otomatis menjadikan repositori Alex menjadi repositori terbaru, dengan kode yang sama dengan Ramiel. Kedua repositori sampai pada titik ini telah menjadi sama, seperti yang dapat dilihat pada gambar.

Repositori akhirnya sama!

Sampai sekarang, perbedaan pada kode diselesaikan secara otomatis oleh git. Hal ini dikarenakan perubahan yang kita lakukan ialah perubahan yang mudah dan sederhana: Ramiel dan Alex melakukan perubahan pada bagian yang berbeda dari polijus.txt. Sayangnya, pada dunia nyata sekenario ini tidak selalu terjadi. Seringkali akan ada keadaan di mana perubahan akan dilakukan terhadap kode di tempat yang sama. Apa yang akan terjadi ketika kita menemui hal itu?

Penggabungan Lanjutan

Karena penambahan judul pada bagian 1 telah dibuat, maka Ramiel pun berpikir untuk menambahkan judul pada bagian 2 juga, untuk melengkapi resep. Sebagai profesor yang bertanggung jawab, Ramiel menuliskan judul yang serius untuk bagian 2.

Tambahan Judul Bagian 2 oleh Ramiel

[email protected] ~/Desktop/polijuice (master)
$ git commit -am "Tambahan judul bagian 2"
[master faad830] Tambahan judul bagian 2
 1 file changed, 1 insertion(+), 1 deletion(-)

[email protected] ~/Desktop/polijuice (master)
$ git log
commit faad8302e9a8d7ae7a9bc28dfd18ac45a358f252
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 16:11:54 2013 +0700

    Tambahan judul bagian 2

commit d81ffc79e7a183472da436171471e81201a26c77
Merge: ccdfeb8 8183a11
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:40:17 2013 +0700

    Merge branch 'master' of git://127.0.0.1

// dilewatkan untuk mempersingkat...

Sialnya, pada saat yang bersamaan Alex juga melakukan perubahan pada bagian yang sama: menambahkan judul pada bagian 2, dengan sedikit humor tentunya.

Judul Bagian 2 oleh Alex

[email protected] ~/Desktop/polijuice (master)
$ git commit -am "Judul bab 2 :D"
[master b018d56] Judul bab 2 :D
 1 file changed, 1 insertion(+), 1 deletion(-)

[email protected] ~/Desktop/polijuice (master)
$ git log
commit b018d568771961531386f37908ef4eb6e9b04082
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sun Jan 6 16:18:58 2013 +0700

    Judul bab 2 :D

commit d81ffc79e7a183472da436171471e81201a26c77
Merge: ccdfeb8 8183a11
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 14:40:17 2013 +0700

    Merge branch 'master' of git://127.0.0.1

Dan sekarang kita mendapatkan konflik. Perubahan dilakukan pada baris yang sama dalam resep! Bagaimana kita akan memperbaikinya? Misalkan dalam sekenario ini Ramiel telah mengirimkan pull request kepada Alex, sehingga Alex akan mengambil perubahan dari Ramiel. Mari kita lihat apa yang terjadi.

[email protected] ~/Desktop/polijuice (master)
$ git pull git://localhost/ master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git://localhost
 * branch            master     -> FETCH_HEAD
Auto-merging polijus.txt
CONFLICT (content): Merge conflict in polijus.txt
Automatic merge failed; fix conflicts and then commit the result.

[email protected] ~/Desktop/polijuice (master|MERGING)
$ git status
# On branch master
# You have unmerged paths.
#   (fix conflicts and run "git commit")
#
# Unmerged paths:
#   (use "git add <file>..." to mark resolution)
#
#       both modified:      polijus.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Oops, terjadi konflik yang tidak dapat diselesaikan secara otomatis. Karena perubahan yang terjadi pada baris yang sama, tentunya git tidak dapat mengetahui baris mana yang harus digunakan oleh kode. Pada titik ini, kita dapat melihat perbedaan dari kedua perubahan dengan perintah git diff:

[email protected] ~/Desktop/polijuice (master|MERGING)
$ git diff polijus.txt
diff --cc polijus.txt
index 64fba2a,567db6f..0000000
--- a/polijus.txt
+++ b/polijus.txt
@@@ -9,7 -9,7 +9,11 @@@ Bagian 1: Ramuan Awa
  7. Panaskan selama 30 detik, dalam suhu rendah.
  8. Ayunkan tongkat untuk menyelesaikan ramuan.

++<<<<<<< HEAD
 +Bagian 2: Anti-Beruang-Kutub
++=======
+ Bagian 2: Bahan Tambahan
++>>>>>>> faad8302e9a8d7ae7a9bc28dfd18ac45a358f252

  Setelah selesai membuat ramuan sesuai dengan langkah-langkah pada bagian perta

dapat dilihat bahwa perbedaan utama terdapat pada revisi HEAD dan faad83, dengan isi judul Bagian 2 yang berbeda. Untuk mengatasi konflik yang ada, kita dapat menggunakan perintah git mergetool seperti berikut:

[email protected] ~/Desktop/polijuice (master|MERGING)
$ git mergetool
merge tool candidates: tortoisemerge emerge vimdiff
Merging:
polijus.txt

Normal merge conflict for 'polijus.txt':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (tortoisemerge):

Perhatikan bahwa git memberikan kita pilihan tool yang dapat digunakan untuk menyelesaikan konflik. Pilihan tool ini akan dikeluarkan sesuai dengan apa yang ada dalam sistem. Karena dalam sistem Alex terdapat tortoisemerge, emerge, dan vimdiff, maka git hanya akan menampilkan ketiga tool tersebut. Kita akan menggunakan tortoisemerge (tidak ada pilihan khusus, hanya karena tortoisemerge adalah yang pertama kali dimunculkan). Setelah memilih tortoisemerge (dengan menekan Enter), maka kita akan dihadapkan dengantampilan berikut (klik untuk memperbesar):

Antarmuka Tortoisemerge

Panel sebelah kiri atas memperlihatkan perubahan kode yang ada pada Ramiel, sedangkan panel kanan atas memperlihatkan perubahan yang ada pada Alex. Panel bawah menunjukkan bagian yang berkonflik (baris 12), yang ditandai dengan ????. Untuk menyelesaikan konflik, kita dapat melakukan klik kanan pada panel konflik untuk melihat pilihan-pilihan yang ada.

Pilihan aksi

Seperti yang dapat dilihat pada gambar, terdapat empat solusi utama, yang cukup jelas deskripsinya:

  1. Menggunakan kode dari Ramiel (Use text block from ‘theirs’)
  2. Menggunakan kode dari Alex (Use text block from ‘mine’)
  3. Menggunakan keduanya, dengan urutan Alex -> Ramiel (Use block from ‘mine’ before ‘theirs’)
  4. Menggunakan keduanya, dengan urutan Ramiel -> Alex (Use block from ‘theirs’ before ‘mine’)

Karena menganggap judul Ramiel membosankan, maka Alex memilih judulnya untuk digunakan. Setelah memilih pilihan kedua, maka tortoisemerge akan memperlihatkan perubahan akhir yang diinginkan:

TortoiseMerge merged

Lalu tentunya Alex dapat melakukan penyimpanan (Save) dan menutup aplikasi. Mari kita lihat lagi status dari repositori setelah selsai melakukan merge:

[email protected] ~/Desktop/polijuice (master|MERGING)
$ git status
# On branch master
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       polijus.txt.orig
nothing added to commit but untracked files present (use "git add" to track)

Perhatikan bahwa git mengetahui bahwa konflik sudah diselesaikan, tetapi menganggap kita belum selesai melakukan merging (All conflicts fixed but you are still merging.). Git juga secara otomatis menambahkan file polijus.txt.orig sebagai file sementara, yang aman dihapus jika kita yakin merge yang dilakukan tidak akan mengalami masalah.

Catatan: File sementara berekstensi .orig tersebut dapat dihilangkan secara otomatis jika anda tidak ingin menggunakannya. Silahkan baca dokumentasi git mergetool untuk keterangan lebih lanjut.

Karena kita yakin bahwa penggabungan ini tidak akan menghasilkan masalah, maka kita akan menghapus file tersebut dan menambahkan commit baru untuk menggabungkan perubahan:

[email protected] ~/Desktop/polijuice (master|MERGING)
$ rm polijus.txt.orig

[email protected] ~/Desktop/polijuice (master|MERGING)
$ ls
polijus.txt

[email protected] ~/Desktop/polijuice (master|MERGING)
$ git commit -m "Merged judul bab 2"
[master c3c653e] Merged judul bab 2

[email protected] ~/Desktop/polijuice (master)
$ git status
# On branch master
nothing to commit, working directory clean

[email protected] ~/Desktop/polijuice (master)
$ git log
commit c3c653eaf79583834fc41f46687291f4ebd0308b
Merge: b018d56 faad830
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sun Jan 6 16:45:24 2013 +0700

    Merged judul bab 2

commit b018d568771961531386f37908ef4eb6e9b04082
Author: Alex Xandra Albert Sim <[email protected]>
Date:   Sun Jan 6 16:18:58 2013 +0700

    Judul bab 2 :D

commit faad8302e9a8d7ae7a9bc28dfd18ac45a358f252
Author: Ramiel <[email protected]>
Date:   Sun Jan 6 16:11:54 2013 +0700

    Tambahan judul bagian 2

// ...

Setelah penggabungan selesai, kita dapat melihat bahwa terdapat catatan baru pada git log yang ditampilkan (Merge: b018d56 faad830) yang menandakan penggabungan kedua commit yang kita lakukan. Selesai menggabungkan, tentunya kode sudah kanon dan Ramiel dapat melakukan penarikan kode terbaru lagi.

[email protected] ~/Desktop/polijuice (master)
$ git pull origin
From git://127.0.0.1
   a0ba939..c3c653e  master     -> origin/master
Already up-to-date.

[email protected] ~/Desktop/polijuice (master)
$ git status
# On branch master
nothing to commit, working directory clean

Akhirnya kode Ramiel dan Alex telah sama, dan ramuan polijus dapat diselesaikan. Ramuan kemudian dibuat dengan benar sekali lagi oleh Alex, and they live happily ever after. CUT -

Akhirnya kode Ramiel dan Alex telah sama, dan ramuan polijus dapat diselesaikan. Ramuan kemudian dibuat dengan benar sekali lagi oleh Alex, dan akhirnya ia kembali menjadi manusia seutuhnya.

Kesimpulan

Pada akhir tulisan ini kita telah mempelajari bagaimana menggabungkan perbedaan-perbedaan yang mungkin terjadi ketika menggunakan kontrol versi dalam tim. Perlu dicatat bahwa merging tidak harus dilakukan setiap saat. Merging dapat dilakukan kapanpun, dan jika anda sedang tidak ingin menyelesaikan konflik merging, anda dapat terus menerus bekerja secara lokal, sampai titk di mana penggabungan tersebut ingin anda lakukan.

Untuk bekerja secara lokal dengan efektif dan tidak banyak menggangu kode utama yang digunakan, kita dapat memanfaatkan fasiltias branching dari git. Fasilitas ini akan kita bahas di tulisan selanjutnya. Untuk sekarang, coba gunakan git dengan orang lain sesering mungkin, dan selesaikan konflik ketika anda menemukannya (atau bahkan anda dapat bereksperimen untuk membuat konflik dan mencoba menyelesaikannya). Happy coding dan sampai bertemu lagi di tulisan selanjutnya!

comments powered by Disqus

Daftar Isi