2010-06-14 20 views
7

Sviluppo in un linguaggio di script proprietario con codice molto ripreso in cui la maggior parte delle configurazioni sono contenute all'interno del codice stesso.Unione manuale su GIT

Il problema ovvio sarebbero le differenze nel codice stesso tra gli ambienti di test e di produzione e questo è esattamente quello che sto cercando di gestire con GIT.

Poiché il mio test env è abbastanza volatile, ho pensato che avrei potuto creare un ramo in GIT per questo mentre sono state apportate modifiche (e mantenere il codice con configurazioni di test in là) e dopo che il codice è stato accettato mi unirei in produzione.

Beh, quando chiedo git di unire i miei rami si fa un ottimo lavoro con il codice .. ma i file di configurazione vengono migrati come bene e che devo file per aprire il file, cambiando di nuovo a quello che era .

Esiste comunque la possibilità di disabilitare l'unione automatica da GIT e minacciare tutto come conflitti di codice da unire manualmente con WinMerge o qualcosa di successivo? Il codice è breve, davvero. E visto che dovrò modificarlo comunque per applicare le configurazioni ...

ps: per favore, non sto chiedendo come configurare WinMerge su git. Ho questi strumenti funzionanti. La mia domanda è come eseguire sempre le unioni manuali tra i rami.

grazie!

f.

risposta

5

disabilitare la fusione automatica

che potrebbe essere ottenere scrivendo un piccolo driver unione, impostare in a .gitattributes file.
Un criterio come unset potrebbe essere quello che stai cercando.

Unset 

accettare la versione dal ramo corrente come risultato della fusione sperimentale, e dichiarare che l'unione ha conflitti. Questo è adatto per file binari che non hanno una semantica merge ben definita.

Ma un altro driver gitattribute interessante sarebbe un clean filer:

http://git-scm.com/figures/18333fig0703-tn.png

Che sarebbe eseguire automaticamente uno script 'pulito' di vostra scelta poco prima di commettere il contenuto "pulito" per il repo.
Tale 'clean' script potrebbe aiutare ad automatizzare le modifiche si deve fare per il codice per mantenere o modificare i valori di configurazione incorporato in esso.

+0

Hm .. che è piuttosto interessante , ma non sono così familiare con i driver GIT. ho aggiunto alla mia '.gitconfig' il seguente: ' [fondono "manuale"] \t name = merge manuale \t driver = Unset' e poi aggiunti al .gitattribute: '* merge = manuale ' (preso questi da' git help merge') non ha funzionato però. potresti essere più specifico con il driver git? grazie! f. – filippo

+0

@flpgdt: sarebbe un driver di unione personalizzato (definito nel file .gitconfig). Mi riferivo solo all'attributo merge (vedi http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html). Un semplice: 'echo * .xxx merge = unset> dirWithConfgFiles \ .gitattributes' dovrebbe essere sufficiente (con 'xxx' è l'estensione per i file di codice compresi i valori di configurazione) – VonC

+0

hey mate. In realtà non ha funzionato. Ho avuto il mio .gitattributes (provato entrambi, nella mia cartella principale e nella mia cartella contenente i file esatti) come '* .xml merge = Unset'. Continuerò a provare, ma grazie comunque. Stavo anche dando un'occhiata a come creare il driver pulito, e anche se penso di essere riuscito a crearlo, non sono sicuro di come dire a GIT di usarlo :( grazie! f. – filippo

2

Si dice "la maggior parte delle configurazioni sono contenute nel codice stesso" ma si spera che tutte le configurazioni siano isolate nei file specifici della configurazione. In tal caso, è possibile mantenere entrambi i casi di test e di rilascio del codice di configurazione nello stesso ramo. È quindi possibile utilizzare un interruttore della riga di comando per utilizzare la configurazione di prova anziché quella normale.

Se il programma può leggere una selezione di configurazione dalla riga di comando (o variabile di ambiente, chiave di registro, file di testo o qualsiasi altra cosa), non sarà necessario unire affatto. Il programma può ignorare i file di configurazione del test quando l'interruttore della riga di comando non è presente e ignorare la configurazione di rilascio quando è presente l'interruttore della riga di comando.

Questo ti evita gli errori possibili durante l'unione e il tempo necessario per l'unione.

+0

hnf .. Vorrei che fosse così. Sfortunatamente è un po 'peggio, le configurazioni sono incorporate nel codice stesso. Bene tecnicamente il "codice" è un complesso file di configurazione in cui alcuni dei suoi contenuti riguardano l'ambiente in cui è stato eseguito (il tipo di connessioni, id e percorsi). Non può essere così difficile ... Vorrei solo che avrei potuto fare qualcosa di simile a 'git diff maestro dev' e quando ho colpito salvare per ogni file, le modifiche vengono memorizzate nel ramo corrente ... – filippo

Problemi correlati