2010-03-19 5 views
5

Я нахожусь в положении, когда я единственный, кто использует git, все остальные используют svn. Я использовал «git svn» для подключения к команде svn, и в основном он работает отлично. В последнее время я начал проект сначала самостоятельно, отдельный git-репо, и теперь мне нужно слить материал с него на svn. Тем не менее, я все равно хотел бы улучшить настройку в своей конфиденциальности между релизами.Черри-выбор из git в svn (или, как сохранить историю проекта в git и выпусках в svn)

Итак, что было бы самым простым способом для вишни - выбрать некоторые коммиты из моего частного репо в svn-клонированное репо? Требование состоит в том, чтобы сохранить полную локальную историю и иметь только одну транзакцию svn для каждого выбора. Или есть какое-то раздавливание?

Как метод достижения этого, есть ли способ получить частное репо в качестве другого источника для svn-клонированного репо?

ответ

2

Вы можете попробовать выполнить git graft фиксацию из вашего репозитория Git до совершения репозитория git-svn до git dcommit git svn repo.

Конец от вашего репо может быть изолирован в специальной ветке, когда all kind of squashing может иметь место, чтобы экспортировать более чистую историю.

1

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

Для более подробного решения рассмотрите возможность использования git commit-tree непосредственно - укажите его деревом, которое вы хотите зафиксировать (найдено путем запуска git show --format=raw HEAD и просмотра второй строки («дерева»)), правильного родительского фиксации (независимо от того, что в настоящее время находится в подрывной деятельности) и правильное сообщение журнала на stdin. Это прямое использование сантехники, вы, вероятно, захотите написать сценарий, чтобы сделать это для вас ... Эффект заключается в том, что вы создали новую фиксацию, содержащую содержимое файла существующей фиксации (сравните с вишневым подборкой, который принимает diff, добавленный существующим фиксацией, а не копированием дерева).

+0

Да, сейчас я единственный пользователь git. Может ли перераспределение подразумевать, что вся будущая работа будет выполнена в клонированном svn? Клонированное svn-репо ничего, кроме пустого ... Хотя, это ничего не может изменить. Итак, я бы мог перефразировать, что мой проект на самом деле является подпроектом, который будет объединен с одной соединительной линией, содержащей несколько связанных проектов в своих собственных каталогах. – Jawa

+0

Нет причин делать работу в репо, которая была непосредственно клонирована из подрывной деятельности, но вы хотите работать с ветвями, которые имеют клон subversion в качестве родителя. Вы могли бы добиться этого, перетащив дочерние ветки обратно в ваш рабочий репозиторий и используя 'git branch -f', чтобы настроить текущие рабочие ветви на ваши восстановленные ссылки. –