# GIT Basic ## Prerequisite ### Command line basics Gunakan - Terminal (Mac dan Linux) - Git-bash (Windows) Ganti folder ```bash cd <nama folder> cd .. # naik 1 folder ``` Buat folder ```bash mkdir <nama folder> ``` ## Basic ### Config ```bash git config --global user.name <nama> git config --global user.email <email> ``` ### Intialization Jika sudah mempunyai repo ```bash git clone <url> <nama folder> # Contoh git clone https://github.com/pemiluhmif/voting-booth.git voting ``` Jika belum ```bash git init # di folder baru ``` ### Add, Commit, Push (ACP) ```bash git add <nama file> git commit -m <commit name> git push <remote> <branch> ``` Contoh ```bash git add prima.py git commit -m "Menambah penghitung bilangan prima" git push origin master ``` ### Pull ```bash git pull <remote> <branch> ``` ## Intermediate ### Remote and branch #### Remote Remote adalah nama lain dari server untuk git, saat bekerja dengan banyak orang, tentu kode butuh ada di internet (misal: github) Secara default git (jika clone) akan membuat remote dengan nama `origin` (asal). Hal ini bisa dilihat dengan ```bash git remote -v ``` Jika kosong, itu hal normal jika membuat git dengan cara `git init` karena defaultnya akan buat git repo offline. Cara menambahkan ```bash git remote add origin <url> # contoh git remote add origin https://github.com/pemiluhmif/voting-booth.git ``` #### Branch Branch atau cabang pada git berguna untuk >1 orang mengerjakan kode yang sama dengan efektif. Secara default branchnya adalah dengan nama `master` #### Resolve conflict Jika suatu file conflict ``` CONFLICT (content): Merge conflict in <fileName> Automatic merge failed; fix conflicts and then commit the result. ``` Maka kita harus betulkan konflik itu, caranya dengan membuka file yang konflik, edit, add, commit, push. ## Advanced ### Collaborative working Misalkan ada sebuah repository yang ingin kalian edit, kalian tidak punya akses edit ke repo itu. Maka kalian harus `fork` repo tersebut Nah lalu kalian tambahkan repo aslinya ke remote dengan nama bebas (biasanya `upstream`) ```bash git remote add upstream https://github.com/bimoadityar/Test-pull-request.git ``` Saat kalian pull, pull lah dari remote yang upstream, contoh ```bash git pull upstream master ``` Perintah tersebut akan meng-pull dari repo aslinya Akan tetapi saat push tetap ke origin yang merupakan milik kalian ```bash git push origin master ``` Barulah setelah itu kalian buka github, ada pilihan, `new pull request` ## User story Contohnya kamu punya file ```cpp #include <iostream> int main(){ std::cout<<"Selamat datang di program ini"<<std::endl; std::cout<<"1+1 = "<<1+1<<std:endl; return 0; } ``` Lalu ada kalian dan teman kalian, ingin menambahkan sapaan di bagian depan, masalahnya kalian kurang berkomunikasi, sehingga jadinya dua-duanya edit file tersebut untuk menambahkan sapaan, tapi kalian tambahkan halo sedangkan teman kalian hai. Teman kalian sudah push, saat kalian mau push, muncul pesan ``` To https://github.com/jrandiny/testTambah.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/jrandiny/testTambah.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. ``` Kalian berpikir, "Oh ini error biasa, versi di server lebih baru, tinggal pull" ```bash git pull origin master ``` Eh tapi malah muncul ``` CONFLICT (content): Merge conflict in tambah.cpp Automatic merge failed; fix conflicts and then commit the result. ``` Tapi kalian sudah belajar di sekuro, cara resolve conflict Kalian buka file tambah.cpp ```cpp <<<<<<< HEAD std::cout<<"Halo, selamat datang di program ini"<<std::endl; ======= std::cout<<"Hai, selamat datang di program ini""<<std::endl; >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:Menambahkan hai ``` Kalian betulkan dengan cara pilih yang mau dipakai (misalkan kalian mau jadinya halo hai) ```cpp #include <iostream> int main(){ std::cout<<"Halo, Hai, Selamat datang di program ini"<<std::endl; std::cout<<"1+1 = "<<1+1<<std:endl; return 0; } ``` Lalu kalian add, commit, dan push Yay sudah tidak konflik