Несколько проектов в одном репозитории git?
В настоящий момент я являюсь пользователем SVN и просматриваю перенос моих проектов на git.
Я использую один SVN-репозиторий для хранения всех проектов, которые я создаю. Моя структура выглядит примерно так:
/
/group1
/subgroup1
/project1
/branches
...
/tags
...
/trunk
...
/project2
...
/subgroup2
/project3
...
/project4
...
/group2
/subgroup3
...
/subgroup4
...
/lib
/lib1
/lib2
/lib3
Как вы можете видеть, я сохраняю свои проекты в группах, а /lib
содержит библиотеки, совместно используемые между проектами.
Я выбрал эту структуру сортировки, потому что:
- Подобная структура репо была использована в компании, где я научился использовать SVN.
- Позволяет мне запустить
svnserve
как службу/демон на моей машине со всеми проектами, размещенными на нем (мне не нравится подход к файловой ссылке).
Теперь... в точку. Мне было интересно:
Как этот рабочий процесс будет работать, если я перейду к git?
В частности:
- Было бы легко перенести дерево репо на git?
- Предполагая, что для каждого проекта требуется отдельное репо *, как бы я мог обслуживать их всех (идеально сгруппированных аналогичным образом) через эквивалент
svnserve
git.
*) Я читал о git, и я понимаю, что это так, но я хотел дважды проверить с опытными людьми.
Ответы
Ответ 1
В Git лучше иметь каждый проект в своем собственном репо, а библиотеки в другом репо, если необходимо, и использоваться в качестве подмодулей (эквивалент внешних svn) в каждом проекте.
Это связано с тем, что в Git репо представляет собой гораздо более легкую концепцию, чем SVN, а также, что более важно, нет возможности клонировать отдельные папки (не путать с разреженной проверкой) внутри репо отдельно, как вы могут проверять и работать с отдельными папками в SVN. Поэтому, если у вас были все проекты в одном репо, вам придется клонировать их всех.
Обслуживание Git repos, используя smart-http, Git daemon и ssh довольно просто. Существует также Gitolite для управления несколькими репозиториями (включая авторизацию и аутентификацию). Прочтите связанную главу о ProGit при обслуживании Git repos- http://progit.org/book/ch4-2.html
Приступая к вашей группировке, вы можете поместить репозитории в папки в соответствии с вашей структурой группировки и использовать с помощью, например, метод smart http, в котором URL-адреса репо будут выглядеть так, как URL-адреса, которые вы использовали бы с SVN, будут все проекты похоже, находятся под группировкой и т.д.
Ответ 2
В дополнение к другим ответам вы также можете использовать GitSlave, чтобы связать несколько репозиторий git.
Ответ 3
У вас могут быть все проекты в одном репозитории, но это действительно плохая идея, потому что вам всегда нужно работать со всем репо.
Чтобы запустить сервер git, если вам нужен только один пользователь (вы), достаточно сервера с установленными git и ssh. См. Например в этой статье.