2014-01-02 3 views
4

Я являюсь одним из действующих разработчиков проекта FreeGLUT на sourceforge. Этот код хранится в SVN-репо, но для стимулирования вклада других я хочу сделать репозиторий git. У меня уже есть git-svn клон svn trunk up на github в настоящее время на github (сделано через SmartGit, что на самом деле несовместимо с git-svn на самом деле).replay git фиксируется на репо с другим корнем

Я сделал это путем клонирования https://svn.code.sf.net/p/freeglut/code/trunk/freeglut. Тем не менее, теперь я обнаружил, что должен был клонировать https://svn.code.sf.net/p/freeglut/code и иметь мост svn SmartGit, чтобы определить ветви и багажник.

Я сделал этот новый правильный клон локально. Теперь проблема: у меня уже есть несколько коммитов в моей локальной репликации git старого/неправильного клона. Я хотел бы перенести их на новое репо, но поскольку корневые каталоги на диске не совпадают, простая стратегия перерасчета, описанная в here, не будет работать (я думаю).

Я мог бы сделать это с исправлениями, так как git apply имеет аргумент --directory, чтобы префикс пути в файлах патча, которые могли бы заставить все работать, но тогда мне пришлось бы совершить фиксацию с помощью commit. По крайней мере, я не нашел способ поместить несколько коммитов в один файл патча (без раздавливания) и воспроизвести их все поверх моего HEAD.

Как лучше всего решить мою проблему?

+1

Возможный дубликат [Применение коммитов из одного поддерева в другое в том же репо] (http://stackoverflow.com/questions/19326233/applying-commits-from-one-subtree-to-another-in-same-repo) – jthill

+0

@jthill, вы правы, это похоже на дубликат. Я не рассматривал эти поисковые термины ... –

+0

Почему бы и нет, это не о SAME REPO, а о другом. – Andy

ответ

5

Хорошо, получается, что:

  1. git format-patch может создать файл, содержащий диапазон коммитов, такие как вся отрасль.
  2. git am с опцией --directory может воспроизводить коммиты, содержащиеся в файле исправлений, по одному (see here) и передать их мне.

Проблема решена!

+0

хороший ответ. Я не думаю, что этот вопрос таким образом. – johnMa

0

Да, вы могли бы сделать это с помощью патчей.

  1. Сбросить последнее совершение с помощью git reset --soft 'HEAD^'. или если у вас есть 3 фиксации. просто сделайте git reset --soft HEAD~3
  2. Сделайте патчи.

Я думаю, this answer объясните это хорошо.

+0

спасибо за помощь! Тем не менее, я не понимаю, почему я хотел бы сбросить голову, а затем сделать патчи, у меня есть чистая голова и только патчи для применения. –

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