Perintah git init adalah pintu masuk paling mendasar: satu perintah yang mengubah folder biasa menjadi repository Git. Meskipun terlihat sepele, perilakunya menyimpan beberapa detail penting — bagaimana nama branch awal ditentukan, apa yang terjadi pada folder yang sudah berisi berkas, dan mengapa perintah ini aman dijalankan berulang kali. Pada chapter ini kita jalankan git init dalam berbagai skenario sungguhan di Git 2.47.3 dan bedah setiap keluarannya, termasuk dua variasi yang sering dijumpai: -b untuk nama branch dan --bare untuk repository tanpa area kerja.

Menjalankan git init #

Bentuk paling sederhana: buat folder proyek, masuk ke dalamnya, lalu jalankan git init:

bash
mkdir proyek-baru
cd proyek-baru
git init

Output yang Dihasilkan:

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/proyek-baru/.git/

Satu baris tersebut adalah seluruh keluaran yang Git berikan, dan isinya bisa kita baca sebagai tiga bagian:

  1. Initialized empty Git repository — repository baru berdiri dan masih kosong: belum ada satu commit pun.
  2. in .../proyek-baru/.git/ — lokasi folder .git yang baru dibuat; seluruh database riwayat proyek akan tinggal di sini. Jalur pada keluaran menyesuaikan lokasi direktori masing-masing.
  3. Keheningan selebihnya — tidak ada satu berkas proyek pun yang tersentuh, dan tidak ada pengaturan di luar folder tersebut yang berubah.

Nama branch awal tidak muncul pada keluaran, tetapi sudah ditetapkan saat init. Kita bisa memeriksanya dengan membaca posisi HEAD:

bash
git symbolic-ref HEAD

Output yang Dihasilkan:

text
refs/heads/main

Git menyiapkan HEAD mengarah ke branch main — repository ini akan mencatat commit pertamanya pada branch bernama main. Git versi lebih tua membawa bawaan yang berbeda, dan itulah alasan bentuk eksplisit berikut lebih aman untuk dipelajari.

Menentukan Nama Branch Awal dengan -b #

Sejak Git 2.28, nama branch awal ditentukan oleh pengaturan init.defaultBranch pada konfigurasi. Bila pengaturan itu belum diisi, Git memakai nama lama master sambil menampilkan saran untuk mengatur init.defaultBranch. Mesin pengujian Course ini sudah mengatur nilainya menjadi main, sehingga git init polos di atas menghasilkan main. Supaya hasilnya pasti di komputer mana pun, kita bisa menetapkan nama branch langsung pada perintahnya:

bash
git init -b main

Output yang Dihasilkan:

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/proyek-eksplisit/.git/

Opsi -b main membaca nama branch yang kita inginkan tanpa bergantung pada konfigurasi mesin. Seluruh materi Course ini memakai main — nama yang kini menjadi bawaan umum di layanan hosting — supaya keluaran pada komputer pembaca konsisten dengan contoh-contoh di sini. Pengaturan permanen lewat init.defaultBranch juga bisa; topiknya dibahas pada chapter git config . Seluruh opsi git init terdokumentasi resmi pada dokumentasi git init .

git init pada Folder yang Sudah Terisi #

Skenario yang paling sering terjadi di dunia nyata: proyek sudah berjalan lama tanpa version control, lalu kita ingin mulai melacaknya. git init dirancang aman untuk kasus ini. Mari kita buktikan dengan folder yang sudah berisi dua berkas:

bash
cd folder-isi
ls -A
git init
ls -A

Output yang Dihasilkan:

text
catatan-rapat.md
konfigurasi.ini
text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/folder-isi/.git/
text
.git
catatan-rapat.md
konfigurasi.ini

Perbandingan daftar berkas sebelum dan sesudah menunjukkan satu-satunya perubahan: folder .git muncul. Isi folder tidak tersentuh — git init hanya menciptakan database kosong, bukan memindahkan atau mengubah berkas apa pun. Status repository memperlihatkan konsekuensinya:

bash
git status

Output yang Dihasilkan:

text
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	catatan-rapat.md
	konfigurasi.ini

nothing added to commit but untracked files present (use "git add" to track)

Kedua berkas lama berstatus untracked: Git melihat keberadaannya, tetapi belum mengawasi isinya. Riwayat dimulai dari titik nol — berkas-berkas akan masuk ke snapshot pertama begitu kita menjalankan git add, dibahas pada chapter git add .

Menjalankan Ulang git init Itu Aman #

Perintah git init bersifat idempotent — menjalankannya kembali pada repository yang sudah ada tidak membangun ulang apa pun, apalagi menghapus riwayat:

bash
git init

Output yang Dihasilkan:

text
Reinitialized existing Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/folder-isi/.git/

Kata kuncinya berubah dari Initialized empty menjadi Reinitialized existing: Git mengenali repository yang sudah berdiri, lalu memastikan kerangka dasarnya lengkap tanpa menyentuh commit, branch, maupun konfigurasi yang sudah ada.

git init di Subfolder Membuat Repository Terpisah #

Git tidak mengawasi folder secara rekursif menembus batas repository. Bila kita menjalankan git init di dalam subfolder sebuah repository, Git membuat repository kedua yang sepenuhnya terpisah:

bash
mkdir sub-modul
cd sub-modul
git init

Output yang Dihasilkan:

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/folder-isi/sub-modul/.git/

Folder sub-modul kini memiliki .git miliknya sendiri. Dari repository induknya, folder tersebut hanya terlihat sebagai satu entri untracked biasa:

bash
cd ..
git status

Output yang Dihasilkan:

text
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	catatan-rapat.md
	konfigurasi.ini
	sub-modul/

nothing added to commit but untracked files present (use "git add" to track)

Induk menampilkan sub-modul/ sebagai satu baris — Git sengaja tidak menelusuri isi folder itu karena folder tersebut kini repository tersendiri. Repository yang menumpuk seperti ini biasanya kebetulan, bukan niat: hasilnya membingungkan karena berkas yang sama tercatat oleh dua riwayat berbeda.

Sekilas git init –bare #

Variasi terakhir yang perlu dikenali sejak dini adalah repository bare — repository tanpa area kerja:

bash
git init --bare server-demo.git

Output yang Dihasilkan:

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/server-demo.git/

Perbedaannya tidak terlihat dari keluaran, melainkan dari isi foldernya: repository bare langsung berisi HEAD, config, objects, refs, dan kawan-kawannya di tingkat teratas — tidak ada area kerja untuk menyunting berkas. Repository jenis ini dipakai sebagai sumber bersama di server: tempat anggota tim menerima (pull) dan mengirim (push) commit. Kita akan memakainya kembali pada section Remote Repository ; untuk pekerjaan harian, repository biasa hasil git init sudah cukup.

Dengan git init beserta seluruh perilakunya kita kuasai, pintu pertama sudah terbuka. Pintu kedua — menyalin repository yang sudah ada lengkap dengan riwayatnya — adalah peran git clone, yang kita jalankan sungguhan pada chapter berikutnya. Lanjut ke git clone .