Quando Mercurial è in esecuzione con cygwin, è un po 'complicato capire come generare spa WinMerge per risolvere i conflitti di unione. Come posso fare questo?Come posso configurare Mercurial per usare WinMerge per le unioni, sotto cygwin?
risposta
Il trucco è che i percorsi cygwin non sono gli stessi dei percorsi di Windows, quindi è necessario un piccolo script che converta i percorsi cygwin in percorsi Windows prima di passarli come argomenti a WinMerge.
Ecco come si fa:
(1) Creare uno script di shell in /usr/bin/winmerge
come segue:
#!/bin/sh
"/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3`
Nota: cygpath
converte i nomi di percorso. Se WinMerge non si trova nella posizione predefinita, modificare qui il percorso.
(2) fare quel file eseguibile
chmod +x /usr/bin/winmerge
(3) Aggiungere la seguente al file ~/.hgrc
:
[ui]
merge = winmerge
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Nota! Probabilmente hai già una sezione [ui] con il tuo nome. Ricordati di unire le mie modifiche con le tue, non aggiungere solo una nuova sezione [ui]. Ad esempio, il mio .hgrc assomiglia a questo:
[ui]
username = Joel Spolsky <[email protected]>
merge = winmergeu
[extensions]
fetch =
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Ecco la linea di script di shell che lavora per Subversion/Cygwin/WinMerge. La principale differenza è quali argomenti usare.
/cygdrive/c/Program\ Files/WinMerge/WinMergeU.exe /e /ub /dl "$3" /dr "$5" "`cygpath -aw $6`" "`cygpath -aw $7`" &
Si noti che questo esempio imposta anche i campi di descrizione e lancia i confronti in background, in modo che tutte le diff sono lanciate in una sola volta. Se non ti piace, rimuovere "&".
Se non sai cosa ti passa il programma di controllo di revisione, prova ad aggiungere "echo $ @" allo script della shell. Stampa gli argomenti passati allo script.
Ora puoi accettare la tua risposta, vero? –
devo aspettare 48 ore. –
Probabilmente non avrei messo quello script in/usr/bin /. Stavo per inseguirti per non aver usato cygpath, ma poi ho fatto scorrere il blocco di codice e ho visto cosa stai facendo. –