Ответ 1
Нет, это не совсем правильно. Это зависит от того, какое программное обеспечение для управления версиями вы используете, но мне нравится Git, поэтому я расскажу об этом.
Предположим, что у нас есть файл Foo.java:
class Foo {
public void printAWittyMessage() {
// TODO: Be witty
}
}
Алиса и Боб оба изменяют файл. Алиса делает это:
class Foo {
public void printAWittyMessage() {
System.out.println("Alice is the coolest");
}
}
и Боб делает следующее:
class Foo {
public void printAWittyMessage() {
System.out.println("Alice is teh suk");
}
}
Алиса сначала проверяет ее версию. Когда Боб пытается проверить его, Git предупредит его, что есть конфликт, и он не позволит совершить передачу в главный репозиторий. Боб должен обновить свой локальный репозиторий и исправить конфликт. Он получит что-то вроде этого:
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>
}
}
Маркеры <<<<<
, =====
и >>>>>
показывают, какие строки были изменены одновременно. Боб должен каким-то образом разрешить конфликт, удалить маркеры и зафиксировать результат.
Итак, что в конечном итоге живет в репозитории:
Исходная версия → Версия Алисы → Боб-конфликтная версия.
Подводя итог: первый для фиксации попадает без каких-либо проблем, второй для фиксации должен разрешить конфликт, прежде чем попасть в репозиторий. Вы никогда не должны кончаться тем, что кто-то изменяет автоматически. Очевидно, что Боб может неправильно разрешить конфликт, но красота контроля версий заключается в том, что вы можете откатить неправильное исправление и восстановить его.