Utilizziamo la git per la maggior parte delle applicazioni Web che costruiamo nel nostro negozio, e sebbene le applicazioni stesse utilizzino una varietà di tecnologie (PHP, Rails, ecc.), Generalmente abbiamo una produzione e una produzione server per ogni sito. In genere, questi server dispongono di serie diverse di credenziali del database nonché di diverse impostazioni di configurazione basate sull'ambiente (ad esempio la memorizzazione nella cache). Il nostro flusso di lavoro generalmente prevede il mantenimento di due rami git per progetto: master, che riflette il server di produzione e la gestione temporanea, che riflette la gestione temporanea. Le nuove funzionalità sono sviluppate su staging (o su un sotto-ramo) e sono unite al master una volta completate e implementate.Git: configurazione dell'applicazione e diversi ambienti
La mia domanda riguarda il modo migliore per mantenere i file di configurazione specifici per ramo e ambiente. Ho visto le risposte di domande simili here e here e nessuna delle due soddisfa davvero. I due principali approcci sembrano essere: a) utilizzare l'esclusione di gitignore per lasciare file di configurazione al di fuori della portata di git, oppure b) scrivere un codice riflettente e sensibile all'ambiente che determina ad es. quali credenziali del database utilizzare in base al nome host. Il mio problema con a) è che consente solo a un set di file di configurazione di esistere nella base di codice (indipendentemente dal ramo corrente), quindi i file di configurazione di altri ambienti vengono persi. b), d'altra parte, sembra semplicemente richiedere modifiche non necessarie della base di codice in un modo che non sembra correlato alle funzionalità dell'applicazione.
Idealmente, mi piacerebbe un modo per "bloccare" i file di configurazione all'interno di un certo ramo, in modo che ogni volta che eseguo il checkout, ottengo i file di configurazione principale e ogni volta che eseguo il checkout, ottengo i file di configurazione della staging. Inoltre, l'unione della gestione temporanea in master non dovrebbe influire in alcun modo sui file di configurazione principali. Ad oggi, ci siamo occupati di questo fatto avendo cartelle contenenti file di configurazione specifici per l'ambiente al di fuori della root git e spostando manualmente i file appropriati in codebase durante la distribuzione, ma questo è ovviamente inutilmente hackish (e potenzialmente pericoloso).
C'è un modo per farlo usando git?
Grazie per la vostra considerazione!
http://stackoverflow.com/questions/2154948/how-can-i-track-system-specific-config-files-in-a-repo-project/2155355#2155355 combinato con http: // stackoverflow .com/questions/3207575/how-do-i-open-source-my-rails-apps-senza-dare-via-the-apps-secret-keys-e/3207608 # 3207608 aiuto qui? – VonC