2012-05-26 3 views
2

Я храню свои проекты php под частной учетной записью GitHub.GitHub: Возможно ли иметь хранилище из репозиториев?

Теперь, например, у меня есть разные компоненты (комплект новостей, набор для пользователей и т. Д.) И один проект, который использует все их вместе (например, пользовательский веб-сайт). Могу ли я как-то их символизировать?

Или я должен использовать только репозитории компонентов?

С уважением

EDIT:

Там больше всего быть простой способ сделать это, например, для проекта Symfony2. Всегда есть компоненты, которые также доступны в родительском репозитории.

Например: https://github.com/symfony/OptionsResolver

Symfony/OptionsResolver-> syfmony/symfony-> Symfony/стандартное издание

ответ

4

Способ обработки зависимостей в проектах Symfony 2 Git заключается в следующем:

Основной проект находится под Git. Внешние зависимости (Связки и все эти вещи поставщика) входят в файл .deps (или composer.json). Затем я либо запускаю php bin/vendors install, либо composer install для установки зависимостей.

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

Я также иметь эту структуру:

src\Company\SharedBundle 
src\Company\ProjectBundle 

Где SharedBundle просто определена как зависимость и пути целевой установки находится под src\Company.

Я использую SharedBundle во всех своих проектах. Если мне нужно внести в него изменения, я делаю их в одном из проектов, затем I cd src\Company\SharedBundle, совершаю это и нажимаю на него и извлекаю из всех проектов, которые его используют, когда мне нужны изменения.

С deps, вы можете сделать таргетинг как:

[AcmeAwesomeBundle] 
    git=http://github.com/johndoe/Acme/AwesomeBundle.git 
    target=../src/Acme/AwesomeBundle 

Если вы используете компоновщик, вы, вероятно, хотите: http://getcomposer.org/doc/01-basic-usage.md#autoloading

+0

Привет, это то, что я искал ! Но есть еще некоторые вопросы: 1. Итак, когда я в корне проекта sub git git автоматически изменяет репозиторий (для push и т. Д.). Больше нечего делать? 2. Где вы устанавливаете целевой каталог из git-зависимостей (я предполагаю, что пакет зарегистрирован в основном composer.json, а dir устанавливается в композитор.json пакета, но как я могу напрямую установить извлечение dir ?) – bodokaiser

+0

@ user1246987 1) Да, для второго ответа я обновил свой ответ. –

+0

К сожалению, я потерпел неудачу в части композитора. Какие шаги требуется для установки частного пакета в/src композитором? EDIT: Однако, когда я создаю git-хранилище manuelly и использую его с IDE, он работает неплохо. Нет необходимости в композиторе. Единственное, что может быть лучше, - это то, что главный проект должен видеть компоненты. На данный момент есть только знак того, что подкаталоги принадлежат другому репо – bodokaiser

1

Вы можете взглянуть на подмодулях.

http://git-scm.com/book/en/Git-Tools-Submodules

+0

Это единственное решение? В проекте symfony2 часто используются иерархические репозитории. Любая идея, как они справляются с этим? https://github.com/symfony/OptionsResolver Также подмодули нелегко обрабатывать – bodokaiser

1

Вы можете использовать composer для обработки зависимостей. Это не будет блокировать подпроекты для конкретной фиксации, как это делают подмодули. Symfony использует композитор.

+0

Привет, я использую сам композитор (мастер-ветвь). Вопрос в том, как я мог обрабатывать разные git в одном проекте, например symfony. Так, например, у меня есть весь проект как репозиторий и самостоятельные пакеты как репозиторий. Что мне нужно сделать, чтобы справиться с этим с git? – bodokaiser

+0

над компонентами symfony2 в github есть следующее уведомление: [READ-ONLY] Разделение субтитров пакета Symfony Twig Bundle - клонирование в Symfony/Bundle/TwigBundle (master at symfony/symfony) – bodokaiser

1

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

Очевидно, что перед тем, как попробовать это, запустите все, но я думаю, вы просто хотите использовать «git remote add [произвольное имя другого репозитория] [местоположение другого репозитория]», «git fetch [произвольное имя другого репозитория] "и" get merge [произвольное имя другого репозитория]/[ветвь другого репозитория] ". Вы можете сделать это с помощью как можно большего количества различных репозиториев. Например, все мои репозитории теперь начинаются как клоны репозитория для структуры, с которой они построены. Не имеет значения, что мои проекты действительно не имеют ничего общего с каркасом, за исключением того, что они используют его в качестве отправной точки.

Так вы хотите что-то вроде этого:

git remote add news-bundle git://example.com/news-bundle.git 
git merge news-bundle/master 
git remote add user-bundle git://example.com/user-bundle.git 
git merge user-bundle/master 

Затем, когда вы сделали больше изменений новостей расслоения, вы можете обновить другое хранилище, как это:

git fetch news-bundle 
git merge news-bundle/master 
Смежные вопросы