Почему Mercurial заставляет вас извлекать / обновлять / объединять несвязанные файлы? - PullRequest
3 голосов
/ 28 декабря 2011

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

, т.е.Я изменяю file1.txt, а кто-то другой меняет file10.txt.Почему я должен слиться на моем компьютере, прежде чем мне разрешат нажать?

Это делает нажатие большой болью , так как вам приходится постоянно извлекать / обновлять / объединять, если много разработчиков коммитируют.

Кроме того, ваш набор изменений выглядит намного больше, чем был, поскольку он показывает ваши слияния как отдельные коммиты.

Ответы [ 3 ]

9 голосов
/ 28 декабря 2011

Mercurial заставляет вас делать это, поскольку его атомарный блок - это не файл, а набор изменений.Это узел, содержащий группу изменений.Каждый набор изменений является отдельным узлом в истории и представляет собой то, что сделал этот человек.Это приводит к необходимости слияния, даже если нет общих файлов с изменениями (что было бы простым автоматическим слиянием).Эти узлы слияния важны, так как они являются частью истории ваших репозиториев и дают Mercurial больше информации для будущих слияний с наследственной информацией.

При этом есть расширение, которое вы можете использовать, чтобы немного очистить вашу историю (ноне решит вашу проблему с необходимостью тянуть, прежде чем нажать).Он называется rebase extension , он поставляется с Mercurial, но по умолчанию отключен.Он добавляет новый аргумент к pull , который выглядит следующим образом:

hg pull --rebase

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

5 голосов
/ 28 декабря 2011

Ну, вы можете попробовать использовать rebase , что позволит избежать коммитов слияния, но не без собственных опасностей.Вы также можете свернуться на один шаг, выполнив команду «hg pull --update» вместо отдельного «hg pull»;hg update команды.

Что касается необходимости объединения на вашем компьютере: это прямое следствие того, что mercurial является распределенной системой контроля версий.Не существует центрального сервера, который можно считать каноническим (если только вы не создадите его по соглашению), поэтому нет другого «места», где могло бы произойти слияние.Вы единственный, кто может решить, как информацию в вашем репо следует объединить с информацией в удаленном репо.Результаты этих решений должны быть записаны, и это является источником фиксации слияния.

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

2 голосов
/ 02 января 2012

Поскольку изменения в несвязанных файлах не гарантируют их независимость.

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

Вот почему всегда существует шаг слияния между ними, чтобы человек мог просмотреть изменения, проверить их на наличие проблем и решить их до интеграцииизменения обратно в основной репозиторий.Этот шаг очень важен, потому что его пропуск может привести к блокировке всех этих 50-100 коллег (что очень дорого).

Я бы прислушался к совету Лассе и давил реже.Слияние не имеет большого значения, если вам нужно делать это дважды или трижды в день.Также возможно создание небольших групповых репозиториев (или веток), которые ежедневно объединяются с основным репозиторием назначенным лицом.

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