Table of Contents
Git adalah sebuah sistem kontrol versi yang sangat populer dan dikenal luas di kalangan pengembang perangkat lunak. Ini dirancang untuk mengelola perubahan kode sumber dari waktu ke waktu dan memfasilitasi kolaborasi di antara tim pengembang. Berikut adalah beberapa poin penting tentang Git:
- Manajemen Revisi: Git memungkinkan pengembang untuk melacak setiap perubahan yang terjadi pada kode sumber, mulai dari pembuatan baru, perubahan, hingga penghapusan. Ini memungkinkan pengembang untuk kembali ke versi sebelumnya (rollback) atau membandingkan perubahan antara versi yang berbeda.
- Kolaborasi Tim: Dengan Git, beberapa pengembang dapat bekerja pada proyek yang sama secara bersamaan. Git memfasilitasi manajemen konflik ketika dua atau lebih orang mengubah bagian yang sama dari kode sumber.
- Distribusi Terdistribusi: Git adalah sistem terdistribusi, yang berarti setiap pengembang memiliki salinan lengkap dari repositori proyek lokal mereka. Ini memungkinkan pengembang untuk bekerja secara offline dan menyinkronkan perubahan mereka ke repositori utama saat mereka terhubung kembali.
- Rantai Perintah: Git memiliki banyak perintah yang kuat untuk mengelola repositori, termasuk
git init
untuk memulai repositori baru,git clone
untuk mengambil salinan repositori yang ada,git add
untuk menambahkan file ke area stage,git commit
untuk menyimpan perubahan, dan banyak lagi. - Platform Agnostik: Git dapat digunakan di berbagai platform seperti Windows, macOS, dan Linux, dan mendukung berbagai jenis proyek, dari perangkat lunak sumber terbuka hingga proyek internal perusahaan besar.
- Ekosistem yang Kaya: Git didukung oleh ekosistem yang kaya, termasuk layanan hosting repositori seperti GitHub, GitLab, dan Bitbucket, serta berbagai alat bantu untuk kolaborasi, manajemen proyek, dan integrasi CI/CD.
Git sangat penting dalam pengembangan perangkat lunak modern karena memfasilitasi manajemen kode yang efisien, kolaborasi tim yang lebih baik, dan pengembangan proyek yang lebih terstruktur.
Asal Usul Git
Sejarah singkat pembuatan Git oleh Linus Torvalds
Git dikembangkan oleh Linus Torvalds, yang terkenal sebagai pencipta kernel Linux, pada tahun 2005. Proyek Git dimulai karena kebutuhan Linus untuk sistem kontrol versi yang lebih efisien untuk mengelola kode sumber kernel Linux yang berkembang pesat.
Sebelum Git, komunitas Linux menggunakan sistem kontrol versi lain seperti BitKeeper. Namun, ketika hubungan antara komunitas Linux dan pengembang BitKeeper berakhir pada 2005, Linus Torvalds memutuskan untuk membuat sistem kontrol versi baru yang dapat memenuhi kebutuhan spesifik proyek Linux.
Git dikembangkan dengan tujuan untuk:
- Kecepatan dan Efisiensi: Memiliki performa yang cepat dalam operasi-operasi kontrol versi seperti commit, branching, dan merging.
- Distribusi Terdistribusi: Setiap pengembang memiliki salinan lengkap dari repositori lokalnya, memungkinkan untuk bekerja secara terisolasi dan offline sebelum menyinkronkan perubahan ke repositori pusat.
- Kemudahan dalam Pengelolaan Cabang: Git dirancang untuk mendukung cabang-cabang (branches) yang ringan dan mudah digunakan, memungkinkan pengembangan paralel tanpa mengganggu kode utama.
Setelah dirilis pertama kali pada tahun 2005, Git mulai menjadi populer di kalangan pengembang perangkat lunak karena keunggulannya dalam manajemen versi dan kemampuan kolaborasi yang baik. Git sekarang menjadi standar de facto dalam pengembangan perangkat lunak, digunakan di berbagai industri dan proyek dari skala kecil hingga besar.
Perbandingan dengan sistem kontrol versi sebelumnya
Sebelum Git, ada beberapa sistem kontrol versi yang populer digunakan, seperti Subversion (SVN), CVS (Concurrent Versions System), dan Perforce. Berikut perbandingan Git dengan sistem kontrol versi (SCM) lainnya yang relevan:
Perbandingan dengan SVN (Subversion):
- Tersebar vs Sentralisasi:
- Git: Terdistribusi (setiap pengembang memiliki salinan lengkap dari repositori).
- SVN: Sentralisasi (pengembang mengambil salinan dari repositori pusat).
- Performa:
- Git: Lebih cepat dalam operasi lokal seperti commit, branching, dan merging karena kebanyakan operasi dilakukan secara lokal.
- SVN: Lebih lambat karena operasi sering memerlukan koneksi dengan repositori pusat.
- Manajemen Cabang (Branching):
- Git: Mendukung cabang-cabang yang ringan dan mudah dibuat. Operasi branching dan merging dianggap lebih mudah.
- SVN: Cabang cenderung lebih berat dan kurang fleksibel. Memerlukan operasi server untuk membuat cabang.
- Manajemen Riwayat (History Management):
- Git: Menyimpan seluruh riwayat perubahan di setiap salinan lokal, memungkinkan untuk eksperimen dan revisi lokal sebelum menyinkronkan dengan repositori pusat.
- SVN: Riwayat disimpan di repositori pusat, membatasi eksperimen dan revisi lokal sebelum melakukan commit.
- Penanganan Konflik:
- Git: Memerlukan pemecahan konflik secara manual tetapi memberikan kontrol yang lebih besar kepada pengguna.
- SVN: Terkadang memerlukan intervensi manual untuk menyelesaikan konflik tetapi cenderung lebih terstruktur dalam manajemen konflik.
- Adopsi Industri:
- Git: Semakin populer di kalangan pengembang open-source dan perusahaan besar.
- SVN: Masih digunakan, terutama di organisasi yang lebih besar dengan kebutuhan kontrol versi yang lebih terpusat.
Konsep Dasar Git
Pengertian dasar tentang repositori, commit, branch, dan merge
- Repositori:
- Repositori adalah tempat penyimpanan yang mengandung semua file proyek dan riwayat perubahannya. Dalam konteks Git, repositori dapat berada secara lokal di komputer pengembang atau di server jarak jauh seperti GitHub, GitLab, atau Bitbucket.
- Commit:
- Commit adalah tindakan menyimpan perubahan yang dilakukan pada file atau direktori dalam repositori Git. Setiap commit memiliki pesan yang menjelaskan perubahan yang dilakukan. Setelah di-commit, perubahan tersebut disimpan secara permanen dalam riwayat repositori.
- Branch (Cabang):
- Branch adalah versi paralel dari repositori yang memungkinkan pengembang untuk bekerja secara terisolasi pada fitur atau perubahan tertentu tanpa mempengaruhi kode utama (biasanya disebut sebagai branch utama atau
master
dalam Git). Branch memungkinkan pengembang untuk bereksperimen dengan fitur baru tanpa mengubah kode yang stabil.
- Branch adalah versi paralel dari repositori yang memungkinkan pengembang untuk bekerja secara terisolasi pada fitur atau perubahan tertentu tanpa mempengaruhi kode utama (biasanya disebut sebagai branch utama atau
- Merge (Penggabungan):
- Merge adalah proses menggabungkan perubahan dari satu branch ke branch lainnya. Misalnya, setelah selesai mengembangkan dan menguji fitur baru di branch pengembangan, pengembang dapat menggabungkan (merge) perubahan tersebut ke branch utama untuk dimasukkan ke dalam versi stabil aplikasi.
Dengan pemahaman yang baik tentang konsep repositori, commit, branch, dan merge, pengembang dapat mengelola dan berkolaborasi dengan lebih efektif dalam pengembangan perangkat lunak, memungkinkan pengembangan fitur baru dengan lebih aman dan mengelola riwayat perubahan dengan lebih baik.
Struktur Siklus Kerja Git
Git membedakan antara Working Directory, Staging Area, dan Repository sebagai bagian dari siklus kerja untuk mengelola perubahan dalam kode sumber. Berikut adalah penjelasan singkat untuk setiap konsep:
- Working Directory (Direktori Kerja):
- Ini adalah direktori tempat pengembang bekerja dengan file proyek secara aktif. Working Directory adalah area lokal di komputer pengembang di mana file-file proyek disimpan dan diedit. Ini termasuk semua file yang terkait dengan proyek, baik yang telah di-commit maupun yang belum.
- Staging Area (Area Staging atau Index):
- Staging Area adalah area persiapan di antara Working Directory dan Repositori Git. Ini berfungsi sebagai area penengah di mana pengembang dapat menyiapkan perubahan sebelum dikommit ke dalam repositori utama. Pengembang menggunakan perintah
git add
untuk memindahkan perubahan dari Working Directory ke Staging Area. Dalam Staging Area, pengembang dapat memeriksa ulang perubahan yang akan dikomit sebelum akhirnya melakukan commit.
- Repository Git (Repositori):
- Repositori Git adalah database di mana Git menyimpan semua riwayat perubahan proyek, termasuk semua versi file-file yang ada dan metadata yang terkait. Ini adalah versi “terkomit” dari proyek yang mencatat setiap commit yang telah dilakukan oleh pengembang. Repositori Git umumnya terdiri dari dua bagian: direktori
.git
yang menyimpan metadata dan riwayat perubahan, serta direktori Working Directory yang berisi file-file aktual proyek.
Peran dan Perbedaan:
- Working Directory: Tempat di mana pengembang bekerja dengan file proyek, melakukan perubahan, dan mempersiapkan perubahan untuk dikomit.
- Staging Area: Area persiapan di antara Working Directory dan Repositori Git, di mana pengembang menambahkan perubahan sebelum dikomit. Ini memungkinkan pengembang untuk memeriksa ulang perubahan yang akan dikirimkan ke repositori utama.
- Repository Git: Tempat di mana semua versi file dan riwayat perubahan disimpan secara permanen. Ini mencatat setiap commit yang telah dilakukan dan menyediakan akses ke semua versi dari proyek tersebut.
Dengan menggunakan Working Directory, Staging Area, dan Repositori Git, pengembang dapat mengelola perubahan secara terstruktur, memfasilitasi kolaborasi tim, dan memelihara riwayat perubahan proyek dengan lebih efektif menggunakan Git.
Keunggulan Git
Kecepatan dan Efisiensi dalam Manajemen Versi
Kecepatan dan efisiensi dalam manajemen versi adalah kunci dalam memastikan pengembangan perangkat lunak berjalan lancar dan responsif terhadap perubahan. Ini mencakup beberapa aspek penting:
- Performa Operasional: Sistem kontrol versi yang cepat memungkinkan pengguna untuk melakukan operasi seperti commit, branching, merging, dan perubahan status dengan responsif. Ini mengurangi waktu tunggu dan memungkinkan pengembang untuk fokus pada coding daripada administrasi sistem.
- Manajemen Riwayat yang Efisien: Kemampuan untuk dengan cepat mengakses riwayat perubahan dan membandingkan versi memungkinkan pengembang untuk menemukan bug, mengembangkan fitur baru, atau melakukan rollback dengan mudah dan cepat.
- Kemampuan Scalability: Sistem yang efisien dapat menangani repositori besar dengan sejumlah besar file dan sejarah panjang tanpa mengorbankan performa atau kinerja.
- Kolaborasi yang Mudah: Memungkinkan tim untuk bekerja bersama secara efisien, baik secara lokal maupun secara terdistribusi, dengan menjamin bahwa semua anggota tim memiliki akses ke versi terbaru dari kode proyek.
- Pengelolaan Cabang yang Responsif: Mendukung penggunaan cabang (branch) yang mudah dan efisien, memungkinkan pengembang untuk mengembangkan fitur secara paralel tanpa konflik atau kesulitan dalam menggabungkan kembali perubahan.
- Integrasi dengan Alat dan Layanan Lain: Sistem yang responsif memfasilitasi integrasi yang lancar dengan alat CI/CD (Continuous Integration/Continuous Deployment) dan alat manajemen proyek lainnya, meningkatkan produktivitas dan kualitas pengembangan.
Secara keseluruhan, kecepatan dan efisiensi dalam manajemen versi memainkan peran krusial dalam pengembangan perangkat lunak modern, memungkinkan tim untuk lebih responsif terhadap kebutuhan bisnis dan pengguna akhir.
Optimalisasi Kolaborasi dan Manajemen Konflik dengan Git
Kemudahan dalam kolaborasi tim dan manajemen konflik adalah dua aspek penting dalam pengembangan perangkat lunak yang menggunakan sistem kontrol versi seperti Git. Berikut penjelasan untuk kedua aspek tersebut:
- Kemudahan dalam Kolaborasi Tim:
- Git memfasilitasi kolaborasi tim dengan cara yang efisien dan terstruktur. Setiap anggota tim dapat bekerja secara paralel pada proyek yang sama tanpa saling mengganggu, berkat kemampuan Git dalam mengelola cabang (branch) yang mudah dan efisien.
- Dengan menggunakan cabang, pengembang dapat membuat versi terpisah dari kode proyek untuk mengembangkan fitur baru atau memperbaiki bug tanpa mengubah kode yang ada di branch utama (misalnya
master
). - Tim juga dapat berkolaborasi secara terdistribusi, di mana setiap anggota tim memiliki salinan penuh dari repositori lokalnya. Perubahan yang dilakukan oleh satu anggota tim dapat dengan mudah diintegrasikan kembali ke repositori utama setelah melalui proses review dan pengujian.
- Manajemen Konflik:
- Konflik terjadi ketika dua atau lebih perubahan saling bertentangan dalam kode yang sama. Git menyediakan alat bantu untuk mengelola konflik ini, terutama saat menggabungkan perubahan dari cabang ke branch utama.
- Ketika Git mendeteksi konflik, pengembang harus menyelesaikannya dengan menentukan bagaimana menggabungkan perubahan yang bertentangan. Ini bisa melibatkan penyelesaian manual, di mana pengembang meninjau perubahan, memutuskan bagaimana menggabungkannya, dan kemudian melakukan commit kembali ke repositori.
- Git juga menyediakan alat untuk membandingkan perubahan, memungkinkan pengembang untuk melihat dengan jelas perbedaan antara dua versi file atau direktori, yang membantu dalam pemecahan konflik dengan lebih efektif.
Dengan demikian, kemudahan dalam kolaborasi tim dan manajemen konflik adalah fitur kunci dalam Git yang memungkinkan tim pengembang untuk bekerja secara efisien, meminimalkan risiko konflik, dan meningkatkan produktivitas dalam pengembangan perangkat lunak.
Fitur Utama Git
Git memiliki beberapa fitur utama yang membuatnya sangat populer di kalangan pengembang perangkat lunak modern. Berikut adalah beberapa fitur utama Git:
- Distribusi Terdistribusi:
- Setiap pengembang memiliki salinan lengkap dari repositori secara lokal. Ini memungkinkan pengembang untuk bekerja secara terisolasi tanpa koneksi internet dan menyinkronkan perubahan mereka dengan repositori pusat ketika koneksi tersedia.
- Pemisahan Cabang yang Kuat:
- Git mendukung penggunaan cabang yang ringan dan mudah. Setiap pengembang dapat membuat cabang baru untuk mengembangkan fitur atau memperbaiki bug tanpa mengganggu kode yang stabil di cabang utama.
- Kemampuan Manajemen Versi yang Kuat:
- Git melacak setiap perubahan yang dilakukan pada file proyek. Setiap commit mencatat snapshot dari semua file pada saat itu, memungkinkan pengembang untuk dengan mudah kembali ke versi sebelumnya atau memeriksa riwayat perubahan.
- Efisiensi dan Kinerja Tinggi:
- Git dirancang untuk menjadi cepat dan efisien. Operasi seperti commit, branching, merging, dan pengecekan status file dilakukan secara lokal, mengurangi waktu tunggu dan memungkinkan pengembang untuk fokus pada pengembangan kode.
- Manajemen Konflik yang Terintegrasi:
- Git menyediakan alat untuk memantau dan menyelesaikan konflik yang mungkin terjadi saat menggabungkan perubahan dari cabang yang berbeda. Ini membantu dalam mengelola kolaborasi tim dan meminimalkan masalah saat bekerja secara bersamaan pada proyek yang sama.
- Integrasi dengan Layanan Hosting Repositori:
- Git bekerja dengan baik dengan berbagai layanan hosting repositori seperti GitHub, GitLab, dan Bitbucket. Ini memfasilitasi kolaborasi tim yang lebih baik, manajemen proyek, dan integrasi dengan alat CI/CD (Continuous Integration/Continuous Deployment).
- Kinerja di Berbagai Platform:
- Git dapat digunakan di berbagai sistem operasi termasuk Windows, macOS, dan Linux. Ini memungkinkan pengembang untuk bekerja dengan konsisten di lingkungan pengembangan yang berbeda.
Fitur-fitur ini membuat Git menjadi pilihan utama untuk pengembangan perangkat lunak, baik untuk proyek kecil hingga besar, dan di berbagai industri.
Ekosistem Git
Ekosistem Git merujuk pada rangkaian alat, layanan, dan komunitas yang terkait dengan penggunaan Git dalam pengembangan perangkat lunak. Berikut adalah komponen utama dari ekosistem Git:
- Layanan Hosting Repositori:
- GitHub: Platform hosting repositori Git yang paling populer, menyediakan fitur kolaborasi, manajemen proyek, dan sosial untuk pengembang.
- GitLab: Alternatif lain yang menyediakan layanan mirip dengan GitHub, termasuk integrasi CI/CD dan manajemen siklus hidup aplikasi.
- Bitbucket: Dikelola oleh Atlassian, Bitbucket mendukung Git serta Mercurial, menyediakan alat untuk kolaborasi tim dan integrasi dengan produk Atlassian lainnya seperti Jira.
- Alat Manajemen Proyek dan Kolaborasi:
- Jira: Alat manajemen proyek yang umum digunakan untuk melacak pekerjaan, mengatur sprint, dan mengelola backlog. Jira memiliki integrasi yang kuat dengan Git untuk pelacakan perubahan dan manajemen proyek.
- Trello: Alat manajemen tugas yang memungkinkan pengguna untuk membuat papan kanban untuk mengatur dan memantau kemajuan proyek.
- Alat Integrasi CI/CD:
- Jenkins: Alat CI/CD open-source yang mendukung Git untuk otomatisasi pengujian, integrasi, dan penyebaran perangkat lunak.
- CircleCI: Layanan CI/CD yang menyediakan integrasi mudah dengan GitHub dan GitLab untuk mengotomatisasi proses pengujian dan penyebaran.
- Komunitas Pengembang dan Sumber Daya Edukasi:
- Komunitas Git yang aktif di GitHub, GitLab, dan forum-forum pengembang lainnya memberikan dukungan, diskusi, dan berbagi pengetahuan.
- Sumber daya pendidikan seperti kursus online, buku, dan tutorial di platform seperti Udemy, Coursera, dan situs web resmi Git menyediakan pelatihan dan pemahaman mendalam tentang penggunaan Git.
- Perangkat Lunak Pengembangan Terintegrasi (IDE):
- IDE seperti Visual Studio Code, IntelliJ IDEA, dan Eclipse memiliki integrasi Git yang kuat. Mereka menyediakan antarmuka pengguna grafis untuk berinteraksi dengan repositori Git, melakukan commit, mengelola cabang, dan menyelesaikan konflik.
Ekosistem Git yang luas dan terdiversifikasi ini mendukung pengembangan perangkat lunak modern dengan memberikan alat, sumber daya, dan platform untuk kolaborasi tim, manajemen proyek, dan otomatisasi pengembangan.
Penggunaan Git dalam Pengembangan Perangkat Lunak
Git memiliki peran penting dalam pengembangan perangkat lunak modern karena menyediakan sejumlah manfaat dan kemudahan bagi pengembang. Berikut adalah beberapa poin utama tentang penggunaan Git dalam pengembangan perangkat lunak:
- Manajemen Versi yang Efisien:
- Git memungkinkan pengembang untuk melacak setiap perubahan yang dilakukan pada kode sumber. Setiap commit mencatat snapshot dari semua file pada saat itu, memungkinkan tim untuk dengan mudah kembali ke versi sebelumnya atau memeriksa riwayat perubahan.
- Kolaborasi Tim yang Efektif:
- Dengan Git, tim pengembang dapat bekerja secara terdistribusi dan kolaboratif. Setiap anggota tim dapat memiliki salinan penuh dari repositori secara lokal dan melakukan perubahan secara independen di cabang masing-masing. Git menyederhanakan proses penggabungan (merge) perubahan dari berbagai cabang kembali ke repositori utama.
- Pengelolaan Cabang yang Fleksibel:
- Git memungkinkan penggunaan cabang yang ringan dan mudah. Setiap fitur atau perubahan dapat dikembangkan di cabang terpisah tanpa mengubah kode yang ada di branch utama (misalnya
master
). Ini membantu dalam mengisolasi fitur baru, mengembangkan eksperimen, dan meminimalkan dampak dari perubahan yang belum selesai.
- Pengujian dan Integrasi Kontinu (CI/CD):
- Git berintegrasi dengan baik dengan alat-alat CI/CD seperti Jenkins, CircleCI, atau GitHub Actions. Ini memungkinkan otomatisasi pengujian, integrasi, dan penyebaran perangkat lunak, sehingga meningkatkan kecepatan dan kualitas pengembangan.
- Repositori Terpusat dan Terdistribusi:
- Git mendukung model repositori terdistribusi, di mana setiap pengembang memiliki salinan penuh dari repositori secara lokal. Ini memungkinkan pengembang untuk bekerja secara terisolasi tanpa koneksi internet dan menyinkronkan perubahan mereka dengan repositori pusat ketika koneksi tersedia.
- Manajemen Konflik yang Terintegrasi:
- Git menyediakan alat untuk mendeteksi, menyelesaikan, dan mencegah konflik saat menggabungkan perubahan dari berbagai cabang. Ini memungkinkan pengembang untuk menyelesaikan konflik dengan lebih efisien dan meminimalkan kemungkinan kesalahan saat menggabungkan perubahan.
- Fleksibilitas dan Ketersediaan Platform:
- Git dapat digunakan di berbagai platform dan sistem operasi, termasuk Windows, macOS, dan Linux. Ini membuatnya populer di kalangan pengembang independen, perusahaan besar, dan komunitas open-source.
Penggunaan Git tidak hanya meningkatkan efisiensi pengembangan perangkat lunak tetapi juga memungkinkan tim untuk lebih responsif terhadap perubahan kebutuhan bisnis dan pengguna. Ini menjadikan Git sebagai salah satu alat yang paling penting dan tak tergantikan dalam ekosistem pengembangan perangkat lunak modern.
Kesimpulan
Git adalah alat yang krusial dalam pengembangan perangkat lunak modern karena beberapa alasan utama:
- Manajemen Versi Efisien: Git memungkinkan pengembang untuk melacak perubahan kode dengan detail yang sangat tinggi, termasuk kemampuan untuk kembali ke versi sebelumnya atau membandingkan perubahan dengan mudah.
- Kolaborasi Tim yang Terdistribusi: Dengan Git, tim pengembang dapat bekerja secara terdistribusi di berbagai lokasi. Setiap anggota tim dapat mengembangkan fitur baru atau memperbaiki bug di cabang (branch) terpisah, memfasilitasi kerja kolaboratif tanpa hambatan geografis.
- Pengelolaan Cabang yang Fleksibel: Git mendukung penggunaan cabang yang ringan dan mudah. Hal ini memungkinkan pengembang untuk mengisolasi perubahan, menguji fitur baru, dan eksperimen tanpa mengganggu kode yang stabil di branch utama.
- Integrasi dengan CI/CD: Git berintegrasi dengan alat-alat CI/CD seperti Jenkins atau GitHub Actions, memungkinkan otomatisasi pengujian, integrasi, dan penyebaran perangkat lunak. Hal ini meningkatkan efisiensi dan kualitas pengembangan.
- Manajemen Konflik yang Terintegrasi: Git menyediakan alat untuk mendeteksi dan menyelesaikan konflik yang mungkin terjadi saat menggabungkan perubahan dari berbagai cabang. Ini membantu tim untuk mengelola konflik dengan lebih efektif dan meminimalkan kesalahan saat mengintegrasikan perubahan.
- Fleksibilitas Platform: Git dapat digunakan di berbagai sistem operasi dan platform hosting repositori seperti GitHub, GitLab, atau Bitbucket. Ini membuatnya sangat cocok untuk digunakan oleh berbagai jenis organisasi, mulai dari perusahaan besar hingga proyek open-source.
Dengan semua fitur ini, Git tidak hanya memfasilitasi pengembangan perangkat lunak yang lebih terstruktur dan aman, tetapi juga meningkatkan produktivitas tim, mempercepat waktu rilis, dan membuat proses pengembangan lebih responsif terhadap perubahan kebutuhan bisnis dan pasar.