Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все Ваши вопросы.
Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все Ваши вопросы.
Наш специалист свяжется с Вами, обсудит оптимальную стратегию сотрудничества, поможет сформировать бизнес требования и рассчитает стоимость услуг.
Наш специалист свяжется с Вами, обсудит оптимальную стратегию сотрудничества, поможет сформировать бизнес требования и рассчитает стоимость услуг.
Заполните онлайн-заявку и получите выгодное спецпредложение прямо сейчас.
За вами будет закреплен персональный менеджер, который расскажет о платформе, ответит на все ваши вопросы и сформирует для вас коммерческое предложение.
Наш специалист свяжется с Вами и
обсудит время собеседования.
Вообще у меня впечатление, что git может всё. Правда, механизм работы не слишком простой, нужно понимать, как он при этом будет работать.
Поскольку git по природе своей распределённый, я сэмулирую ваш порядок работы в одном локальном репозитории на нескольких несвязанных ветках: a, b и master. Изменения в этих ветках могут запросто появляться из других репозториев (разные ветки могут следить за разными серверами!), но при использовании такой методики у вас локально должен быть репозиторий, в котором есть все три.
Поехали по пунктам:
Положим, что git init вы сделали, а С (сам проект) лежит в ветке master (что совершенно необязательно).
создать хранилище, где будут разные файлы скриптов (например, A)
Делаем «несвязанную ветку»:
git checkout --orphan a
Зачищаем папку и индекс, чтобы начать с чистого листа:
Делаем коммит с фигнёй:
хранилище, где будет стандартный набор файлов для начала программирования сайта (например, B)
То же самое.
Когда я создаю новый проект — создается новое хранилище (например, C).
Будем считать, что это ветка master. И в настоящий момент она должна быть пуста, для git это означает, что она не существует, поэтому придётся делать её заново:
Теперь мне нужно в С перенести стандартный набор с хранилища В.
Мёрдж:
При этом произойдёт fast-forward до b, master будет совпадать с веткой b. Это нормально. Ведь на этом этапе состояния файловой системы проекта совпадают, верно?
Потом мне нужно с А перенести 2 скрипта в С.
Мёрдж с a, но на сей раз с «тормозами», чтобы прямо перед коммитом git остановился:
Зачем? Затем, что вам не все файлы нужны. На этом этапе вы можете убрать из индекса ненужные вам файлы из индекса с помощью reset, зачистить оставшееся и закоммитить результат:
Теперь немного «поработаем», для вида:
в стандартных файлах (которые хранятся в В) есть ошибка. Я ей исправляю и хочу залить как на В…
Поскольку у вас (семантически) master основан на b, а не наоборот, ошибку вам надо починить именно в b, чтобы потом изменения «растеклись» (не автоматически!) по тем, кто ею пользуется. Идём в ветку b и чиним:
На этом этапе, если репозитории с b и master всё-таки разные, должен быть git push ветки b в соответствующий репозиторий, а в репозитории проекта нужно сделать git pull --ff-only (--ff-only разрешает только перемотку ветки — чтобы ваши изменения не «затекли» в b) в ветке, которая за тем репозиторием следит. Это уже отдельная тема, если интересно, расскажу и об этом.
… так и на С.
Переходим в ветку с проектом:
И делаем мердж ветки b в проект.
Готово. Да, вот так просто!
После проделывания вышеописанных манипуляций, я получил в master следующую схему из коммитов (git log --graph):
И для наглядности, перерисовал:
Вообще у меня впечатление, что git может всё. Правда, механизм работы не слишком простой, нужно понимать, как он при этом будет работать.
Поскольку git по природе своей распределённый, я сэмулирую ваш порядок работы в одном локальном репозитории на нескольких несвязанных ветках: a, b и master. Изменения в этих ветках могут запросто появляться из других репозториев (разные ветки могут следить за разными серверами!), но при использовании такой методики у вас локально должен быть репозиторий, в котором есть все три.
Поехали по пунктам:
Положим, что git init вы сделали, а С (сам проект) лежит в ветке master (что совершенно необязательно).
создать хранилище, где будут разные файлы скриптов (например, A)
Делаем «несвязанную ветку»:
git checkout --orphan a
Зачищаем папку и индекс, чтобы начать с чистого листа:
Делаем коммит с фигнёй:
хранилище, где будет стандартный набор файлов для начала программирования сайта (например, B)
То же самое.
Когда я создаю новый проект — создается новое хранилище (например, C).
Будем считать, что это ветка master. И в настоящий момент она должна быть пуста, для git это означает, что она не существует, поэтому придётся делать её заново:
Теперь мне нужно в С перенести стандартный набор с хранилища В.
Мёрдж:
При этом произойдёт fast-forward до b, master будет совпадать с веткой b. Это нормально. Ведь на этом этапе состояния файловой системы проекта совпадают, верно?
Потом мне нужно с А перенести 2 скрипта в С.
Мёрдж с a, но на сей раз с «тормозами», чтобы прямо перед коммитом git остановился:
Зачем? Затем, что вам не все файлы нужны. На этом этапе вы можете убрать из индекса ненужные вам файлы из индекса с помощью reset, зачистить оставшееся и закоммитить результат:
Теперь немного «поработаем», для вида:
в стандартных файлах (которые хранятся в В) есть ошибка. Я ей исправляю и хочу залить как на В…
Поскольку у вас (семантически) master основан на b, а не наоборот, ошибку вам надо починить именно в b, чтобы потом изменения «растеклись» (не автоматически!) по тем, кто ею пользуется. Идём в ветку b и чиним:
На этом этапе, если репозитории с b и master всё-таки разные, должен быть git push ветки b в соответствующий репозиторий, а в репозитории проекта нужно сделать git pull --ff-only (--ff-only разрешает только перемотку ветки — чтобы ваши изменения не «затекли» в b) в ветке, которая за тем репозиторием следит. Это уже отдельная тема, если интересно, расскажу и об этом.
… так и на С.
Переходим в ветку с проектом:
И делаем мердж ветки b в проект.
Готово. Да, вот так просто!
После проделывания вышеописанных манипуляций, я получил в master следующую схему из коммитов (git log --graph):
И для наглядности, перерисовал:
Стоит следующая задача: мне надо создать хранилище, где будут разные файлы скриптов (например, A). Также будет хранилище, где будет стандартный набор файлов для начала программирования сайта (например, B). Когда я создаю новый проект — создается новое хранилище (например, C).
Теперь мне нужно в С перенести стандартный набор из хранилища В. Потом мне нужно из А перенести 2 скрипта в С. После этого я вижу, что в стандартных файлах (которые хранятся в В) есть ошибка. Я её исправляю и хочу залить как на В, так и на С. И так далее. То есть мне надо с ними 3-мя работать одновременно.
Уже пробовал git и svn, ничего не получилось. Решение через git submodule не подходит, т.к. общие файлы нужно редактировать в конкретных проектах, и при этом иметь возможность подтягивать изменения в этих же файлах из основного набора.
В какой системе контроля версий и каким образом можно организовать хранилища для решения этой задачи?
Стоит следующая задача: мне надо создать хранилище, где будут разные файлы скриптов (например, A). Также будет хранилище, где будет стандартный набор файлов для начала программирования сайта (например, B). Когда я создаю новый проект — создается новое хранилище (например, C).
Теперь мне нужно в С перенести стандартный набор из хранилища В. Потом мне нужно из А перенести 2 скрипта в С. После этого я вижу, что в стандартных файлах (которые хранятся в В) есть ошибка. Я её исправляю и хочу залить как на В, так и на С. И так далее. То есть мне надо с ними 3-мя работать одновременно.
Уже пробовал git и svn, ничего не получилось. Решение через git submodule не подходит, т.к. общие файлы нужно редактировать в конкретных проектах, и при этом иметь возможность подтягивать изменения в этих же файлах из основного набора.
В какой системе контроля версий и каким образом можно организовать хранилища для решения этой задачи?
Да, Постргес сильнее и богаче, как по типам данных, по встроенным функциям, индексированию и имеет возможность дополняться… но, надо помнить что за всё надо платить. И плата тут одна — ресурсы сервера процы, память.
И это ещё одна причина предпочтения Мускулю: меньшие требования к ресурсам (дешевле сервер банально) для одних и тех же объемов и нагрузок. И кмк, совокупность (а не легкость начала и простота входа) и является определяющим фактором приоритетов выбора.
Да, Постргес сильнее и богаче, как по типам данных, по встроенным функциям, индексированию и имеет возможность дополняться… но, надо помнить что за всё надо платить. И плата тут одна — ресурсы сервера процы, память.
И это ещё одна причина предпочтения Мускулю: меньшие требования к ресурсам (дешевле сервер банально) для одних и тех же объемов и нагрузок. И кмк, совокупность (а не легкость начала и простота входа) и является определяющим фактором приоритетов выбора.
Порог входа для MySQL на порядок ниже.
Ну, мне конечно сложно оценить, потому что у меня не с нуля ни разу, но PostgreSQL я ставил именно ничего не зная о нем, скачал дистриб, распаковал, запустил, работает. Настройки потом конечно менять надо кое-какие, но у меня и ребенок это может сделать, если что (проверено). То есть, порог входа в PostgreSQL сегодня настолько низкий, что куда уже ниже и зачем — не очень понятно. И так легко все.
Порог входа для MySQL на порядок ниже.
Ну, мне конечно сложно оценить, потому что у меня не с нуля ни разу, но PostgreSQL я ставил именно ничего не зная о нем, скачал дистриб, распаковал, запустил, работает. Настройки потом конечно менять надо кое-какие, но у меня и ребенок это может сделать, если что (проверено). То есть, порог входа в PostgreSQL сегодня настолько низкий, что куда уже ниже и зачем — не очень понятно. И так легко все.
Насколько я быстро смог загуглить — нет, вроде нельзя. И в принципе, как по мне, один этот пункт перекрывает многие, если не все другие преимущества, касающиеся именно типов.
Я бы кстати тоже высказался так: с моей точки зрения сегодня нет никаких причин использовать MySQL, кроме одной: вы его хорошо знаете, и уже на нем работаете. То есть у вас легаси система, которую нет смысла портировать.
Насколько я быстро смог загуглить — нет, вроде нельзя. И в принципе, как по мне, один этот пункт перекрывает многие, если не все другие преимущества, касающиеся именно типов.
Я бы кстати тоже высказался так: с моей точки зрения сегодня нет никаких причин использовать MySQL, кроме одной: вы его хорошо знаете, и уже на нем работаете. То есть у вас легаси система, которую нет смысла портировать.