2012-01-12 30 views
12

Sto creando un driver di unione. Ho definito un file .gitattributes come segue:Aggiungi un driver git merge al repository?

filename merge=mergeStrategy

ho creato il driver unione in $ PROJECT/.git/config come segue:

[merge "mergeStrategy"] 
    name = My merge strategy 
    driver = scripts/mergeScript.sh 

Questo funziona bene a livello locale, ma io desidera eseguire il commit di questo driver di unione nel repository git in modo che la strategia di unione sia valida per tutti.

C'è un modo per aggiungere questa (o altre opzioni di configurazione Git) al repository stesso?

risposta

9

Si potrebbe semplicemente aggiungere e commit (e spingere) script/mergeScript (insieme al file .gitattributes, naturalmente)

che avrebbe funzionato finché:

  • mergeScript è in qualche modo nel $PATH della utente che esegue il driver di fusione.
  • mergeScript è eseguibile, chmod +x
  • mergeScript è senza estensione, per consentire di tardi cambiare il suo contenuto (da una shell bash per uno script Perl per un C eseguibile ...) se necessario.

(Grazie, MestreLion, per gli ultimi due punti, come li ha menzionato nel commento)

Questo è stato il caso per voi a livello locale, come ho il sospetto che '.' stato nel vostro $PATH, ma non lo si può assumere per tutti.

Tuttavia, il file di configurazione locale (.git/config) non sarà spinto/clonate (come Alexandr Priymak punti nel commento), in modo che gli utenti hanno ancora bisogno di replicare alla dichiarazione del costume fondono conducente.
Questa è una misura di sicurezza di base, al fine di non spingere un potenziale script "dannoso" che sarebbe poi automaticamente eseguito alla successiva unione.

+1

Questo non salva le impostazioni di configurazione nel repository git. –

+0

@AlexandrPriymak: buon punto. Ho aggiunto questo avvertimento importante alla risposta. – VonC

+1

Non dimenticare di impostare 'mergeScript.sh' come eseguibile usando' chmod + x', altrimenti potrebbe (wont?) Funzionare. Inoltre, ** consiglio vivamente ** ** di non usare estensioni per i file eseguibili. Chiamalo semplicemente "mergeScript", poiché in futuro potrebbe cambiare da script di shell a perl, python o anche eseguibile C compilato. – MestreLion