SVN: Как создать diff ветки к транку для обзора кода? - PullRequest
3 голосов
/ 16 января 2012

У меня проблема слияния:

Я создал ветку, скопировав ствол, создав Rev 1000. Затем я добавил новый файл blah.txt в ветку. Теперь я хочу слить это (и другое) меняется обратно к моей кассе багажника:

cd ~/trunk-checkout
svn merge -r 1000:2000 $REPOS/branches/foo
A  blah.txt

Это создает мой новый файл blah.txt в стволе проверки. Но когда я говорят:

svn diff blah.txt

вывод пуст. Не должен ли вывод быть целым файлом, так как еще не существует в багажнике?

Как я могу получить svn-diff в багажник, который будет содержать весь новый файл blah.txt?

Даже когда я говорю это (в каталоге, где находится новый файл blah.txt):

svn diff -r HEAD  $REPOS/trunk/foo

пусто.

Исходная информация моего вопроса такова: мне нужно отправить diff моего кода (который находится на ветке) в транк для проверки кода (см. здесь ). Разница должна выглядеть следующим образом:

$ svn diff blah.txt
Index: blah.txt
===================================================================
--- blah.txt    (revision 0)
+++ blah.txt    (revision 0)
@@ -0,0 +1 @@
+hello world

1 Ответ

2 голосов
/ 18 января 2012

Если вы скопировали ветвь из ствола с помощью svn cp, вы должны реинтегрировать его обратно с помощью svn merge --reintegrate.Вы объединяетесь без --reintegrate и с определенным диапазоном ревизий -r ... (почему?).

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

svn cp ^/trunk/ ^/branch/foo

#In the foo branch working copy:
foo $ work, work, work...

#In the working copy of trunk:
trunk $ svn merge --reintegrate ^/branch/foo

Затем выполнение svn diff покажет вам все изменения, которые вы сделали в ветке:

trunk $ svn diff
... all the changes that were done in foo ...

Есть еще один способ решить вашу проблему.Чтобы получить различия всех (или части) изменений, которые были сделаны в конкретной ветке, вам не нужно объединять.Использование svn diff достаточно:

Определите, какие изменения вы хотите видеть в diff.Используйте svn log, чтобы проверить, ОТ КОТОРОГО и какой ревизии была выполнена работа:

svn log -v |less

Если вы хотите определить, в какой ревизии вы создали ветку, выполните:

svn log -v --stop-on-copy | less

Последняя запись в журнале будет первой ревизией ветви.

Теперь выполните svn diff с -r (диапазон):

svn diff -r FROM-1:TO .

Вы можете использовать ключевое слово HEAD вместономер ревизии, чтобы указать последнюю зафиксированную ревизию в ветке.

Таким образом, чтобы получить различие всей работы вашей ветки, вам нужно будет выполнить:

svn diff -r FIRST_BRANCH_REV:HEAD

где FIRST_BRANCH_REV является первымревизия ветки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...