Non riesco a far funzionare correttamente GIT per TFS in Visual Studio quando si tratta di unioni. Fondamentalmente ogni operazione di unione che si verifica quando estraggo l'ultima versione del codice è un incubo.Come gestire correttamente le unioni quando si esegue un GIT PULL in Visual Studio
Sono in particolare parlando di unioni che si verificano quando si tira codice altro qualcuno dallo stesso ramo (vale a dire io sono non parlando di scenari che coinvolgono più rami).
Sto anche specificatamente parlando di plug-in GIT integrato di Visual Studio, quindi per favore non suggerire di eseguire comandi da riga di comando di cui sono a conoscenza (come rebase) se c'è un'altra soluzione da all'interno dell'IDE ("non è possibile" sarebbe una risposta valida, però).
Ecco come riprodurre il problema:
- ci sono due sviluppatori, A e B, lavorando sullo stesso ramo
- sviluppatore Un spinge alcuni commit che modifica i file F1 e F2
- sviluppatore B una modifica dei file F1 e F3
- sviluppatore B impegna modifiche su F1 e F3
- sviluppatore B fa un pull: Visual Studio rileva un conflitto sul file di F1 (presumibilmente)
- sviluppatore B risolve il conflitto sulla F1
Ora qui è il problema: tutti i file F1, F2 e F3 sono nel modificata Stato per B. Perché? Lo sviluppatore B ha modificato solo i file F1 e F3. Non vedo un motivo valido per F2 nello stato modificato, perché B non lo ha modificato.
Capisco che localmente il file F2 non è la stessa di prima il tiro, ma il problema è che la B in fondo non può rivedere i suoi cambiamenti di F1 e F3 prima di spingere, il lavoro a causa di tutti gli altri (nel semplificato caso sopra, su F2) appare anche nella sua lista di modifiche.
Nei nostri scenari del mondo reale, ci sono più sviluppatori che lavorano sullo stesso ramo, e ogni Merge è un grande fallimentonella storia ramo: Visual Studio mostra fondamentalmente un gruppo di 50-o-così file modificati per ogni unione (quando lo sviluppatore ha modificato solo 1 o 2 file).
Questo problema sempre si verifica con un up-to-date di Visual Studio 2013. Visual Studio 2015 sembra abbastanza intelligente da non spettacolo F2 come modificato, ma non sempre .
Come risolvere questo comportamento? Attualmente GIT è un PITA da utilizzare all'interno di Visual Studio per questo motivo.
EDIT:
Ecco un esempio visivo.A sinistra, la cronologia mostrata in VS 2013: molti file modificati. A destra, la stessa storia (stesso repository, stessa macchina, stesso commit ... ecc.) Come mostrato in VS 2015. Ovviamente VS 2015 mostra qualcosa di diverso e leggermente migliore (vedo solo le mie modifiche). Nota che questo non funziona sempre in questo modo, a volte VS 2015 mostra i file che non ho modificato, proprio come fa VS 2013.
Questa domanda era su questo comportamento quando sto per spingere il risultato di una fusione, ma è esattamente la stessa cosa quando ho semplicemente visualizzare la cronologia di una fusione vecchio, come illustrato di seguito:
Le domande sono:
- è presente un bug?
- in caso contrario, questo è documentato?
- in ogni caso, come dovrei lavorare con GIT, in particolare con VS 2013, per quanto riguarda l'incoerenza come mostrato sopra?
Quindi lo sviluppatore B ha modificato F1 e F3, ma non è stato inviato al ramo remoto, corretto? – TriskalJM
@TriskalJM Sì, questo è il – ken2k
In genere non si guarda a un'unione non vincolata per provare a determinare come si differenziano due rami. In generale, si dovrebbe confrontare il ramo con il ramo upstream dopo aver completato e eseguito l'unione. https://git-scm.com/book/en/v2 e http://www.gitforvisualstudio.com/ possono aiutare a chiarire alcuni di questi concetti. –