2016-02-01 3 views
9

Vorrei configurare un repository Git con un driver di unione personalizzato e quindi disabilitare il rilevamento della ridenominazione durante l'unione.Personalizzato Git merge il driver senza rilevamento della ridenominazione

Il problema è che, se utilizzo la strategia ricorsiva predefinita, non riesco a disabilitare il rilevamento della ridenominazione e, se utilizzo la strategia di risoluzione (non ideale, ma abbastanza buona), il driver di unione viene ignorato.

Nota che vorrei evitare di rinominare il rilevamento anche quando il contenuto del file corrisponde perfettamente.

.git/config:

[merge "my"] 
    name = my merge 
    driver = my_merge_driver %A %O %B 
[merge] 
    default = my 

Tentativi:

$ git merge -X rename-threshold=200% # Equivalent to 100% 
$ git merge -s resolve    # Custom driver ignored 
$ git --version      # git version 2.2.0-rc0 
+0

è ancora ignorare con git 2.7.0? – VonC

+1

Immagino che sia ancora ignorato, leggendo la mia vecchia risposta http://stackoverflow.com/a/22579625/6309 – VonC

+0

Infatti, @VonC, posso confermare lo stesso identico comportamento con git versione 2.7.0. – filipos

risposta

2

A partire dal Git 2.8.0.rc0, l'algoritmo merge-ricorsivo ora accetta l'opzione "no-rinomina" (commit 4ce064d), quindi il mio problema è ora risolto da

$ git merge -X no-renames 
1

Tenendo conto il caso d'uso avete in programma per questo, un buon soluzione alternativa sarebbe quella di scrivere il nome del file, insieme a il numero di versione, in ogni file.

+0

Lo trovo un po 'brutto, e richiederà alcune (semplici) modifiche sul codice che gestisce il repository, ma, beh, funziona. Bontà in scadenza concessa. Aspetterò ancora un po 'di tempo per vedere se compaiono altre risposte prima di accettarne una. – filipos