Использование Mercurial в большой организации

Вы можете использовать эту функцию, которая получает promFactories List:

function executeSequentially(promiseFactories) {
    var result = Promise.resolve();
    promiseFactories.forEach(function (promiseFactory) {
        result = result.then(promiseFactory);
    });
    return result;
}

Promise Factory - это простая функция, которая возвращает Promise:

function myPromiseFactory() {
    return somethingThatCreatesAPromise();
}

Это работает, потому что фабрика обещаний не создает обещание, пока его не попросят. Он работает так же, как функция then - на самом деле, это одно и то же!

Вы не хотите работать над множеством обещаний. По спецификации Promise, как только создается обещание, оно начинает выполняться. Так что вы действительно хотите, это массив обещающих фабрик ...

Если вы хотите узнать больше о Promises, вы должны проверить эту ссылку: https://pouchdb.com/2015/05 /18/we-have-a-problem-with-promises.html

64
задан Community 23 May 2017 в 10:28
поделиться

3 ответа

AFAICS, большая часть сопротивления любому из DVCS исходит от людей, не понимающих, как их использовать. Часто повторяемое утверждение о том, что «центрального репозитория нет», очень пугает людей, которые с незапамятных времен были привязаны к модели CVS / SVN и не могут вообразить ничего другого, особенно для руководителей и старших руководителей (опытных и / или циничные) разработчики, которые хотят надежного отслеживания и воспроизводимости исходного кода (а также, возможно, если вам нужно соответствовать определенным стандартам в отношении процессов разработки, как мы это делали в месте, где я когда-то работал). Что ж, у вас может быть центральное «благословенное» репо; вы просто не прикованы к этому. Подгруппе легко, например, на время настроить внутреннее хранилище игровых площадок на одной из своих рабочих станций.

Есть так много способов снять шкуру с пресловутой кошки, что вам будет выгодно сесть и тщательно обдумать свой рабочий процесс. Подумайте о своих текущих методах работы и о возможностях, которые дает вам почти бесплатное клонирование и ветвление. Вероятно, что часть того, что вы делаете в настоящее время, будет развиваться, чтобы обойти ограничения модели типа CVS; будьте готовы сломать шаблон. Вам, вероятно, потребуется назначить одного или двух чемпиона, чтобы облегчить всем переход; с большой командой вы, вероятно, захотите подумать об ограничении доступа к фиксации для blessed .

На моей работе (небольшой программный дом) мы перешли с CVS на hg и больше не вернулись. Мы используем его в основном централизованно.Преобразование нашего основного (древнего и очень большого) репо было болезненным, но это будет любой путь, и когда это будет сделано, все будет готово - позже будет намного проще изменить VCS. (Мы обнаружили ряд ситуаций, когда инструменты преобразования CVS просто не могут понять, что произошло; когда чья-то фиксация была успешной только частично, и они не замечали этого в течение нескольких дней; разрешение ветвей поставщиков; общее безумие и безумие, вызванное тем, что время, казалось, уходило назад, без помощи временных меток фиксации по местному времени из разных часовых поясов ...)

Большое преимущество, которое я обнаружил в DVCS, - это возможность выполнять фиксацию раньше и часто фиксировать и нажимать только тогда, когда она готова. По мере того, как я достигаю различных этапов незавершенной работы, мне нравится проложить линию на песке, чтобы у меня было место, куда я могу перемотать, если потребуется - но это не коммиты, которые следует раскрывать команде, поскольку они явно не завершены. множеством способов. (Я делаю это в основном с ртутными очередями.) Все дело в рабочем процессе; Я бы никогда не смог сделать это с CVS.

Думаю, вы это уже знаете, но если вы собираетесь отказаться от CVS, вы можете сделать намного лучше, чем SVN ...


Для монолита или для модуля? Любая смена парадигмы будет сложной задачей, независимо от того, с какой VCS вы работаете, распространяемой или нет; Модель CVS является особенной в том, как она позволяет вам делать коммиты по каждому файлу, не проверяя, обновлена ​​ли остальная часть репо (и давайте не будем упоминать головную боль, которую, как известно, вызывают псевдонимы модулей).

  • Работа с монолитными репозиториями может быть довольно медленной.Ваш клиент vcs должен сканировать вашу копию всей вселенной на предмет изменений, а не только одного модуля. (Если вы работаете в Linux, изучите расширение hg inotify, если вы еще этого не сделали.)
  • Монолитное репо также вызывает ненужные состояния гонки при фиксации (отправке). Это похоже на проверку актуальности CVS, но применяется ко всему репо: если у вас много активных разработчиков, которые часто совершают коммиты, этот вас укусит.

Я бы посоветовал отказаться от монолитности, но помните, что это приведет к дополнительным накладным расходам с точки зрения дополнительной сложности вашей системы сборки. (Примечание: если вы считаете что-то утомительным, автоматизируйте это! Мы, программисты, в конце концов, ленивые существа.) Разделение репозитория на все его составляющие модули может быть слишком экстремальным; можно найти промежуточный вариант со связанными компонентами, сгруппированными вместе в небольшом количестве репозиториев. Вам также может быть полезно изучить поддержку подмодулей Mercurial - Вложенные репозитории и Forest Extension (оба из которых я должен попытаться разобраться).

На бывшем рабочем месте у нас было несколько десятков компонентов, которые хранились как независимые модули CVS с достаточно упорядоченной метаструктурой. Компоненты декларировали, от чего они зависят и какие построенные части должны быть куда экспортированы; система сборки автоматически написала make-фрагменты, чтобы то, над чем вы работали, могло подобрать то, что нужно. Обычно это работало очень хорошо, и довольно редко можно было не пройти проверку актуальности CVS.(Был также чертовски сложный, но чрезвычайно мощный сборщик-бот с наименьшими усилиями по разрешению зависимостей: он не перестраивал бы компонент, если бы он уже соответствовал вашим требованиям. Добавьте к этим метакомпонентам, которые собирают установщики и все ISO-образы, и у вас есть хороший рецепт для легкого начала работы.Закончить постройки и все идет Ученик волшебника. Кто-нибудь должен написать об этом книгу ...)

44
ответ дан 24 November 2019 в 15:54
поделиться

Прежде всего, актуальна недавняя дискуссия об использовании DVCS в крупных проектах:

Распределенный контроль версий для ОГРОМНЫХ проектов - возможно ли это?

Один недостаток Mercurial заключается в том, что он, похоже, основан на идее иметь один репозиторий на «проект».

Да, в то время как нормой для Subversion является наличие одного монолитного репозитория, содержащего несколько проектов, для DVCS предпочтительно иметь более гранулированные репозитории, по одному на компонент. Subversion имеет функцию svn:externals для объединения нескольких исходных деревьев во время оформления заказа (что имеет свои собственные логистические и технические проблемы). И Mercurial, и Git имеют сходную особенность, называемую subrepos в hg.

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

Должен ли мы иметь один огромный репозиторий Mercurial, содержащий все? Если нет, то насколько мелкозернистыми должны быть меньшие хранилища? Я думаю, что люди найдут это очень раздражающим, если им придется извлекать и загружать обновления из разных мест, но они также находят это раздражающим, если им приходится извлекать / выдвигать всю кодовую базу компании.

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

Одним из предостережений является то, что поддержка subrepo является относительно недавней функцией, и она не настолько полноценна, как другие функции. В частности, не все команды hg знают о подпунктах, хотя наиболее важные из них знают.

Я предлагаю вам выполнить тестовую конвертацию и поэкспериментировать с поддержкой субрепо, организацией продуктов и зависимых компонентов и т. Д. Я делаю то же самое, и, похоже, это путь.

8
ответ дан Community 23 May 2017 в 10:28
поделиться

Раскрытие информации: это перекрестный пост из другого потока, который был посвящен git, но я все равно рекомендовал mercurial. Он имеет дело с DVCS в корпоративном контексте в целом, поэтому я надеюсь, что кросс-постинг его подойдет. Я немного изменил его, чтобы лучше соответствовать этому вопросу:


Вопреки общепринятому мнению, я считаю, что использование DVCS - идеальный выбор в условиях предприятия, поскольку он обеспечивает очень гибкие рабочие процессы. Сначала я расскажу об использовании DVCS и CVCS, о лучших практиках, а затем, в частности, о git.

DVCS против CVCS в контексте предприятия:

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

Еще одно измерение в контексте дисциплины - поощрение разветвлений и экспериментов. Вот цитата из недавней записи в блики Мартина Фаулера об инструментах управления версиями , он нашел очень краткое описание этого явления.

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

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

Рабочие процессы:

Ларри Остерман (разработчик Microsoft, работающий в команде Windows) написал отличную запись в блоге о рабочем процессе, который они используют в команде Windows. В частности, у них есть:

  • Чистая, высококачественная магистраль только для кода (главный репозиторий)
  • Вся разработка происходит в функциональных ветках.
  • Функциональные группы имеют командные репозитории
  • Они регулярно объединяют последние изменения основной магистрали в свои ветвь функций ( Прямая интеграция )
  • Полные функции должны пройти несколько ворот качества, например обзор, тестовое покрытие, вопросы и ответы (репозитории сами по себе)
  • Если функция завершена и имеет приемлемое качество, она объединяется в магистраль ( Обратная интеграция )

Как видите, наличие каждого из этих репозиториев существуют сами по себе, вы можете разделить разные команды, продвигающиеся с разной скоростью.Кроме того, возможность реализации гибкой системы контроля качества отличает DVCS от CVCS. Вы также можете решить свои проблемы с разрешениями на этом уровне. Только горстка людей должна иметь доступ к главному репо. Для каждого уровня иерархии создайте отдельный репозиторий с соответствующими политиками доступа. Действительно, такой подход может быть очень гибким на командном уровне. Вы должны предоставить каждой команде право решать, хотят ли они поделиться своим командным репозиторием между собой или они хотят более иерархического подхода, при котором только руководитель команды может принять участие в командном репо.

Hierachical Repositories

(Изображение украдено с сайта Джоэла Спольски hginit.com .)

Здесь остается сказать одно, хотя DVCS обеспечивает большие возможности слияния, это никогда вместо использования непрерывной интеграции. Даже в этот момент у вас есть большая гибкость: CI для основного репозитория, CI для командных репозиториев, репозиториев вопросов и ответов и т. Д.

Mercurial в контексте предприятия:

Я не хочу начинать git vs. hg flamewar, вы уже на правильном пути, рассматривая возможность перехода на DVCS. Вот несколько причин использовать Mercurial вместо git:

  • Поддерживаются все платформы, на которых запущен python
  • Отличные инструменты с графическим интерфейсом пользователя на всех основных платформах (win / linux / OS X), первоклассная интеграция с инструментами слияния / vdiff
  • Очень последовательный интерфейс, простой переход для пользователей svn
  • Может делать большинство вещей, которые может делать git, но обеспечивает более чистую абстракцию. Опасные операции всегда явны. Расширенные функции предоставляются через расширения, которые должны быть включены явно.
  • Коммерческая поддержка доступна от selenic.

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

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

55
ответ дан 24 November 2019 в 15:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: