2010-10-26 20 views
13

Je crois que le titre l'indique. Je suis nouveau à la source de contrôle de la source. Alors, disons que j'ai deux développeurs travaillant sur le même projet et qu'ils ont commencé à éditer le (s) même (s) fichier (s) en même temps, alors chacun d'eux envoie la nouvelle version à un moment légèrement différent. D'après ce que je comprends, celui qui envoie les changements en dernier aura ses changements conservés, le code de l'autre sera dans les archives seulement !!!Comment deux personnes, éditant simultanément le même fichier est-elle gérée?

Est-ce correct?

Veuillez clarifier. Merci.

Répondre

29

Non, ce n'est pas tout à fait correct. Cela dépend un peu du logiciel de contrôle de version que vous utilisez, mais j'aime Git donc je vais en parler.

Supposons que nous ayons un fichier Foo.java:

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

Alice et Bob modifier le fichier. Alice fait ceci:

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

et Bob fait ceci:

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

Alice vérifie sa première dans la version. Quand Bob essaye de vérifier son entrée, Git l'avertira qu'il y a un conflit et ne permettra pas que le commit soit poussé dans le dépôt principal. Bob doit mettre à jour son référentiel local et corriger le conflit. Il va obtenir quelque chose comme ceci:

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> 
    } 
} 

Les <<<<<, ===== et >>>>> marqueurs indiquent les lignes ont été modifiées en même temps. Bob doit résoudre le conflit de manière sensée, retirer les marqueurs et valider le résultat.

Alors, que vit finalement dans le référentiel est:

Version originale -> version d'Alice -> Bob version fixe conflit. Pour récapituler: le premier à valider entre sans problème, le second à valider doit résoudre le conflit avant d'entrer dans le référentiel. Vous ne devriez jamais vous retrouver avec les changements de quelqu'un étant automatiquement bousculés. De toute évidence, Bob peut résoudre le conflit de manière incorrecte, mais la beauté du contrôle de version est que vous pouvez annuler le correctif incorrect et le réparer.

+0

Vous avez dit gentiment! Claps :-) –

4

Cela dépend beaucoup du système que vous utilisez.

Cependant dans le cas commun est: qui effectue ses modifications deuxième devrait effectuer une opération de "fusion". Ce qui signifie qu'il/elle aurait besoin de comparer les deux fichiers et de trouver une version fusionnée. Cependant (!) De nombreux systèmes populaires (y compris IDE) est livré avec des outils intelligents pour vous aider à le faire.

Voici quelques outils comme ça par rapport: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools