Есть ли способ получить патч, созданный с помощью git format-patch, чтобы он был совместим с svn, чтобы я мог отправить его в репозиторий svn?
Я работаю над репозиторием svn на github и хочу отправить свои изменения обратно в основное репо. Для этого мне нужно создать патч, однако патч нельзя применить, так как git форматирует патч иначе, чем svn. Есть какой-то секрет, который я еще не открыл?
ОБНОВЛЕНИЕ: хотя в настоящее время не существует сценария или собственного способа git для этого, мне все же удалось найти сообщение от ранее в этом году о том, как это сделать вручную. Я выполнил инструкции и мне удалось заставить мои патчи git работать с svn.
Если бы кто-то мог попытаться написать сценарий для достижения этой цели и внести свой вклад в проект git, я был бы очень признателен.
http://kerneltrap.org/mailarchive/git/2008/1/15/570308/thread#mid-570308
источник
Ответы:
Мне всегда приходится гуглить, но, как я обнаружил, отлично работает (для меня):
git diff --no-prefix master..branch > somefile.diff
, основная часть и часть ветки не являются обязательными, зависит от того, как вы хотите получить свои различия.patch -p0 < somefile.diff
.Мне кажется, что это всегда хорошо работает и кажется самым простым методом, который я встречал.
источник
--no-pager
больше не вариант дляgit diff
.--no-pager
, я не уверен, почему он был добавлен в редактирование. У меня это всегда нормально работало и без этого--no-pager
.git diff --no-prefix 056a1ba5140 7d939289b80 >my.patch
у меня сработало (где056a1ba5140
и7d939289b80
- это sha-1 предыдущей и конкретной фиксации в git).Короткий ответ
patch -p1 -i {patch.file}
.За подробностями обращайтесь к этому блогу: Создание патчей Subversion с помощью git .
источник
Вот вспомогательный сценарий для создания сравнения с последним набором изменений svn и заданным коммитом: http://www.mail-archive.com/dev@trafficserver.apache.org/msg00864.html
источник
git svn info
вместо этого:REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'`
SVN, вероятно, не может понять вывод
git diff -p
, но вы можете прибегнуть к грубой силе:diff -r
два клона.источник
git diff --no-prefix > somefile.diff
в своем репозитории git и отправьте его любому пользователю svn, чтобы они применили патчpatch -p0 < somefile.diff
в корне проекта.Subversion <1.6 не поддерживает патчи. Похоже, что Subversion 1.7 позволит применять патчи, а расширения git / hg для унифицированного сравнения находятся в нашем списке TODO.
источник
Это действительно запрос функции начале 2008 г.
Линус Торвальдс сказал тогда:
Может быть поэтому
был представлен в Git1.5.6 в мае / июле 2008 г. (хотя я его не тестировал)
источник
Убедитесь, что ваши изменения зафиксированы и переустановлены поверх вашей локальной ветки git, из git bash run:
git show --pretty >> myChangesFile.patch
источник
Принятый ответ, предоставленный Николасом, работает нормально, за исключением случаев, когда а) двоичные файлы существуют в diff или б) вы работаете в Windows Git и имеете каталоги с пробелами. Чтобы решить эту проблему, мне пришлось добавить вложенную команду git diff, чтобы игнорировать двоичные файлы, и команду sed, чтобы избежать пробелов. Это немного громоздко писать, поэтому я создал псевдоним:
Если вы затем наберете:
... будет создан файл патча Feature123.patch с учетом различий между базой слияния мастера ветки и Feature123.
источник