Git memang baru terasa manfaatnya saat digunakan bersama-sama untuk pengembangan sebuah project.
Contoh kasusnya adalah seperti diagram di bawah ini :

Ada 2 orang developer yang sedang mengembangkan sebuah website.
User 1 sebagai Project Manager dan
User 2 adalah Anggota Tim yang akan bantu Project Manager.
Mereka bekerja sama menggunakan git untuk mempermudah kolaborasi pekerjaan.
Melanjutkan artikel sebelumnya : Bekerja Dengan Remote Repository di Github
Isi Remote Repo = Local Repo User1 , seperti gambar di bawah ini.

Agar User 2 bisa memberikan kontribusi kepada User 1, maka hal-hal yang harus dilakukan adalah sebagai berikut
Langkah 1 : Invite Collaborator
Dikarenakan Repo User 1 ini bersifat Private, maka User 1 harus memberikan akses kepada User 2 agar User 2 bisa melihat Repo Test1 kepunyaan User 1.
Caranya adalah :
1. Pilih Repo yang akan diatur hak aksesnya, lalu tekan Tab Settings
2. Pilih Manage Access
3. Invite a Collaborator

Input alamat email User 2, lalu tekan tombol Add

Terlihat User 2 masih belum response.

Silahkan User 2 untuk memeriksa email nya. Terlihat email di User 2 seperti di bawah ini, tekan tombol “View Invitation”

Sebelum User 2 menekan tombol “View Invitation”, sebaiknya User 2 login dulu ke Github, sehingga nanti akan langsung masuk ke halaman berikut

Tekan tombol Accept invitation, sehingga tampilan di User 2 ada info “You now have push ….”

Langkah 2 : Clone Repo oleh user 2
Gunakan perintah git clone. Contoh di bawah ini saya clone melalui https. Nanti akan diminta login via web atau input Personal Access Token
$ git clone https://github.com/chandra-mulyana/test1.git
Cloning into 'test1'…
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 10 (delta 0), reused 10 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), done.
Langkah 3 : Membuat Alias
Untuk memudahkan melihat log dari setiap commit, kita akan buat alias . Silahkan masuk dulu ke Git Bash, lalu jalankan perintah
$ alias graph="git log --all --decorate --oneline --graph"
Kemudian dicoba jalankan perintah graph
$ graph
a4ef339 (HEAD -> master, origin/master, origin/HEAD) Commit Pertama
Terlihat baru 1 buah commit.
SKENARIO 1 : User 1 Membuat Modul_A , User 2 Membuat Modul_B
Gambar di bawah ini terlihat bahwa User 1 sudah membuat Folder modul_a beserta file isi_modul_a.txt di dalamnya.

Kemudian User 1 melakukan PUSH ke Remote Repo
Sehingga di Remote berisi

User 2 membuat Folder modul_b dan isi_modul_b.txt. Terlihat pada gambar di bawah ini, modul_a yang sudah dibuat oleh User 1 belum muncul.

Kemudian User 2 melakukan commit, dilanjut dengan PUSH ke Remote, maka akan muncul error seperti berikut
$ git push origin master
To https://github.com/chandra-mulyana/test1.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/chandra-mulyana/test1.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull …') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Katanya, ada folder/files yang di remote ada, tapi di local repo User 2 tidak ada.
Dalam hal ini folder modul_a beserta isinya belum ada di local repo User 2.
Error Message di atas menginformasikan kepada kita untuk FETCH terlebih dahulu untuk melihat commit terakhir yang ada di Remote Repo
Jalankan perintah berikut di USER 2
$ git fetch
Kemudian jalankan perintah graph untuk melihat log nya
$ graph
9db8e01 (HEAD -> master) Tambah Folder dan File Modul B
| * 64b72dc (origin/master, origin/HEAD) Tambah Folder dan File Modul A
|/
a4ef339 Commit Pertama
Terlihat sudah ada cabang dari “Commit Pertama”, yaitu commit yang dilakukan oleh USER 2 (9db8e01) dan commit yang sudah ada di Remote Repo (64b72dc)
Agar pekerjaan USER 2 bisa di push ke Remote Repo, maka USER 2 harus melakukan PULL terlebih dahulu untuk merge Remote Repo dan Local Repo
$ git pull origin master
Terlihat Folder modul_a sudah ada di local repo USER 2

kita coba jalankan git status
$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
new file: modul_a/isi_modul_a.txt
Karena USER 1 dan USER 2 melakukan editing di file yang berbeda, sehingga tidak ada conflict, tapi tetap harus dilakukan merge dengan perintah git commit.
USER 2 melakukan git commit lalu git push ke Remote Repo, sehingga tampilan di Remote Repo adalah sebagai berikut

Sekarang Local Repo USER 1, masih belum memiliki folder Modul_b dan USER 1 akan melakukan penambahan file lagi .
USER 1 dapat melakukan perintah git fetch lalu git status
$ git status
On branch master
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree clean
Katanya Local Repo kita tertinggal dari Remote Repo, kita harus menjalankan PULL agar Local Repo kita update. Sebelum PULL, kita coba lihat dulu menggunakan perintah graph
$ graph
d552c3d (origin/master) Tambah Modul b dan isinya
|\
| * 64b72dc (HEAD -> master) Tambah Folder dan File Modul A
| 9db8e01 Tambah Folder dan File Modul B
|/
a4ef339 Commit Pertama
Terlihat Local Repo (64b72dc) tertinggal dari Remote Repo (d552c3d). Sekarang kita lakukan git pull
$ git pull
Updating 64b72dc..d552c3d
Fast-forward
modul_b/isi_modul_b.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 modul_b/isi_modul_b.txt
Kemudian jalankan graph, terlihat posisi HEAD -> master sudah sama dengan origin/master
$ graph
d552c3d (HEAD -> master, origin/master) Tambah Modul b dan isinya
|\
| * 64b72dc Tambah Folder dan File Modul A
| 9db8e01 Tambah Folder dan File Modul B
|/
a4ef339 Commit Pertama
Kesimpulannya :
Jika kita baru buka PC/Laptop dan akan mengedit file atu membuat file baru , sebaiknya langsung lakukan perintah git pull agar Local Repo kita sama dengan Remote Repo.
Kolaborasi tanpa Branch ini mungkin bisa digunakan jika hanya 2 orang, karena semakin banyak orang, akan sulit untuk manage conflict.
Jika lebih dari 2 orang sebaiknya tiap orang membuat branch dan melakukan pull request. Setelah itu review bersama hasil Pull Request tersebut.
Atau bisa menggunakan metode Fork
Baca Juga : Model Pengembangan Kolaboratif Github
Pingback: Model Pengembangan Kolaboratif Github - Stelselmatig