.gitignore ve Git alt modülleri: dosyaları hariç tutmak ve projeleri dahil etmek
Kısaca: .gitignore dosyası Git’in neyi sürümlemeyeceğini tanımlar; alt modüller (submodules) başka bir depoyu sabit bir durumda kendinizinkine yerleştirir.
Biraz daha ayrıntılı: Bir proje klasöründeki her şey sürüm denetimine ait değildir: üretilmiş dosyalar, bağımlılıklar, sırlar. Ve bazen yabancı veya paylaşılan koda, kopyalamadan ihtiyaç duyarsınız.
Ayrıntılı
.gitignore
.gitignore, Git’in atlaması gereken dosyalar için kalıplar içerir:
node_modules/
dist/
*.log
.env
.DS_Store
!important.log # ! ile istisna
/build # yalnızca ana klasörde
Yorumlar # ile başlar. Bir .gitignore yalnızca henüz izlenmeyen dosyalar için geçerlidir. Bir şey zaten eklenmişse, git rm --cached file ile dizinden çıkarana kadar izlenmeye devam eder. Klasöre özgü dosyalar alt klasörlerde bulunabilir; genel kurallar ~/.config/git/ignore içindedir. Birçok dil için şablonlar gitignore.io ve github/gitignore deposu tarafından sunulur.
Sırlar
Parolalar, API anahtarları ve .env dosyaları asla depoya ait değildir. Bir kez eklendiğinde bir sır geçmişte kalır ve ele geçirilmiş sayılmalıdır: anahtarları hemen iptal edip yenileyin; geçmişten kaldırmak (git filter-repo) zahmetlidir. Daha iyisi, değersiz bir .env.example koymaktır.
Alt modüller
Bir alt modül, başka bir deponun belirli bir commit’ine bir başvurudur:
git submodule add https://github.com/company/library libs/library
git clone --recurse-submodules <url> # alt modüllerle klonla
git submodule update --init --recursive # sonradan yükle
git submodule update --remote # daha yeni bir duruma yükselt
.gitmodules dosyası yolu ve adresi tutar. Ana proje tam commit’i hatırlar, böylece herkes aynı durumu kullanır.
Ne zaman alt modül, ne zaman alternatifler
Alt modüller kullanılabilir ama hataya açıktır: onları güncellemeyi unutursunuz veya değişiklikleri yalnızca ana projede push edersiniz. Çoğu zaman paket yöneticileri (npm, pip, Maven) veya bir monorepo daha basittir. Bir varyant, kodu başvurmak yerine kopyalayan alt ağaçlardır (subtrees) (git subtree).
Ayrıca bak: Git, Ortam değişkenleri, Monorepo, API anahtarları