Является ли DVCS (Mercurial ) не для меня?

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

Customer1
    ProjectX
        App
        Tests
    ProjectY
        App
        Tests
Customer2
    Project2
Products
    Product1
Common

Сегодня все хранится в едином репозитории.

Процесс прост.

  1. Разработчик берет на себя новый проект для клиента
  2. Создает новую папку для проекта
  3. Код в новом проекте
  4. Выполняет некоторые работы по обслуживанию в другом проекте
  5. Проверяет обновления в проекте обслуживания
  6. Больше работы в новом проекте
  7. Отметить в новом проекте
  8. Доставить заказчику

Нет тегов и ветвлений. Более ранние версии проверяются на основе даты.

Этот процесс хорошо служил в течение многих лет, но есть несколько проблем с текущим инструментом (CVS)

  • Медленно. Оформление заказа занимает минуты, даже если ничего не изменилось. История хранится на сервере, поэтому сравнение занимает слишком много времени
  • Добавление новых проектов. В нашем случае это означает, что выполнение работ по обслуживанию в одной папке также приведет к фиксации незавершенного материала в другой папке. (Я предполагаю, что мы могли бы сделать hg ci ./** в измененных папках, но это не разрешено при слиянии, по крайней мере, так говорится в документации Если вы фиксируете результат слияния, не указывайте имена файлов или фильтры -I / -X. )

    Обычной практикой в ​​Mercurial является создание одного репозитория для каждого проекта.

    Один репозиторий на проект подходит для нас, но это создает некоторые другие проблемы например:

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

    hg push http: // localhost: 8000 / Customer1 / NewProject

    приводит к сбою hg-webserver с некрасивым дампом стека и зависанию клиента.

    Насколько я понимаю, разработчику необходим доступ к оболочке сервера, чтобы добавить новый репозиторий в файл конфигурации и перезапустить hgweb

    Альтернативой является использование SSH или общего ресурса (есть ли преимущества использования SSH вместо общего файлового ресурса?)

    cd Customer\NewProject
    hg init
    hg clone --noupdate --pull . //mercurialshare\Customer\Project
    echo "[paths]" >.hg\hgrc
    echo "default=//mercurialshare\Customer\Project" >>.hg\hgrc
    
    hg push
    

    Работает, но для некоторых разработчиков это немного сложно

    Все разработчики должны иметь все проекты.
    (Не все, но многие проекты связаны между собой поэтому они должны присутствовать, и проще всего просто иметь все)

    Поскольку множество существующих проектов и новые добавляются еженедельно, нам нужен способ вытащить все проекты за один раз, а также клонировать новые.

    Я думал эти подрепо могли решить "глобальную" проблему, но следующие Строка в документации - это остановка

    «Когда мы фиксируем, Mercurial попытается создать согласованный снимок состояния всего проекта и его вложенных репозиториев. В чем разница? Я пытаюсь изучить ExtJS и объектно-ориентированный JavaScript в целом. Я видел, как люди определяли классы в пользовательских пространствах имен несколькими способами. В чем разница между этими двумя методами? ...

    Я пытаюсь изучить ExtJS и объектно-ориентированный JavaScript в целом. Я видел, как люди определяли классы в пользовательских пространствах имен несколькими способами. В чем разница между этими двумя методами?

    Метод 1

    Ext.ns('myapp.cars');
    (function(){
        var Car = Ext.extend(Object, {
           //...
        })
    
        myapp.cars.Car = Car;
    })()
    

    Метод 2

    Ext.ns('myapp.cars');
    myapp.cars.Car = Ext.extend(Object, {
           //...
    });
    

    Метод 2 легче читать и требует меньше кода; есть ли причина, по которой метод 1 лучше? Спасибо!

12
задан Clint Harris 24 April 2012 в 21:51
поделиться