Как обрабатываются два человека, одновременно редактирующих один и тот же файл? - PullRequest
18 голосов
/ 27 октября 2010

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

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

Это правильно?

Пожалуйста, уточните. Спасибо.

Ответы [ 2 ]

35 голосов
/ 27 октября 2010

Нет, это не совсем правильно. Отчасти это зависит от того, какое программное обеспечение для управления версиями вы используете, но мне нравится 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>
    }
}

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

Так что в конечном итоге живет в хранилище:

Оригинальная версия -> Версия Алисы -> Исправленная конфликтом версия Боба.

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

4 голосов
/ 27 октября 2010

Многое зависит от системы, которую вы используете.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...