Question Comment deux personnes qui modifient simultanément le même fichier sont-elles gérées?


Je crois que le titre le dit. Je suis nouveau pour le contrôle de source.

Alors, disons que j'ai deux développeurs travaillant sur le même projet et qu'ils ont commencé à éditer le même fichier (s) en même temps, puis chacun a envoyé la nouvelle version à un moment légèrement différent. D'après ce que je comprends, celui qui envoie les modifications en dernier aura ses modifications conservées, le code de l'autre sera uniquement dans les archives !!!

Est-ce exact?

Précisez s'il vous plaît. Merci.


16
2017-10-26 23:17


origine


Réponses:


Non, ce n'est pas tout à fait correct. Cela dépend quelque peu du logiciel de contrôle de version que vous utilisez, mais j'aime bien 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 modifient le fichier. Alice fait ça:

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

et Bob fait ça:

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

Alice vérifie d'abord sa version. Lorsque Bob essaie de vérifier son entrée, Git l'avertit qu'il y a un conflit et ne permet pas que le commit soit envoyé dans le référentiel principal. Bob doit mettre à jour son référentiel local et résoudre le conflit. Il aura quelque chose comme ça:

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

le <<<<<, ===== et >>>>> Les marqueurs indiquent quelles lignes ont été modifiées simultanément. Bob doit résoudre le conflit de manière judicieuse, supprimer les marqueurs et commettre le résultat.

Donc ce qui finit par vivre dans le dépôt est:

Version originale -> Version d'Alice -> Version résolue de conflit de Bob.

En résumé: le premier à s’engager 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 modifications de quelqu'un qui sont automatiquement bloquées. 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 restaurer le correctif incorrect et le réparer.


32
2017-10-26 23:29



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

Cependant, dans le cas le plus courant, celui qui commet ses modifications doit effectuer une opération de "fusion". Cela signifie qu'il / elle devrait comparer les deux fichiers et proposer une version fusionnée. Cependant (!) De nombreux systèmes populaires (y compris IDE) sont fournis avec des outils intelligents pour vous aider à y parvenir.

Voici quelques outils comme ça comparé: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools


4
2017-10-26 23:29