Разделить git на отдельную репо
У меня есть следующее дерево git:
branch v2 => / --- [lots of work] --- [new version] --- ref_d
/
root --- ref_a --- ... --- ref_b (project reset)
\
branch v1 => \ --- [some works] --- ref_c
Поскольку v1 и v2 действительно разные, две разные команды будут поддерживать v1 и v2, я хотел бы, чтобы две отдельные ветки два в разных хранилищах git:
repo_v1 : from root to ref_c
repo_v2 : from ref_b to ref_d
Как мне это сделать?
Спасибо.
Ответы
Ответ 1
Далее предполагается, что у вас есть два разных новых репозитория, настроенных как пульт дистанционного управления с именем repo_v1
и repo_v2
.
Ветвь v1 проста:
git push repo_v1 ref_c:v1
В ветке v2 не так сложно:
git checkout --orphan v2 ref_b
git cherry-pick ref_b..ref_d
git push repo_v2 v2
(git checkout --orphan <branchname> <startpoint>
создает совершенно новую историю, которая начинается с указанной точки, но не имеет ни одного из этих родителей фиксации.)
Ответ 2
В соответствии с настройками проекта, я бы предпочел
1) создать новый репо для v1
git checkout v1
git remote add v1_repo [email protected]:andrej/project-v1.git
git push v1_repo v1:master
2a) объединить v2
с веткой master
.
git checkout master
git merge v2
2b) если вы настаиваете на создании 2 новых проектов, вы можете создать новый проект из только что слитого мастера:
git remote add v2_repo [email protected]:andrej/project-v2.git
git push v2_repo master
3) Вы можете привести в порядок исходное репо, удалив ветки v1 и v2:
git checkout master
git branch -D v1
git branch -d v2
Здесь вы должны использовать -D
для принудительного удаления ветки v1
, потому что ветка v1
не была объединена.