Logo

~/saidqb cat wiki/stack/git/project-app-dan-doc.md

MDproject-app-dan-doc.md

commit by saidqb

Struktur 2 — Ada doc/ dan project/

Satu repo dipakai bareng untuk kode aplikasi dan dokumentasi/catatan internal, dipisah per folder:

repo/
├── doc/                 <- catatan, notulen, dokumentasi internal — TIDAK di-deploy
│   ├── notes.md
│   └── meeting-2026-08.md
└── project/              <- source code aplikasi — INI yang di-deploy
    ├── src/
    ├── public/
    └── package.json

doc/ tidak boleh ikut ke server production (isinya catatan internal, bukan kode jalan), jadi push biasa tidak bisa dipakai — perlu git subtree untuk ambil isi folder project/ saja lalu dorong ke branch/remote production.

Urutan Deploy

  1. Commit dulu semua perubahan ke branch biasa (main) — wajib, karena git subtree push cuma baca apa yang sudah ada di history commit, bukan isi working directory. Perubahan yang belum di-add+commit tidak akan ikut ke-push sama sekali
git add project
git commit -m "update project"
  1. Push subtree folder project/ ke branch production (di remote origin yang sama, atau remote terpisah)
git subtree push --prefix=project origin production

Command ini mengambil isi folder project/ (bukan seluruh repo) dari commit terakhir di local, lalu push ke branch production seolah-olah project/ itu sendiri adalah root repo — doc/ otomatis tidak pernah ikut.

  1. Di server, deploy dari branch production itu (bukan main)
ssh user@server "cd /var/www/app && git pull origin production"
  1. Update berikutnya, ulangi urutan yang sama: commit dulu, baru subtree push
git add project
git commit -m "update project"
git subtree push --prefix=project origin production

Kenapa bukan .gitignore saja

.gitignore cuma mencegah file baru ditambahkan — tidak menghapus folder doc/ dari histori kalau sudah pernah ke-commit, dan tidak membantu kalau doc/ memang perlu tetap ada di branch development. git subtree menjaga kedua kebutuhan tetap terpisah rapi: satu repo untuk development (isinya lengkap termasuk doc/), satu branch/remote bersih untuk production (isinya cuma project/).

Kapan cocok pakai pola ini

  • Repo dipakai bareng buat kode + dokumentasi tim, tapi cuma kode yang boleh nyampe ke server.
  • Belum butuh proses build terpisah — isi folder project/ sudah langsung bisa dijalankan.

Kalau project/ sendiri butuh proses build dulu sebelum bisa dijalankan (misal frontend yang perlu npm run build), lihat project-app-build-dan-doc.md.