Alih-alih perkenalan
Halo! Hari ini kita akan berbicara tentang sistem kontrol versi, yaitu Git.
Dasar Git
Git adalah sistem kontrol versi terdistribusi untuk kode kita. Mengapa kita membutuhkannya? Tim terdistribusi memerlukan semacam sistem untuk mengelola pekerjaan mereka. Diperlukan untuk melacak perubahan yang terjadi dari waktu ke waktu. Artinya, kita harus bisa melihat langkah demi langkah file mana yang telah berubah dan bagaimana caranya. Ini sangat penting saat Anda menyelidiki apa yang berubah dalam konteks satu tugas, sehingga memungkinkan untuk mengembalikan perubahan tersebut.Menginstal Git
Mari instal Java di komputer Anda.Menginstal di Windows
Seperti biasa, Anda perlu mengunduh dan menjalankan file exe. Semuanya sederhana di sini: klik tautan Google pertama , lakukan penginstalan, dan hanya itu. Untuk melakukan ini, kami akan menggunakan konsol bash yang disediakan oleh Windows. Di Windows, Anda perlu menjalankan Git Bash. Begini tampilannya di Start Menu:

Menginstal di Linux
Biasanya Git adalah bagian dari distribusi Linux dan sudah diinstal, karena ini adalah alat yang awalnya ditulis untuk pengembangan kernel Linux. Tetapi ada situasi ketika tidak. Untuk memeriksa, Anda perlu membuka terminal dan menulis: git --version. Jika Anda mendapatkan jawaban yang dapat dipahami, maka tidak ada yang perlu diinstal. Buka terminal dan instal Git di Ubuntu . Saya sedang mengerjakan Ubuntu, jadi saya dapat memberi tahu Anda apa yang harus ditulis untuknya: sudo apt-get install git.Menginstal di macOS
Di sini juga, Anda harus terlebih dahulu memeriksa apakah Git sudah ada. Jika belum punya, maka cara termudah untuk mendapatkannya adalah dengan mendownload versi terbarunya disini . Jika Xcode diinstal, maka Git pasti akan diinstal secara otomatis.Pengaturan Git
Git memiliki pengaturan pengguna untuk pengguna yang akan mengirimkan pekerjaan. Ini masuk akal dan perlu, karena Git mengambil informasi ini untuk bidang Penulis saat komit dibuat. Siapkan nama pengguna dan kata sandi untuk semua proyek Anda dengan menjalankan perintah berikut:
git config --global user.name "Ivan Ivanov"
git config --global user.email ivan.ivanov@gmail.com
Jika Anda perlu mengubah penulis untuk proyek tertentu, Anda dapat menghapus "--global". Ini akan memberi kita yang berikut:
git config user.name "Ivan Ivanov"
git config user.email ivan.ivanov@gmail.com
Sedikit teori...
Untuk menyelami topik ini, kami harus memperkenalkan Anda pada beberapa kata dan tindakan baru...- repositori git
- melakukan
- cabang
- menggabungkan
- konflik
- menarik
- dorongan
- cara mengabaikan beberapa file (.gitignore)
Status di Git
Git memiliki beberapa patung yang perlu dipahami dan diingat:- tidak terlacak
- diubah
- dipentaskan
- berkomitmen
Bagaimana seharusnya Anda memahami ini?
Ini adalah status yang berlaku untuk file yang berisi kode kami:- File yang dibuat tetapi belum ditambahkan ke repositori memiliki status "tidak terlacak".
- Saat kami melakukan perubahan pada file yang telah ditambahkan ke repositori Git, maka statusnya "dimodifikasi".
- Di antara file yang telah kami ubah, kami memilih yang kami butuhkan, dan kelas-kelas ini diubah menjadi status "bertahap".
- Komit dibuat dari file yang disiapkan dalam keadaan bertahap dan masuk ke repositori Git. Setelah itu, tidak ada file dengan status "dipentaskan". Tapi mungkin masih ada file yang statusnya "dimodifikasi".

Apa itu komit?
Komit adalah acara utama dalam hal kontrol versi. Ini berisi semua perubahan yang dibuat sejak komit dimulai. Komit ditautkan bersama seperti daftar tertaut tunggal. Lebih khusus lagi: Ada komit pertama. Saat komit kedua dibuat, komit tahu apa yang muncul setelah komit pertama. Dan dengan cara ini, informasi dapat dilacak. Sebuah komit juga memiliki informasinya sendiri, yang disebut metadata:- pengidentifikasi unik komit, yang dapat digunakan untuk menemukannya
- nama pembuat komit, yang membuatnya
- tanggal komit dibuat
- komentar yang menjelaskan apa yang dilakukan selama komit

Apa itu cabang?
Cabang adalah penunjuk ke beberapa komit. Karena sebuah komit mengetahui komit mana yang mendahuluinya, ketika sebuah cabang menunjuk ke sebuah komit, semua komit sebelumnya juga berlaku untuknya. Karenanya, kami dapat mengatakan bahwa Anda dapat memiliki cabang sebanyak yang Anda inginkan untuk menunjuk ke komit yang sama. Pekerjaan terjadi di cabang, jadi saat komit baru dibuat, cabang memindahkan penunjuknya ke komit yang lebih baru.Memulai dengan Git
Anda dapat bekerja dengan repositori lokal sendiri maupun dengan repositori jarak jauh. Untuk mempraktikkan perintah yang diperlukan, Anda dapat membatasi diri pada repositori lokal. Itu hanya menyimpan semua informasi proyek secara lokal di folder .git. Jika kita berbicara tentang repositori jarak jauh, maka semua informasi disimpan di suatu tempat di server jarak jauh: hanya salinan proyek yang disimpan secara lokal. Perubahan yang dilakukan pada salinan lokal Anda dapat didorong (git push) ke repositori jarak jauh. Dalam diskusi kami di sini dan di bawah ini, kami berbicara tentang bekerja dengan Git di konsol. Tentu saja, Anda dapat menggunakan semacam solusi berbasis GUI (misalnya, IntelliJ IDEA), tetapi pertama-tama Anda harus mencari tahu perintah apa yang sedang dijalankan dan apa artinya.Bekerja dengan Git di repositori lokal
Selanjutnya, saya sarankan Anda mengikuti dan melakukan semua langkah yang saya lakukan saat Anda membaca artikel. Hal ini akan meningkatkan pemahaman dan penguasaan materi. Nah, selamat makan! :) Untuk membuat repositori lokal, Anda perlu menulis:
git init

git status

- git add -A — tambahkan semua file ke status "staged".
- git tambahkan. — tambahkan semua file dari folder ini dan semua subfolder. Pada dasarnya, ini sama dengan yang sebelumnya
- git add <file name> — menambahkan file tertentu. Di sini Anda dapat menggunakan ekspresi reguler untuk menambahkan file menurut beberapa pola. Misalnya, git add *.java: Ini berarti Anda hanya ingin menambahkan file dengan ekstensi java.
git add *.txt
Untuk memeriksa statusnya, kami menggunakan perintah yang sudah kami kenal:
git status

git commit -m "all txt files were added to the project"

git log

git status

git status

git diff

git add test_resource.txt
git commit -m "added hello word! to test_resource.txt"
Untuk melihat semua komitmen, tulis:
git log

git add GitTest.java
git commit -m "added GitTest.java"
git status

Bekerja dengan .gitignore
Jelas, kami hanya ingin menyimpan kode sumber saja, dan tidak ada yang lain, di dalam repositori. Jadi apa lagi yang bisa ada? Minimal, kelas dan/atau file yang dikompilasi dihasilkan oleh lingkungan pengembangan. Untuk memberi tahu Git agar mengabaikannya, kita perlu membuat file khusus. Lakukan ini: buat file bernama .gitignore di root proyek. Setiap baris dalam file ini mewakili pola yang harus diabaikan. Dalam contoh ini, file .gitignore akan terlihat seperti ini:
```
*.class
target/
*.iml
.idea/
```
Mari lihat:
- Baris pertama adalah mengabaikan semua file dengan ekstensi .class
- Baris kedua adalah mengabaikan folder "target" dan semua isinya
- Baris ketiga adalah mengabaikan semua file dengan ekstensi .iml
- Baris keempat adalah mengabaikan folder .idea
git status


git add .gitignore
git commit -m "added .gitignore file"
Dan sekarang momen kebenaran: kami memiliki kelas terkompilasi GitTest.class yang "tidak terlacak", yang tidak ingin kami tambahkan ke repositori Git. Sekarang kita akan melihat efek dari file .gitignore:
git status

Bekerja dengan cabang dan semacamnya
Secara alami, bekerja di satu cabang saja tidak nyaman untuk pengembang tunggal, dan tidak mungkin bila ada lebih dari satu orang dalam satu tim. Makanya kami punya cabang. Seperti yang saya katakan sebelumnya, cabang hanyalah penunjuk yang dapat dipindahkan untuk melakukan. Pada bagian ini, kita akan mengeksplorasi bekerja di cabang yang berbeda: bagaimana menggabungkan perubahan dari satu cabang ke cabang lainnya, konflik apa yang mungkin muncul, dan banyak lagi. Untuk melihat daftar semua cabang di repositori dan memahami di mana Anda berada, Anda perlu menulis:
git branch -a

- buat cabang baru berdasarkan cabang tempat kita berada (99% kasus)
- buat cabang berdasarkan komit tertentu (1% kasus)
Mari buat cabang berdasarkan komit tertentu
Kami akan mengandalkan pengidentifikasi unik komit. Untuk menemukannya, kami menulis:
git log

git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
Cabang dibuat hanya dengan dua komit pertama dari cabang master. Untuk memverifikasi ini, pertama-tama kami memastikan untuk beralih ke cabang lain dan melihat jumlah komit di sana:
git status
git log

git branch -a

Mari buat cabang berdasarkan yang sekarang
Cara kedua untuk membuat cabang adalah dengan membuatnya dari yang lain. Saya ingin membuat cabang berdasarkan cabang master. Pertama, saya perlu beralih ke sana, dan langkah selanjutnya adalah membuat yang baru. Mari lihat:- git checkout master — beralih ke cabang master
- git status — verifikasi bahwa kita benar-benar berada di cabang master

git checkout -b feature/update-txt-files

Resolusi konflik
Sebelum kita menjelajahi apa itu konflik, kita perlu berbicara tentang menggabungkan satu cabang ke cabang lainnya. Gambar ini menggambarkan proses penggabungan satu cabang ke cabang lainnya:

git add *.txt
git commit -m "updated txt files"
git log

git checkout master
git merge feature/update-txt-files
git log

git branch -D feature/update-txt-files
Semuanya jelas sejauh ini, ya? Mari kita perumit situasinya: sekarang katakanlah Anda perlu mengubah file txt lagi. Tapi sekarang file ini juga akan diubah di cabang master. Dengan kata lain, itu akan berubah secara paralel. Git tidak akan dapat mengetahui apa yang harus dilakukan ketika kita ingin menggabungkan kode baru kita ke dalam cabang master. Ayo pergi! Kami akan membuat cabang baru berdasarkan master, membuat perubahan pada text_resource.txt, dan membuat komit untuk pekerjaan ini:
git checkout -b feature/add-header
... we make changes to the file

git add *.txt
git commit -m "added header to txt"

git checkout master
… we updated test_resource.txt

git add test_resource.txt
git commit -m "added master header to txt"
Dan sekarang hal yang paling menarik: kita perlu menggabungkan perubahan dari cabang feature/add-header ke master. Kami berada di cabang master, jadi kami hanya perlu menulis:
git merge feature/add-header
Tetapi hasilnya akan menjadi konflik dalam file test_resource.txt: 

- Perubahan yang ada di baris ini di cabang master ditemukan antara "<<<<<<<< HEAD" dan "=======".
- Perubahan yang ada di cabang feature/add-header ditemukan antara "=======" dan ">>>>>>> feature/add-header".

git status

git add *.txt

git commit

Bekerja dengan repositori jarak jauh
Langkah terakhir adalah memikirkan beberapa perintah lagi yang diperlukan untuk bekerja dengan repositori jarak jauh. Seperti yang saya katakan, repositori jarak jauh adalah suatu tempat di mana repositori disimpan dan dari mana Anda dapat mengkloningnya. Apa jenis repositori jarak jauh yang ada? Contoh:-
GitHub adalah platform penyimpanan terbesar untuk repositori dan pengembangan kolaboratif. Sudah saya uraikan di artikel sebelumnya.
Ikuti saya di GitHub . Saya sering memamerkan pekerjaan saya di sana di bidang-bidang yang saya pelajari untuk bekerja. -
GitLab adalah alat berbasis web untuk siklus hidup DevOps dengan sumber terbuka . Ini adalah sistem berbasis Git untuk mengelola repositori kode dengan wikinya sendiri, sistem pelacakan bug , pipa CI/CD, dan fungsi lainnya.
Setelah berita bahwa Microsoft membeli GitHub, beberapa pengembang menggandakan proyek mereka di GitLab. -
BitBucket adalah layanan web untuk hosting proyek dan pengembangan kolaboratif berdasarkan sistem kontrol versi Mercurial dan Git. Pada suatu waktu itu memiliki keuntungan besar dibandingkan GitHub karena menawarkan repositori pribadi gratis. Tahun lalu, GitHub juga memperkenalkan kemampuan ini kepada semua orang secara gratis.
-
Dan seterusnya…
git clone https://github.com/romankh3/git-demo
Sekarang ada salinan lokal lengkap dari proyek tersebut. Untuk memastikan bahwa salinan lokal dari proyek tersebut adalah yang terbaru, Anda perlu menarik proyek tersebut dengan menulis:
git pull


git add test_resource.txt
git commit -m "prepared txt for pushing"
Perintah untuk mendorong ini ke repositori jarak jauh adalah:
git push

Tautan yang berguna
- Dokumentasi resmi Git . Saya merekomendasikannya sebagai referensi.
GO TO FULL VERSION