2014-09-09 3 views
0

Наше репо было перенесено из SVN. Из-за некоторой нестандартной операции на SVN, git-svn генерируются различные темы, такие как следующийGit объединяет две разные темы

C0 <- C1 <- C2 ... 
     C1' <- C2' ... 

где С0 и C1' являются все „начальные“ фиксаций, что означает, что все изменения „добавление файлов“.

Теперь то, что я собираюсь сделать это, присоединиться к С1' С0, чтобы гарантировать, что они разделяют тот же корень

C0 <- C1 <- C2 ... 
    |<- C1'' <- C2' ... 
C1' 

Здесь С1 „“ представляет собой обязательство, что это слияние С0 и С1' , но конечное состояние эквивалентно C1 '. Таким образом, более поздние узлы цепи могут оставаться неизменными.

Есть ли комбинации из git команд могут это сделать? не

ответ

2

См страницы помощи мерзавцу заменить и попробуйте выполнить следующую команду

мерзавца заменить --graft C0 C1'

для версий Git старше 2,1 использования

NEW_SHA=$(echo "Replacement commit" | git commit-tree -p CO C1'^{tree} -F -) 
git replace C1' $NEW_SHA 
+0

Ах, да, трюк замены хорош. – torek

+0

Можете ли вы объяснить немного больше? Как эта работа? –

+1

Он использует неясную особенность git, которая позволяет вам заменить один объект другим. В этом случае вы создадите новый объект с тем же деревом, но с разными родителями, а затем замените свой старый фиксатор на это. Страница справки для замены объясняется более подробно. –

1

Дословный ответ нет: проблема заключается в том, что совершить это контрольная сумма всех его содержание, включая его родительский ID (ы), так что если у вас есть C2', что указывает на C1' и вы делаете новая копия C1'', вы должны сделать новую копию C2'', чтобы указать на C1'' и так далее.

Тем не менее, очевидно, команда, чтобы сделать работу в git filter-branch: вы можете использовать фиксацию фильтра, чтобы скопировать C1' на новый коммит, который имеет C0 в качестве родителя, а затем пусть это изменение рябь через всю оставшуюся часть фиксации -граф. Однако, если вы собираетесь это сделать, может возникнуть смысл повторить импорт. (Я не эксперт по импорту SVN. Ранее я делал несколько CVS-to-git-импорт, и я сделал несколько тестовых импортных операций, а затем переработал их с лучшими параметрами и т. Д. Это было очень медленно, но все это было просто машинное время, в то время как я делал другие вещи.)

+0

Да, я сделал много попыток импорта svn, и выше, которое я считал лучшим, я c a get ... –

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