Jika Anda mengkloning repositori Git di Mac dan folder submodulnya kosong, buka Terminal, masuk ke repositori tersebut, lalu jalankan git submodule update --init --recursive. Perintah ini menginisialisasi submodul yang dicatat oleh proyek, melakukan checkout commit yang ditentukan oleh repositori induk, dan juga menangani submodul bersarang (nested). Anda memerlukan Git yang sudah terinstal dan akses ke repositori jarak jauh (remote) dari setiap submodul.

Jalankan perintah inisialisasi di repositori yang dikloning

Buka Terminal dan gunakan cd untuk masuk ke direktori yang dibuat oleh git clone. Jika nama direktori mengandung spasi, apit dengan tanda kutip, misalnya:

cd "$HOME/Projects/My Project"
git submodule update --init --recursive

Ganti jalur (path) contoh tersebut dengan lokasi klon Anda yang sebenarnya. Anda juga dapat mengetikkan cd , menyeret folder repositori dari Finder ke jendela Terminal untuk menyisipkan jalurnya, lalu menekan Return. Apple mendokumentasikan Terminal sebagai antarmuka baris perintah macOS dan menetapkan zsh sebagai shell default-nya; perintah-perintah di atas menggunakan sintaks shell biasa yang berfungsi di zsh. Membuka atau keluar dari Terminal di Mac, Mengubah shell default di Terminal di Mac

Dokumentasi resmi Git menjelaskan bahwa --init menginisialisasi submodul yang belum diinisialisasi, sedangkan --recursive juga memperbarui submodul yang bersarang. update mengambil commit yang hilang dan melakukan checkout revisi yang diharapkan oleh repositori induk. Dokumentasi git-submodule

Periksa apakah submodul telah diinisialisasi

Untuk melihat apa yang dicatat oleh repositori induk, jalankan:

git submodule status --recursive

Baris status submodul biasanya menampilkan ID commit dan jalur. Tanda minus di awal berarti submodul tersebut belum diinisialisasi; tanda plus berarti commit yang di-checkout berbeda dari commit yang dicatat oleh repositori induk; dan U menunjukkan adanya konflik. Opsi status rekursif juga melaporkan submodul yang bersarang. Dokumentasi git-submodule

Jika output menampilkan jalur dengan tanda minus, jalankan kembali perintah inisialisasi dari direktori tingkat atas repositori. Jika tidak ada submodul yang muncul, periksa apakah klon saat ini benar-benar berisi file .gitmodules dan apakah Anda berada di repositori yang tepat. Suatu repositori mungkin tidak memiliki submodul, atau commit yang Anda kloning mungkin tidak mencatat submodul apa pun.

Pahami revisi mana yang di-checkout

Submodul adalah repositori Git tersendiri, dan repositori induk mencatat commit tertentu untuk submodul tersebut. Perilaku update reguler melakukan checkout pada commit yang dicatat tersebut, yang biasanya membuat submodul berada dalam status HEAD terlepas (detached HEAD). Hal itu memang wajar ketika Anda sedang menyiapkan proyek induk: ini mereproduksi versi yang dipilih oleh induk. Git - Submodules, Dokumentasi git-submodule

Oleh karena itu, jangan tambahkan --remote jika tujuan Anda hanya untuk menginisialisasi klon. Opsi tersebut menggunakan cabang pelacak jarak jauh (remote-tracking branch) milik submodul alih-alih commit yang dicatat oleh induk, yang dapat menghasilkan versi yang berbeda. Jika Anda berniat mengembangkan kode di dalam submodul, pelajari alur kerja proyek terlebih dahulu; beralih ke cabang lain atau membuat commit di dalamnya adalah hal yang terpisah dari sekadar menginisialisasinya.

Jika perintah gagal

Pembaruan submodul perlu menghubungi remote yang terdaftar di konfigurasi proyek, sehingga gangguan jaringan atau ketiadaan hak akses dapat mencegah terjadinya checkout. Submodul privat mungkin mengharuskan Anda melakukan autentikasi dengan layanan hosting atau memiliki izin akses ke repositori tersebut. Jika Git melaporkan bahwa ia tidak dapat menemukan repositori atau tidak dapat menyelesaikan host, pastikan koneksi jaringan dan hak akses Anda, lalu coba lagi.

Jika sebuah proyek baru saja mengubah URL submodul, git submodule sync --recursive dapat menyinkronkan konfigurasi URL lokal dari .gitmodules; lanjutkan dengan git submodule update --init --recursive. Git mendokumentasikan sync untuk memperbarui konfigurasi URL bagi submodul yang sudah diinisialisasi atau yang baru ditambahkan. Dokumentasi git-submodule

Jika Anda sudah memiliki pekerjaan lokal di dalam submodul, periksalah sebelum memaksakan pembaruan apa pun atau beralih revisi. Perintah inisialisasi standar tidak meminta Git untuk memaksa checkout menimpa perubahan lokal; selesaikan atau simpan pekerjaan tersebut secara cermat alih-alih menghapus direktori sebagai jalan pintas penyelesaian masalah.

Setelah git submodule status --recursive menampilkan ID commit yang diharapkan tanpa tanda minus di awal, berarti revisi submodul yang dicatat repositori telah berhasil di-checkout. Lanjutkan bekerja dari repositori induk kecuali jika instruksi proyek mengharuskan pekerjaan terpisah di dalam submodul.

Sumber