2013-02-27 2 views
2

Настройка для этого вопроса требует некоторой осторожной формулировки.Как пересадить удаленную ветку?

Начать с простейшего возможного репозитория: одна фиксация (которая может быть пустой, если хотите).

От этого оригинального репо-одного совершения совершите два отдельных клона, в /path/to/repo1 и /path/to/repo2, соответственно. Теперь представьте, что каждый из этих двух клонов, независимо от другого, развивается как простая линейная история.

Если A является единственной фиксации в исходном хранилище на момент клонирования repo1 и repo2, ситуация может выглядеть примерно так:

repo1: 

A-----B-----C-----D-----E-----F-----G-----H-----I-----J-----K-----L 


repo2: 

A-----M-----N-----O-----P-----R-----S-----T-----U-----V 

Теперь я хочу, чтобы объединить оба клона так, чтобы образовавшееся совершить график выглядит следующим образом:

,--B-----C-----D-----E-----F-----G-----H-----I-----J-----K-----L 
/
A 
    \ 
    `--M-----N-----O-----P-----R-----S-----T-----U-----V 

Я пробовал много галсами, но я никогда не получить график, как один из приведенных выше ...

+0

Напишите, что вы пробовали. Вы пытались https://metacpan.org/module/git-stitch-repo? – gpoo

ответ

0

Выглядит не так сложно.

Сначала должны быть две ветви, если вы хотите объединить их в одно репо.

И просто нажать clone1 в пульте называется, branch1

и нажмите clone2 в пульте под названием, branch2

Позже, вернуться к любому репозиторию и получать последнюю версию кода.

Br, Tim

3

Это работает для меня без каких-либо хаков:

git clone -o repo1 path/to/repo1 target 
cd target 
git remote add repo2 path/to/repo2 
git fetch repo2 
git branch master2 repo2/master 

На данный момент, вы будете иметь 2 местных отделений: master отслеживания repo1/master и master2 отслеживания repo2/master.

Если вас git log master, он будет выглядеть L, K, J, ..., C, B, A.

Если вас git log master2, он будет выглядеть V, U, T, ..., N, M, A.

+0

Зачем эти ветки разделяют историю после ваших команд? – Chronial

+0

Ну, потому что это то, как работает git? Если вы мне не доверяете, попробуйте - я. – mvp

+0

Нет, это не то, как работает git - вам просто придется иметь ветви, которые не касаются друг друга вообще. Если вы запустили приведенные вами команды с двумя репозиториями, которые не являются вилками друг друга, запустите это: 'git merge-base master master2'. Это приведет к выводу первого фиксации обеих ветвей, что в данном случае будет ничем. – Chronial

Смежные вопросы