мерзавец слияния между различными хранилищами - PullRequest
1 голос
/ 16 декабря 2011

Я создал хранилище с помощью git-svn из большого хранилища svn (клон git svn).В моем git-репозитории есть несколько локальных коммитов, которые мне не нужно загружать в SVN, но мне нужно будет получать от них обновления.

Теперь я понял, что мне не нужна вся история SVN вмой локальный репозиторий, так как он использует слишком много места (несколько гигабайт) и что я должен был использовать опцию -r в команде clone, чтобы выбрать начальную точку.

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

Ситуация такова:

журнал старого хранилища:

  • локальный коммит 10
  • локальный коммит 9 ...
  • локальный коммит 1
  • svn revision X
  • svnrevision X-1 ...
  • svn revision 1

новый репозиторий имеет только одну фиксацию, соответствующую контексту ревизии X репозитория svn.

Я пытался использовать format-patch и применять команды, но я не уверен, как это сделать.

Есть ли способ сделать то, что мне нужно?

Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Вы можете начать с проверки ревизии X из репозитория SVN и избавления от всех папок, связанных с SVN. Тогда git init && git add . && git commit -m "Importing revision X from SVN". Теперь у вас есть Git-репозиторий со снимком версии SVN X.

После этого вы можете использовать git format-patch для создания патчей из вашего старого Git-репозитория. git format-patch x.. где x - это фиксация, эквивалентная ревизии X из SVN. Это сгенерирует патч-файлы. Выполните его в старом Git-хранилище.

Впоследствии в новом хранилище вы можете git am all_those_patches.* применить их в новом хранилище.

Cf. man git-am, man git-format-patch.

2 голосов
/ 16 декабря 2011

Один способ в вашем новом хранилище:

  • до git remote add old вашего старого хранилища;
  • до git fetch old;
  • , чтобы оформить веткув котором вы хотите;
  • , чтобы узнать начальную точку, с которой ваша ветвь была создана до внесения изменений;
  • , а затем используйте git rebase --onto.

Когда закончите, git remote rm старое репо и git gc.

См. git help rebase для опции --onto: это очень, очень полезно.

...