~/saidqb cat wiki/stack/git/project-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
- Commit dulu semua perubahan ke branch biasa (
main) — wajib, karenagit subtree pushcuma baca apa yang sudah ada di history commit, bukan isi working directory. Perubahan yang belum di-add+committidak akan ikut ke-push sama sekali
git add project
git commit -m "update project"
- Push subtree folder
project/ke branchproduction(di remoteoriginyang 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.
- Di server, deploy dari branch
productionitu (bukanmain)
ssh user@server "cd /var/www/app && git pull origin production"
- 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.