Git несколько подпроектов из подпапок?
У меня есть несколько проектов, которые я хотел бы поставить на GitHub.com. Все эти проекты находятся в моем локальном репозитории Git. У меня есть только один репозиторий, но для каждого проекта я хотел бы иметь 1 проект GitHub. Таким образом, проект может быть организован.
Как я могу настроить это, чтобы управлять этим не так сложно? Нужно ли обновлять макет репозитория и создавать новые хранилища Git локально для каждого проекта? Это было бы действительно занято, и я мог бы потерять историю Git.
Вальтер
Ответы
Ответ 1
В зависимости от того, как организовано ваше репо, вы можете использовать git filter-branch
для создания нового репо для каждого проекта, сохраняя историю только для каждого отдельного проекта.
Предполагая, что ваша текущая структура репо выглядит следующим образом:
repo/
project1/
project1-file
project2/
project2-file
project3/
project3-file
Вы можете сначала клонировать свое репо (git filter-branch
будет удалять файлы и их историю, поэтому сначала клонирование вашего первоначального репо). Затем в вашем клонированном репо вы можете использовать git filter-branch
для создания нового репо (со всей старой историей) в корне project1
:
$ git filter-branch --subdirectory-filter project1 HEAD
Теперь ваше репо будет выглядеть следующим образом:
repo/
project1-file
И он по-прежнему будет содержать историю для всех файлов, хранящихся в project1/
в старом репо.
Повторите этот шаг для каждого проекта, и теперь у вас будет три независимых репозитория со всей историей для соответствующих проектов.
Ответ 2
Если я понимаю вопрос, у вас есть одно большое репо, которое содержит ряд проектов. Вы хотели бы разбить каждый из этих проектов на отдельные репозитории без потери истории. В нижней строке да, вам нужно переделать макет репозитория и создать новые хранилища git для каждого проекта. Однако вам не нужно терять историю.
- Сделайте копию своего текущего репо, по одному экземпляру для каждого субпроекта.
- В каждом новом репозитории удалите все другие проекты, кроме тех, которые связаны с этим репо.
У вас все еще будет вся история до разрыва исходного репо, но теперь каждый проект - это собственный репозиторий.
Если вы не возражаете потерять свою историю, делая каждый проект в своем собственном git, репо так же просто, как запуск git init
в каталоге проекта. Это создаст новое репо только для этого проекта.