2014-11-25 9 views
8

Ho appena provato a utilizzare .gitattributes per la prima volta. Immagino di dover fare qualcosa di sbagliato perché non funziona in quanto pensavo che lo scopo di utilizzare l'attributo merge=ours fosse destinato a (?).Che cosa è l'uso corretto di .gitattributes con merge = ours

Un esempio di mio utilizzo:

ho due rami; uno è il "maestro" e l'altro è "GCE-Sito". Ci sono file sul ramo "GCE-Site" che hanno impostazioni diverse che esistono anche sul ramo "master" che non voglio unire nel "master" [o altri rami].

Su entrambi i rami, ho un .gitattributes contenente le seguenti regole:

README.md merge=ours 
config.php merge=ours 
.gitattributes merge=ours 
.gitignore merge=ours 
.cache/ merge=ours 

Tutti i file che necessitano le regole sono al livello della radice più tutto al di sopra del .cache/cartella. Quando eseguo lo git merge GCE-Site, tutti i file vengono ancora uniti nel master quando non lo desidero.

C'è qualcosa che mi manca? Il tuo aiuto è molto apprezzato. Thnx

risposta

6

Correzione facile una volta che sapevo cosa stavo facendo: ho perso l'aggiunta della strategia di fusione con git config --global merge.ours.driver true nel mio ambiente locale.

+0

Credo che questo non funzionerà se un'unione può essere eseguita con avanzamento veloce. – HuStmpHrrr

2

Come accennato in ".gitattributes & individual merge strategy for a file":

Il driver di unione viene chiamato solo in casi non banali, vale a dire se sia master e di prova hanno toccato setup (ed è necessario definire il driver merge nostra prima).

È possibile visualizzare un esempio di modifica simultanea (ad es. Modifica in entrambi i rami) in "How do I tell git to always select my local version for conflicted merges on a specific file?".

Quindi se l'unione non ha comportato modifiche degli stessi file all'interno della cartella cache/ in entrambi i rami, il tuo driver di unione non è mai stato chiamato.

ma nel tuo caso, per i file con diverse impostazioni, consiglio non utilizza un driver di fusione, ma un content filter driver, come in "Keep settings in branch"

content filter driver

che permette di mantenere il controllo di versione :

  • file di modello per le impostazioni nella cartella cache/
  • uno script in grado di prendere un file di modello e Repla ce il valore dei segnaposto con il giusto valore a seconda del ramo estratto.