2012-04-24 14 views
7

Per implementare la funzione di fork/pull request github nel mio progetto, la funzione di auto-merge deve rilevare il conflitto tra il repository source/target ogni volta mentre si visualizza la richiesta pull.Come rilevare il conflitto tra due repository git.

Una soluzione mi viene da analizzare l'output 'git request-pull'. C'è un metodo più semplice per rilevare il conflitto?

+0

Cosa viene richiesto qui? Stai implementando uno strumento di unione? O uno strumento di visualizzazione diff? O semplicemente curioso che cosa sta per fare 'git push'? –

+0

In github, una richiesta di pull non conflittuale può essere unita semplicemente facendo clic su un pulsante sul web. Poiché il repository di origine/destinazione potrebbe continuare a impegnarsi, in questo processo è necessario individuare il conflitto. Sto chiedendo un modo più semplice per rilevare il conflitto. – stcatz

risposta

-2

Finalmente ho scritto la mia funzione di rilevare il conflitto.

È abbastanza semplice, è sufficiente recuperare tutte le linee diff e confrontare se ci sono le stesse modifiche.

+2

Sarebbe bello postarlo qui per riferimento futuro – CharlesB

2

Ho cancellato la mia risposta precedente, non ho capito la domanda ...

Ora ecco la lucida risposta nuova:

git merge --ff-only <branch> 

Se non ci sono conflitti, lo farà una fusione . Con un conflitto, ti dà un messaggio: Not possible to fast-forward. Il codice di ritorno della console (echo $?) È 128 in questa situazione.

+0

Questo non è rilevante per la domanda, ma è buono durante la fusione dopo il recupero. –

0

Per quanto ne so, non è possibile scoprire se un'unione produce conflitti finché non si fondono effettivamente questi rami.

Questo è stato già indicato in: How to test a merge without actually merging first.

Pertanto, per rispondere alla domanda, se è necessario implementare questo tipo di funzionalità, è consigliabile provare a unire la sorgente/destinazione e il rollback dell'operazione di unione (utilizzando git reset --hard).

Non ho mai utilizzato git request-pull, ma guardando l'output, non vedo alcuna informazione che possa aiutarti a risolvere il tuo problema. Probabilmente potresti ottenere lo stesso risultato usando git diff, git wtf, git remote show <name>.

Riferimenti:

1

Abbiamo creato un rivelatore di conflitti git che controlla l'ultimo commit spinto rispetto a tutti i rami esistenti.

È un semplice script singolo avviato dall'URL GitHub WebHook e persino noto che ha inviato una notifica HiChat quando viene rilevato un conflitto.

abbiamo basato la nostra soluzione sull'analisi del git merge --ff-only <branch> uscita come si può vedere here

abbiamo open source così tutti possono godere, imparare e contribuire.

Problemi correlati