Разделить 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 не была объединена.