Я работаю в компании, где мы создаем множество небольших приложений для конкретных клиентов. У нас несколько разработчиков, но в большинстве случаев на проект приходится только один разработчик.
Customer1
ProjectX
App
Tests
ProjectY
App
Tests
Customer2
Project2
Products
Product1
Common
Сегодня все хранится в едином репозитории.
Процесс прост.
Нет тегов и ветвлений. Более ранние версии проверяются на основе даты.
Этот процесс хорошо служил в течение многих лет, но есть несколько проблем с текущим инструментом (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 лучше? Спасибо!