Назад | Перейти на главную страницу

Будет ли mercurial правильно работать с несколькими пользователями, использующими одну рабочую копию на общей папке

Я ищу решение, в котором я могу установить контроль версий в корпоративной среде наименее навязчивым способом. Одно из возможных решений, которое я рассматривал, заключалось в том, чтобы настроить Mercurial на каждом из рабочих столов Windows и просто настроить рабочие копии репозиториев на общей папке. Таким образом, не было бы серверной установки Mercurial. Очевидно, это не решает проблему одновременного использования нескольких пользователей одного и того же файла, но это не та проблема, которую мы пытаемся решить. И это не резервная копия, но опять же, контроль версий не должен быть резервной копией. Плюс у нас есть много резервных копий.

Будет ли эта установка работать? Будут ли правильно записываться имена пользователей в журналах фиксации. Или все будет похоже на одного и того же пользователя? У кого-нибудь есть опыт работы с этой настройкой?

Да, вы можете делать то, что предлагаете. Современные версии Mercurial не особо заботятся о том, где хранятся рабочие копии - они могут храниться на локальном диске или в сетевой файловой системе.

У нас были некоторые проблемы в прошлом (до версии 1.7.1), когда Mercurial не мог разорвать жесткие ссылки в репозиториях, хранящихся в сетевых файловых системах. Проблема в том, что два репозитория будут жестко связаны на сервере, если вы сделаете hg clone foo bar. Если пользователь нажимает фиксацию на bar, и обращается к репозиторию через общий сетевой ресурс, тогда очень важно, чтобы Mercurial обнаружил, что файлы внутри bar/.hg/store жестко привязаны к foo/.hg/store так что он может разорвать ссылки. Из-за различных ошибки ядра в Windows и Linux, это могло не сработать со старыми версиями Mercurial.

Итак, напомним: вашему серверу не нужно устанавливать Mercurial, если вы просто установите Mercurial на всех клиентах. Создать (надеюсь, я правильно помню пути UNC)

\\server\share\main

в качестве основного репозитория и делаем клоны для разработчиков:

\\server\share\alice
\\server\share\bob

Алиса и Боб будут работать там и независимо изменять рабочие копии. Они совершают коммиты как обычно, и когда они готовы, они возвращаются к main репо. Имена пользователей хранятся в наборах изменений, поэтому они будут сохранены, когда наборы изменений перейдут в основное репо.

Создайте общий базовый репозиторий в общей сетевой папке. Попросите всех пользователей выполнить «hg clone», чтобы получить локальную копию этого репозитория и позволить им работать (компилировать, редактировать, «hg add / ... / commit») с локальной копией. Когда кто-то готов отправить свои локальные изменения в общий репозиторий, позвольте ему выполнить «hg push». Каждый раз, когда кто-то хочет, чтобы изменения были отправлены в общий репозиторий другими, позвольте им выполнить «hg pull» и «hg update». Вот и все в двух словах.

Пара замечаний:

  • Одновременный доступ для чтения / записи к общему репозиторию не является проблемой. Как и другие подобные системы, Mercurial был специально разработан для решения этой проблемы.

  • Локальные копии общего репозитория являются ваши резервные копии.

  • Имена пользователей, прикрепленные к коммитам, должны быть настроены вручную в файлах mercurial.ini в каждой локальной установке Mercurial. Я не знаю, есть ли способ использовать в этом файле что-то вроде% USERNAME%, которое могло бы расшириться до имени текущего входа в систему, может быть.

  • Распространенной практикой является избегание нескольких заголовков в общем репозитории (просто игнорируйте этот пункт, если вы еще не знаете, о чем он говорит). Чтобы помочь в этом, пользователи, которые собираются продвинуть свои изменения, обычно хотят сначала извлечь изменения, сделанные другими, и убедиться, что их локальные изменения совместимы с изменениями, внесенными другими. Часть разрешения конфликтов выполняется с помощью hg merge. Большинство конфликтов разрешаются автоматически, но некоторые потребуют вмешательства пользователя (например, если мы с вами редактируем одну и ту же строку в одном файле, возникнет конфликт, и тем медленнее из нас придется справиться с этим и отредактировать окончательный вариант). линия вручную).

  • Поскольку мы имеем дело с Windows, я предлагаю использовать все имена файлов в нижнем регистре (или в верхнем регистре, если вам нравится кричать). Это может быть не обязательно в последних версиях Mercurial, но мы по-прежнему делаем это на всякий случай (и, да, когда что-то ломается, потому что Mercurial считает, что 'a.txt' - это не тот же файл, что и 'A. txt 'в системе на базе Windows, это некрасиво ломается).

Удачи.