Выбор вишни из git в svn (или Как сохранить историю проекта в git и выпуски в svn) - PullRequest
5 голосов
/ 19 марта 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

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

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

1 голос
/ 19 марта 2010

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

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

...