SVN: создать diff для большого количества ревизий - PullRequest
34 голосов
/ 13 октября 2009

У меня был частный филиал, к которому я сделал кучу коммитов, затем я слил его в транк и сделал несколько небольших настроек там.

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

Как я могу создать это? Если вам нужны цифры для ваших примеров, предположим, что

224446

была моей основной ревизией, где я слился в багажник,

224453 и 224462

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

Решение (через Мартина)

svn diff -r 224452:224453 > ~/tmp/diff.1
svn diff -r 224462:224463 > ~/tmp/diff.2
svn up -r224446
patch < ~/tmp/diff.1 -p0
patch < ~/tmp/diff.2 -p0
svn diff -r 224445 > ~/tmp/changes.patch

Затем отправьте ~ / tmp / changes.patch нашему ответственному за ствол для отправки на хранение.

Ответы [ 2 ]

31 голосов
/ 13 октября 2009

Одна из возможных процедур заключается в следующем:

  1. создание различий для 224453 и 224462 (например, svn diff -r 224452:224453 > diff1.patch).
  2. проверить 224446 (svn up -r224446)
  3. применить различия (например, patch -p0 -i diff1.patch)
  4. создать разность с 224445 (svn diff -r 224445 > diff2.patch)
7 голосов
/ 13 октября 2009

Один из вариантов - создать ветку в 224446, затем объединить 224453 и 224462. Затем сделать различие между этим и 224445 в стволе. Это должны быть все изменения в одном, и вы можете создать его как файл исправления, если вам нужно:

# Branch from your initial checkin
svn cp svn://xyz/trunk@224446 svn://xyz/branches/foo

# Check it out
svn checkout svn://xyz/branches/foo tmp

# Merge in the two changes
svn merge -c 224453,224462 svn://xyz/trunk tmp

# Commit the changes
svn commit tmp -m "Extra commits 224453 and 224462"

# Diff the branch from mainline before original
svn diff svn://xyz/trunk@224445 svn://xyz/branches/foo

Это во многом совпадает с ответом Мартина, только с различными способами применения изменений и получения различий. Обратите внимание, что хотя в этом случае я зафиксировал изменения, вам на самом деле не нужно - вы могли бы просто сделать svn diff svn://xyz/trunk@224445 tmp вместо двух последних команд. Хорошая вещь в том, что он есть в хранилище: любой может применить diff в обратном порядке, чтобы откатить его, если это потребуется.

...