2010-10-26 11 views
13

Credo che il titolo lo dica. Sono nuovo nel controllo del codice sorgente.Come vengono gestite due persone che modificano contemporaneamente lo stesso file?

Quindi, diciamo che ho due sviluppatori che lavorano sullo stesso progetto e hanno iniziato a modificare gli stessi file nello stesso momento, quindi ognuno di loro invia la nuova versione in un momento leggermente diverso. Da quello che ho capito, colui che invia le modifiche per ultime avrà le sue modifiche mantenute, il codice dell'altro sarà solo nell'archivio !!!

È corretto?

Si prega di chiarire. Grazie.

risposta

29

No, non è del tutto corretto. Dipende un po 'dal software di controllo della versione che stai usando, ma mi piace Git, quindi ne parlerò.

Supponiamo di avere un file Foo.java:

class Foo { 
    public void printAWittyMessage() { 
     // TODO: Be witty 
    } 
} 

Alice e Bob sia modificano il file. Alice fa questo:

class Foo { 
    public void printAWittyMessage() { 
     System.out.println("Alice is the coolest"); 
    } 
} 

e Bob fa questo:

class Foo { 
    public void printAWittyMessage() { 
     System.out.println("Alice is teh suk"); 
    } 
} 

Alice controlla la sua versione in prima. Quando Bob tenta di controllarlo, Git lo avviserà che c'è un conflitto e non permetterà che il commit venga inserito nel repository principale. Bob deve aggiornare il proprio repository locale e correggere il conflitto. Egli otterrà qualcosa di simile:

class Foo { 
    public void printAWittyMessage() { 
<<<<< HEAD:<some git nonsense> 
     System.out.println("Alice is the coolest"); 
===== 
     System.out.println("Alice is teh suk"); 
>>>>> blahdeblahdeblah:<some more git nonsense> 
    } 
} 

I <<<<<, ===== e >>>>> indicatori mostrano che le linee sono state modificate contemporaneamente. Bob deve risolvere il conflitto in qualche modo ragionevole, rimuovere i marcatori e impegnare il risultato.

Quindi, ciò che alla fine vive nel repository è:

Versione originale -> la versione di Alice -> Versione conflitto fissa di Bob.

Per riepilogare: il primo a commit entra senza problemi, il secondo a commit deve risolvere il conflitto prima di entrare nel repository. Non dovresti mai finire con le modifiche di qualcuno che vengono automaticamente danneggiate. Ovviamente Bob può risolvere il conflitto in modo errato, ma la bellezza del controllo della versione è che è possibile ripristinare la correzione errata e ripararla.

+0

L'hai detto bene! Applaude :-) –

4

Molto dipende dal sistema che si sta utilizzando.

Tuttavia nel caso comune è: chi commette le sue modifiche in secondo luogo dovrebbe eseguire un'operazione di "unione". Significato lui/lei avrebbe bisogno di confrontare i due file e trovare una versione unita. Tuttavia (!) Molti sistemi popolari (incluso IDE) sono dotati di strumenti intelligenti per aiutarti a farlo.

Ecco alcuni strumenti come che rispetto: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools

Problemi correlati