Dupa cateva ore de incercat diverse m-am gandit c-ar fi mai bine sa cer niste pareri, poate s-a mai lovit cineva de urmatoarea “cerinta”.
Se poate in git sa ai un fisier care nu conteaza cand l-ai modificat, ultimele modificari sa fie valabile peste tot (in orice commit, branch)?
Ex: Sa presupunem ca avem 3 branch-uri numite dev, prod, config.
Branch-ul dev e cu vreo 20 commit-uri in fata lui prod.
Branch-ul config e menit sa schimbi doar anumite fisiere de config (1, 2 fisiere ±, iar aceste fisiere NU vor fi modificate in afara branch-ului config)
Vreau ca atunci cand ma mut pe config si schimb ceva, aceste modificari sa se aplice peste tot. In special in orice branch. De preferat si in orice commit.
Sper si oriunde in timp (gen daca dau checkout pe un commit de acum 3 luni, sa am modificarile facute azi, doar de pe branch-ul config, si asta fara sa mai fac eu rebase/merge sau altceva).
Nu inteleg rostul branch-ului config, poti foarte simplu sa pui .gitignore la toate fisierele de config si dupa sa pui config-urile la deploy sau build pe prod cu un configfile.
Probabil ca nu ai un sistem de CI cu git.
Este considerat un bad practice sa pastram fisierele de configurare in Git. In lumea automatizata, configuratiile masinilor se fac in Puppet, iar valorile efective se manageriaza cu hiera. Motivul cel mai important e legat de securitate, nu de workflow. Separarea responsabilitatilor e al 2lea motiv ca ordin de importanta.
Aici o metoda de a le manageria cu simpu bash script. Sau se poate face un repository separat in care sa fie doar configuratiile, aici un exemplu care foloseste GitLab self hosted. Si John Resig are un articol hands-on pe subiect.