Как обрабатываются два человека, одновременно редактируя один и тот же файл?

Я считаю, что название говорит об этом. Я новичок в управлении версиями.

Итак, скажем, у меня есть два разработчика, работающие над одним и тем же проектом, и они начали редактировать одни и те же файлы одновременно, а затем все из них отправляют новую версию в несколько другое время. Из того, что я понимаю, тот, кто отправляет последние изменения, сохранит свои изменения, другой код будет только в архиве!!!

Правильно ли это?

Просьба уточнить. Спасибо.

Ответы

Ответ 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>
    }
}

Маркеры <<<<<, ===== и >>>>> показывают, какие строки были изменены одновременно. Боб должен каким-то образом разрешить конфликт, удалить маркеры и зафиксировать результат.

Итак, что в конечном итоге живет в репозитории:

Исходная версия → Версия Алисы → Боб-конфликтная версия.

Подводя итог: первый для фиксации попадает без каких-либо проблем, второй для фиксации должен разрешить конфликт, прежде чем попасть в репозиторий. Вы никогда не должны кончаться тем, что кто-то изменяет автоматически. Очевидно, что Боб может неправильно разрешить конфликт, но красота контроля версий заключается в том, что вы можете откатить неправильное исправление и восстановить его.

Ответ 2

Многое зависит от используемой вами системы.

Однако в общем случае: кто совершает свои изменения, второй должен выполнить операцию "слияния". Значение s/he должно было бы сравнить два файла и придумать объединенную версию. Однако (!) Многие популярные системы (включая IDE) поставляются с умными инструментами, которые помогут вам в этом.

Вот некоторые инструменты, подобные этому: http://en.wikipedia.org/wiki/Comparison_of_file_comparison_tools