Как применить SVN diff к Git? - PullRequest
48 голосов
/ 18 марта 2009

У меня есть проекты в 2 репозиториях. Один под SVN и один под Git. Всякий раз, когда я что-то изменяю в SVN, я хочу делать то же самое с репозиторием Git.

Скажем, я внес изменения в репозиторий SVN, выпуская ревизию 125. Как бы я применил эти же изменения к своему репозиторию Git (при условии, что мой репозиторий Git обновлен до ревизии 124).

Спасибо.

Ответы [ 6 ]

49 голосов
/ 18 марта 2009

То, что я действительно делал / искал, было:

cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff
18 голосов
/ 18 марта 2009

Попробуйте:

svn diff | patch -d /path/to/git/repo -p0

См. svn help diff, если вы хотите экспортировать разницу в конкретной ревизии.

5 голосов
/ 29 июля 2016

Если вы собираетесь сгенерировать патч в SVN и позже применить его с Git, не забудьте использовать --git параметр командной строки :

--git

Включает специальный режим вывода для svn diff, разработанный для перекрестной совместимости с популярным распределенным контролем версий Git. система.

Например, запустить

svn diff --git -r 125 > /tmp/patch.diff

5 голосов
/ 16 марта 2011

Почему никто не любит git-svn? Я не могу предположить, что никто не знает об этом.

Есть git-svn (и git-hg, и git-cvs, и git-bzr afaict). По крайней мере, с git-svn вы можете просто сделать

git svn clone --stdlayout http://myrepo/root here

Использование -s (--stdlayout) предполагает стандартную ствол / ветви / теги / макет, но вы можете использовать его любым способом (man git-svn).

Отображение является двунаправленным, поэтому вы можете нажимать и извлекать, как с обычным (git) пультом. Никаких вопросов.

2 голосов
/ 21 марта 2009

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

0 голосов
/ 29 июля 2016

у меня сработало ниже.

Источник: Как создать и применить патч с Git

Сначала посмотрите, какие изменения есть в патче . Вы можете сделать это легко с помощью git apply

git apply --stat fix_empty_poster.patch

Обратите внимание, что эта команда НЕ применяет исправление, а показывает только статистику о том, что он будет делать. Заглянув в файл патча с помощью вашего любимого редактора, вы увидите, что это за изменения.

Далее вас интересует, насколько неприятным будет патч . Git позволяет вам протестировать патч перед тем, как вы на самом деле его примените.

git apply --check fix_empty_poster.patch

Если вы не получили никаких ошибок, патч можно применить аккуратно ?. В противном случае вы можете увидеть, с какими проблемами вы столкнетесь.

Чтобы применить патч, я буду использовать git am вместо git apply. Причина в том, что git am позволяет вам подписать примененный патч. Это может быть полезно для дальнейшего использования.

git am --signoff < fix_empty_poster.patch

Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output

Хорошо, патчи были применены корректно, и ваша основная ветка была обновлена. Конечно, запустите ваши тесты снова, чтобы убедиться, что ничего не сломалось.

В вашем git-журнале вы обнаружите, что сообщения о фиксации содержат тег «Подписано». Этот тег будет прочитан Github и другими, чтобы предоставить полезную информацию о том, как коммит оказался в коде.

...