Использование одного репозитория git для нескольких проектов git
Я дешевый Я не хочу платить за многие аккаунты на github.
У меня есть структура проекта, которая выглядит примерно так.
- / repo является корнем проекта.
- / repo / project1 - это место, где у меня есть проект Java
- В /repo/herokurails1 у меня есть проект Ruby/Rails, который развертывается на heroku.com (в приложении heroku под названием hr1-fubar.heroku.com)
- В /repo/herokurails2 у меня есть еще один проект Ruby/Rails, который развертывается на heroku.com (в приложении heroku под названием hr2-fubar.heroku.com).
Все проекты (project1, herokurails1 и herokurails2 находятся в активной разработке).
Я хотел бы иметь один репозиторий на каком-нибудь хостинге git, например на github.com или даже на локальном git-сервере в офисе. Всякий раз, когда код изменяется где-либо в / repo /, я хочу иметь возможность запускать "git push github master" и получать все мои файлы / repo / tree до github.
Однако я также хотел бы иметь возможность развертывать свои приложения rails на heroku.com, не нажимая все дерево репозитория /*, помещаемое в каждое приложение heroku. например
- /repo/herokurails1> мастер git push heroku будет развертывать проект herokurails1 только на heroku, не нажимая никакой другой код в / repo /*
- /repo/herokurails2> мастер git push heroku будет развертывать проект herokurails2 только на heroku, не добавляя другой код в /repo/*.
Это возможно? Нужно ли создавать что-то особенное, чтобы это произошло? Или я застрял с несколькими git-репозиториями?
4 ответа
Это будет очень громоздко и очень быстро (особенно потому, что Git не позволит вам выдвигать подкаталоги pull как svn)
Я бы посоветовал не использовать Github для хранения проектов. Такие инструменты, как Bitbucket или CodebaseHQ, имеют разные модели ценообразования, которые могут вам лучше подойти и предоставят вам простоту, которая вам нужна.
Кроме того, посмотрите на что-то вроде Gitosis, которое можно сделать очень похожим на Github с помощью таких инструментов, как Gitlab.
Вы могли бы использовать git subtree
локально, чтобы поддерживать репозиторий git, который отделен от вашего большего repo
хранилище, и нажмите из этого разделенного хранилища. Честно говоря, я бы либо воспользовался одним из бесплатных сервисов, которые предлагает Адам Димитрук, либо просто заплатил бы немного больше GitHub - в конце концов, они предоставляют отличный сервис...
Если вы хотите, вы можете использовать unuddle или bitbucket, если вы не хотите ничего платить. Используйте субмодули для размещения больших файлов, таких как изображения, сторонние библиотеки, видео и т. Д. На github. Они не будут содержать IP.
Этот вопрос больше не имеет смысла, поскольку GitHub теперь позволяет пользователям иметь неограниченное количество репозиториев бесплатно, но я все равно поделюсь своими знаниями, потому что я думаю, что кому-то это может показаться интересным.
Дело в том, что у вас может быть репозиторий с несколькими проектами без необходимости создавать какой-либо другой репозиторий с git submodule
. Обычно, чтобы использовать подмодуль git, вам нужно иметь репозиторий для каждого подмодуля, но я понял, что вместо создания отдельного репозитория для каждого проекта, который вы хотите включить в свой репозиторий, вы можете повторно использовать репозиторий, который хотите включить в свой репозиторий. проекты в, например:
Создайте свой репозиторий, который будет содержать несколько проектов на GitHub.
Предположим, что этот репозиторий находится по адресу https://github.com/example/example.git.Клонируйте этот репозиторий локально:
git clone https://github.com/example/example.git
Создайте ветвь (желательно сиротскую) для каждого проекта, который вы хотите иметь:
git checkout --orphan project_1/master git commit -m "First commit of project_1/master" git push --set-upstream origin project_1/master git checkout --orphan project_2/master git commit -m "First commit of project_2/master" git push --set-upstream origin project_2/master git checkout --orphan project_3/master git commit -m "First commit of project_3/master" git push --set-upstream origin project_3/master
Добавьте в мастер ветки подмодуль для каждого из проектов, указав правильные ветки:
git checkout master git submodule add --branch project_1/master -- https://github.com/example/example.git project_1 git submodule add --branch project_2/master -- https://github.com/example/example.git project_2 git submodule add --branch project_3/master -- https://github.com/example/example.git project_3
Зафиксируйте и нажмите:
git commit -m "Added 3 projects to the repository" git push
Теперь вы можете использовать каждый проект в этом репозитории, как если бы каждый из них находился в собственном репозитории. Однако каждый раз, когда вы создаете новую ветку, вы должны создавать ее в папке ветки проекта. Например, если вы хотите создать ветку new_feature в проекте_1, вы должны выполнить это:
git branch 'project_1/new_feature'
А если вы хотите скачать проект где-нибудь еще, вы можете:
Клонируйте сам проект и ничего больше:
git clone --branch project_1 https://github.com/example/example.git ./project_1
Или клонируйте весь репозиторий, если вы хотите работать с несколькими проектами одновременно, а затем загрузите только содержимое проектов, с которыми вы действительно собираетесь работать:
git clone https://github.com/example/example.git git submodule init project_1 project_3 git submodule update --remote
Если ты всегда будешь
git submodule update
с участием--remote
вы также можете выполнить эту команду, чтобы перестать показывать имя проекта, когда выgit status
из основного репозитория:git submodule foreach 'git -C $toplevel config --file .gitmodules submodule.$name.ignore all'
Преимущества:
- Вам не нужно проверять другую ветку каждый раз, когда вы хотите работать с другим проектом
- Поскольку у вас нет веток переключения, вам также не нужно иметь дело с неотслеживаемыми файлами
- Фактически вы используете только один репозиторий.
Недостатки:
- Вы должны позаботиться о создании каждой ветки в правильной папке.
Вместо тогоfeature
вы создаете ветку под названиемproject_1/feature
Альтернативы:
git subtree
: Я понял, что этот инструмент создан для этой конкретной цели, но у него есть некоторые недостатки, и я не знаю, как его использовать.
Как насчет размещения каждого отдельного проекта в отдельную ветку? до сих пор это работало хорошо со мной. У меня есть личный репозиторий для веб-проектов, и каждая ветка начинается с мастера, в котором есть мой шаблон веб-проектов (также может быть и пустая ветка), и каждый раз, когда у меня появляется новый проект, я просто создаю основанную ветку с именем проекта и обращаюсь к работе нормально.,