Come usare Xcode 4 mergetool in modo autonomo?


8

A volte devo fare fusioni git sulla console. Fino ad ora, per risolvere i conflitti, stavo usando FileMerge di Xcode 3 (puoi aprirlo sulla console usando il comando 'opendiff'). Se i conflitti mostrano, io uso 'git mergetool' che invoca automaticamente l'opendiff per ciascuno dei file in conflitto.

Tuttavia, Xcode 4 presenta un componente mergetool molto più bello per risolvere i conflitti. Credo che questo componente sia parte dell'eseguibile Xcode 4, piuttosto che autonomo. Consente di visualizzare l'anteprima del file unito e di modificare direttamente il codice unito caso per caso, il che rende l'unione di conflitti complessi incredibilmente veloce e soddisfacente.

C'è un modo per usare Xcode 4 mergetool quando si richiama 'git mergetool' dal Terminale?

Non riesco a trovare un eseguibile per questo strumento all'interno del bundle Xcode 4. Qualsiasi hack che raggiunga questo sarebbe il benvenuto.


Nel caso in cui qualcun altro sia interessato a questa funzione: sembra che non ci sia un modo ufficiale di farlo. Ho inviato una richiesta di funzionalità ad Apple tramite bugreport . Ecco il radar . Immagino sia abbastanza senza speranza, ma non lo sai mai. Per chiunque sia interessato, suggerisco di mostrare interesse inviando una segnalazione di bug simile ad Apple.
Ricardo Sanchez-Saez,

Risposte:


4

opendiff accetta due argomenti di nome file e un parametro --ancestor con un terzo nome file, per produrre un diff a tre vie e un parametro --merge per dire il file di output da utilizzare per la risoluzione dei conflitti.

Allora vai:

[mergetool "opendiff"]
    cmd = "opendiff \"$LOCAL\"  \"$REMOTE\" \"$(if test -f \"$BASE\"; then echo \"--ancestor $BASE\"; else echo \"--ancestor $LOCAL\"; fi)\" --merge=\"$MERGED\" "
[merge]
    tool = opendiff

Ciò dovrebbe fare in modo che git usi opendiff come strumento di unione, in presenza di conflitti di unione.

Detto questo, preferisco MOLTO DiffMerge da SourceGear , che è uno strumento gratuito di diffusione e fusione a tre vie che offre una risoluzione dei conflitti molto migliore, orientata alle parole. E nella documentazione di DiffMerge c'è cosa dire a git di renderlo lo strumento diffing e fusione predefinito.


Grazie per aver cercato di aiutare, ma Filemerge / opendiff non è quello che sto cercando di usare. Inoltre, ho provato DiffMerge (e DeltaWalker per quello che vale) e non mi piace molto l'interfaccia utente. Il caleidoscopio è decisamente più bello, ma non presenta fusione / modifica, ma solo differenze.
Ricardo Sanchez-Saez,

Sono abbastanza sicuro che Xcode 4 stia semplicemente avvolgendo FileMerge. Ho scoperto la stessa delusione per Caleidoscopio.
Dan Ray,

Direi che Xcode 4 non sta avvolgendo FileMerge. Su FileMerge non è possibile modificare il file unito, è sufficiente selezionare quale lato dell'unione si desidera utilizzare per ogni conflitto. Sul risolutore di conflitti di pull di Xcode 4 puoi modificare le linee in conflitto e fare un pull con il file esattamente come vuoi che sia. Inoltre, l'interfaccia utente è completamente diversa da Filemerge.
Ricardo Sanchez-Saez,

1
Kaleidoscope 2 beta è stato recentemente rilasciato e consente la modifica in linea dei file uniti. Dai un'occhiata, è abbastanza buono. L'unica cosa che manca è un colore diverso per i conflitti (usa lo stesso colore della sostituzione del codice per quelli).
Ricardo Sanchez-Saez,

Dopo alcuni mesi usando Kaleidoscope e nonostante sia generalmente buono, devo dire che è ancora un po 'buggy e / o confuso, specialmente se paragonato al componente Xcode 4.x per la risoluzione dei conflitti. Spero ancora che Apple faccia l'inaspettato e lo attui come uno strumento autonomo invocabile, diciamo, da Tower. ;-)
Ricardo Sanchez-Saez,

0

È possibile modificare nell'editor di testo (molto semplice) all'interno di FileMerge aprendo il riquadro dell'editor, che è chiuso per impostazione predefinita. Per aprire l'editor in FileMerge, trascina il punto sotto la colonna diff centrale verso l'alto per aprire il riquadro dell'editor.


-1

Questo ha finito per funzionare per me

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""

2
Opendiff è ciò che Xcode 3.x ha usato per le fusioni. La mia domanda riguardava il componente di unione Xcode 4.x, che è uno strumento completamente diverso (consente la modifica in linea del file risultante, a differenza di opendiff / filemerge). Grazie comunque.
Ricardo Sanchez-Saez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.