Sono abituato al controllo della versione, in particolare attualmente utilizzo Mercurial. Ho qualche dubbio su come farlo funzionare in team di grandi dimensioni, dove c'è una buona probabilità di avere più persone che lavorano sullo stesso file.
Fammi fare un esempio con Mercurial (ma qualsiasi sistema decentralizzato sarà più o meno lo stesso). Supponiamo di avere un server centrale e tre sviluppatori Alice, Bob e Carl. I tre decidono di iniziare a lavorare nello stesso momento e tutti tirano dal server. Per caso capita che stiano lavorando sullo stesso file.
Alice termina per prima e invia le sue modifiche al server. Poi sia Bob che Carl finiscono, più o meno allo stesso tempo. Prima di spingere, controllano se c'è qualcosa di nuovo e trovano il commit di Alice. Quindi lo estraggono e ognuno unisce le modifiche localmente. Poi Bob lo spinge e Carl spinge i suoi cambiamenti.
Quello che succede qui è che sul server ci sono due teste: una di Bob e una di Carl, ed entrambe includono le fusioni con il lavoro di Alice. Chiunque tiri fuori dal server troverà un piccolo casino. Ovviamente si possono semplicemente unire le teste di Bob e Carl, ma potrebbe non essere così semplice. Bob e Carl potrebbero aver avuto idee diverse su come fondersi con il lavoro di Alice.
Non appena più persone iniziano a lavorare al progetto, le cose possono andare anche peggio. Quindi, mentre in teoria capisco come si suppone che le fusioni funzionino, non mi è chiaro come rendere le cose gestibili in un grande progetto.
How do people manage to resolve conflicts when there are many people working on the same file, possibly having done different merges in different orders?