SVN diff в 2 разных репозиториях - PullRequest
21 голосов
/ 03 августа 2009

У меня есть 2 хранилища. Поскольку транковый код находился в одном репозитории, который был защищен, я сделал проверку, а затем зарегистрировался в другом репозитории (поскольку пользователи не имели разрешения на первый защищенный).

Теперь проблема в том, что оба хранилища были обработаны, и мы хотим, наконец, объединить код / ​​ветвь второго незащищенного с защищенным. Но в них будут конфликты.

Есть ли способ узнать diff для 2 веток хранилища? Кроме того, если есть изменения пробелов, как мне их игнорировать?

Ответы [ 9 ]

29 голосов
/ 08 мая 2012
svn diff --old=URL1@rev1 --new=URL2@rev2

Пример:

svn diff --old=http://svn.whatever.com/trunk/myfile.txt@1234 --new=http://svn.whatever.com/branch/myfile.txt@5678

Это позволяет вам указать как ветви, так и номера ревизий для обоих файлов. Я знаю, что это работает, потому что я только что выполнил.

25 голосов
/ 03 августа 2009

Я не знаю встроенной функции subversion, которая позволила бы это, но вы могли бы создать полную проверку обоих хранилищ и использовать утилиту diff командной строки для сравнения обеих рабочих копий:

diff -w -u -r -N WorkingCopy1 WorkingCopy2

-w, чтобы игнорировать все пробелы -u для использования унифицированного формата diff (например, subversion) -r для рекурсивного -N, чтобы новые файлы появлялись в патче

Это, конечно, не самый быстрый подход, но он может быть приемлем для одноразового процесса. Вы также можете создать патч, перенаправив вывод в файл diff -w -u -r -N WorkingCopy1 WorkingCopy2 > wc1-to-wc2.patch

Если вы работаете в Windows, сборки win32 diff и patch можно найти здесь: http://gnuwin32.sourceforge.net/packages/diffutils.htm

5 голосов
/ 03 августа 2009

Лучшим инструментом для этого слияния может быть git-svn. Если URL-адрес двух репозиториев - $ URL1 и $ URL2, попробуйте:

$ git svn clone $URL1 svn1
$ git svn clone $URL2 svn2
$ cd svn1
$ git fetch ../svn2
$ git diff FETCH_HEAD master

Чтобы игнорировать изменения пробелов, используйте git diff -w

3 голосов
/ 03 августа 2009

Вы можете использовать такой инструмент, как kdiff3, чтобы просто сравнить извлеченные рабочие копии из обоих хранилищ (Просто укажите его на два каталога, и он рекурсивно сравнит все файлы в них.)

1 голос
/ 17 апреля 2015

Если вы работаете в Linux, вы также можете использовать инструмент "meld" ... Он делает отличные различия, и вы можете легко сделать слияние ...

1 голос
/ 03 сентября 2010

Следующее работает, но медленно:

svn diff [url1] [url2]
1 голос
/ 03 августа 2009

Скопируйте второй репозиторий в первый, используя что-то из следующего в рабочей копии первого репозитория:

svn cp svn://url/to/the/second/repo branches/second_repo

Регистрируйся и делай регулярное слияние из новой ветки в свой ствол.

В этом объяснении предполагается, что вы используете наиболее распространенный макет хранилища svn (ветки /, теги / и / trunk в качестве каталогов верхнего уровня), поэтому может потребоваться адаптировать команду копирования.

Также обратите внимание, что некоторые графические интерфейсы для SVN также поддерживают этот режим копирования. В SmartSVN команда называется «Копировать с URL».

1 голос
/ 03 августа 2009

Вероятно, самая простая вещь - проверить обе ветви и использовать инструмент, подобный winmerge (который позволит вам игнорировать пробелы и выполнять многократное сравнение)

0 голосов
/ 20 июня 2018

Каждый раз, когда я попадаю в эту ситуацию, я использую Meld . Это мультиплатформенный инструмент для сравнения GUI. он может сравнить файл с файлом или каталог с каталогом. В вашем случае вы можете оформить оба проекта в отдельные каталоги и использовать их для сравнения. Вы можете очень легко перемещать изменения (линии или блоки) из одного файла в другой.

diff тоже хорошо!

...