Perché non commettere immediatamente le modifiche unite?


16

Il mio ufficio utilizza Git e SourceTree per il controllo delle versioni. Ciò è avvenuto perché quando mi sono iscritto non c'era controllo della versione zero e SourceTree era l'unico sistema che avessi mai usato. Non sono un esperto in alcun modo, ma sono il più esperto dei miei colleghi, quindi sono l'esperto di fatto responsabile dell'insegnamento a tutti di utilizzare Git correttamente e correggere eventuali errori che stanno facendo.

Sto realizzando un documento tutorial che attraversa Git e SourceTree e spiega ogni fase del processo. Nel processo Pull, la finestra di dialogo SourceTree consente di selezionare l'opzione "Conferma modifiche unite immediatamente". Capisco cosa fa e perché è utile. Quello che non capisco è perché qualcuno non vorrebbe usare questa funzione.

Qualcuno potrebbe spiegare perché non vorresti mai che le tue modifiche unite fossero impegnate automaticamente? Sto cercando di capire il ragionamento in modo da poter spiegare meglio l'utilità della funzione e avere un'idea di quali insidie ​​cercare in futuro.

Modifica: non credo che la mia domanda sia un duplicato della domanda collegata. La domanda collegata si sta generalmente chiedendo quanto spesso impegnarsi. Sto chiedendo perché si dovrebbe scegliere di non utilizzare una funzionalità specifica relativa al commit delle fusioni in SourceTree.



1
Vuoi buoni motivi? Perché posso fornire una serie di motivi per ritardare il controllo del codice che ho sentito dire in natura, ma pochi sono buoni motivi.
whatsisname

L'unica ragione a cui riesco a pensare è quando un'unione fallisce a causa di unire conflitti. Ma SourceTree non si impegnerà se ciò accade comunque.
Robert Harvey,

Nota a margine: perché stai scrivendo il tuo tutorial? bitbucket ha già un ottimo tutorial. confluence.atlassian.com/bitbucket/…
winkbrace

@winkbrace Non stiamo usando Bitbucket; manteniamo tutto su una rete locale. Mi riferisco al fantastico tutorial di Atlassian , ma volevo qualcosa di un po 'più conciso da poter consegnare a persone che erano nuove di zecca e controllo della versione. È davvero un'introduzione e una procedura "questo è come e perché commetti / spingi / tira / ecc" in modo che le persone possano mettersi al tappeto correndo.
David K,

Risposte:


26

Non vorrei usare questa funzione.

Il fatto che non ci siano conflitti significa che le modifiche che vengono unite nel mio ramo non sono più o meno nelle stesse linee di codice di quelle che ho fatto. Ciò non significa che tali modifiche siano compatibili con le mie modifiche. Ciò non significa che il codice verrà compilato o che il codice funzionerà o che i test verranno superati.

In altre parole, usando questa opzione potrei finire con un commit spurio di codice che potrebbe non essere in buono stato e che richiede un nuovo commit da correggere. Come sto facendo questo lavoro in ogni modo, e come non avrei mai spingere questo spuria monte impegnarsi, nemmeno per sbaglio (bontà non voglia, qualcuno potrebbe quindi unire che in qualche altro ramo!), Non vedo alcun motivo per creare questa impegnarsi nella prima posto.


Presumibilmente, stai creando rami di funzionalità e non unendo ogni piccola modifica al ramo principale. È improbabile che le fusioni possano causare conflitti in un ramo di funzionalità a meno che più persone non lavorino nella stessa classe nello stesso ramo di funzionalità.
Robert Harvey,

4
@RobertHarvey Sì, ma presumibilmente unisco frequentemente il ramo principale nel mio ramo. Nel tuo commento c'è un'ipotesi nascosta secondo cui funzionalità diverse toccheranno naturalmente classi / moduli diversi, ma non tutti sono fortunati. Per (mis) fortuna hai una classe di Dio da qualche parte che chiunque fa qualsiasi cosa deve toccare, e non puoi fare molto al riguardo. Inoltre ci sono funzionalità trasversali (aggiorna qualche libreria a causa della quale una delle 10 righe di codice deve cambiare ...) Conosco l'argomento "prova a non arrivarci", ma cosa succede se ci sei già? Meglio prevenire che curare.

2

Dopo un'unione, potrebbero esserci delle modifiche ai file nel repository locale. Queste modifiche non vengono automaticamente assegnate al locale, a meno che non si imposti "Conferma modifiche unite immediatamente".

Se non si imposta tale opzione, i file vengono visualizzati in SourceTree come modifiche non impegnate.

Questo perché Git stesso non si impegna a meno che tu non lo dica esplicitamente a, e SourceTree è una GUI di Git. L' opzione "Conferma modifiche unite immediatamente" non è tanto un'opzione, ma è una scorciatoia da comando.

Quindi, il motivo per cui non si desidera utilizzare questa funzione è evidente: si desidera eseguire il commit manualmente o per niente.

Supponiamo che porti master nel ramo delle funzionalità. Un collega sta lavorando a un ramo di funzioni diverso. Questo collega ha una storia di rottura di cose. L'unione contiene modifiche al codice comune condiviso apportate da questo collega. Quindi, insieme al resto del team , non commetti modifiche unite finché non sei sicuro che non ci siano modifiche apportate da questo collega che influiranno sul tuo lavoro.

Solo perché non c'è una buona ragione - in teoria - per non usare questa funzione, in realtà, ci possono essere molte buone ragioni. Per quanto riguarda il tuo tutorial, direi semplicemente che "99 volte su 100, questa è l'opzione che vuoi usare". Non penso che tu abbia davvero bisogno di entrare nei dettagli sul non usarlo, specialmente se gli altri sono nuovi nel controllo delle versioni. Tutto dipende da quanto in profondità intendi che il tutorial sia.


2

Se si utilizza un hook post commit per eseguire il push automatico dei commit (come in /programming//a/7925891/6781678 ), potrebbe essere necessaria questa opzione per evitare di eseguire un commit di dubbia qualità.

Non userei nemmeno.

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.