2013-12-17 13 views
6

Sulla macchina A, git mergetool esegue Oltre Confronta 3 come previsto. Sulla macchina B, BC3 si avvia ma non viene passato alcun argomento sulla riga di comando, mostrando quindi la schermata di introduzione anziché l'unione effettiva.Git lancia mergetool senza alcun argomento

ho copiato la configurazione dalla macchina A alla macchina B, e git config --list è identica a parte il percorso di installazione e push.default=simple:

merge.tool=bc3 
mergetool.bc3='C:/Apps/BeyondCompare3/BCompare.exe' 
mergetool.bc3.cmd='C:/Apps/BeyondCompare3/BCompare.exe' 
mergetool.bc3.path=C:\Apps\BeyondCompare3\bcomp.exe 
push.default=simple 

Le sole altre differenze sono che la macchina A ha git 1.7.11 sotto Win7 64 -bit, mentre la macchina B (quella che non funziona) ha git 1.8.4 sotto Win8 a 32 bit.

ProcessHacker indica che la linea di comando sulla macchina A (per la esattamente lo stesso repository, bit per bit) è:

"c:\Program Files (x86)\Beyond Compare 3\bcomp.exe" 
     ./somefile.cs.LOCAL.4192.cs 
     ./somefile.cs.REMOTE.4192.cs 
     ./somefile.cs.BASE.4192.cs 
     -mergeoutput=somefile.cs /BCompWnd=$00140644 

mentre sulla macchina rotta B è semplicemente:

c:\Apps\BeyondCompare3\BCompare.exe 

Quale incantesimo magico ho bisogno qui?

+1

Perché la configurazione è uguale tra le macchine mentre lo strumento si trova in cartelle diverse? – CharlesB

+0

@CharlesB come ho detto, la configurazione "è identica a parte il percorso di installazione" dello strumento, scusa se non era chiaro. Il percorso è diverso, tutto il resto è identico. –

risposta

4

Solo un'ipotesi: se Git già (nella sua configurazione di fabbrica) conosce lo strumento bc3, userà mergetool.bc3.path insieme agli argomenti standard. In caso contrario, cerca mergetool.bc3.cmd, ma questo ha bisogno di avere gli argomenti corretti indicati nel comando:

mergetool.bc3.cmd="'c:/apps/BeyondCompare3/bcomp.exe' '$LOCAL' '$REMOTE' '$BASE' '$MERGED'" 

Per una ragione oscura, sulla macchina B Git non sa invocazione bc3, e ricade con mergetool.bc3.cmd che nel tuo caso manca gli argomenti corretti. Sulla macchina A, Git sa come parlare con BC3 e userà la chiamata corretta dello strumento, usando solo mergetool.bc3.path.

Per convalidare questa cancellazione rispettivamente mergetool.bc3.cmd e mergetool.bc3.path sulla macchina A e B, i comportamenti devono essere esattamente gli stessi che si osservano.

Per risolvere il problema, utilizzare l'invocazione completa su mergetool.bc3.cmd.

+1

OK, ha funzionato. Se rimuovo sia 'cmd' che' percorso', entrambe le macchine riportano che non riescono a trovare BC3. Se rimuovo 'cmd' ma lasciamo' path', entrambe le macchine funzionano. Quindi sembra che la macchina A abbia funzionato nel setup originale solo perché git ha completamente ignorato 'mergetool.bc3.cmd'. Oh anche, 'mergetool.bc3' stesso sembra non essere necessario. Grazie! –

+0

Probabilmente hai una voce '[mergetool" bc3 "]' sulla macchina A, ma non sulla macchina B. Prova su entrambe le macchine: 'git config --global --edit'. –

Problemi correlati