Различия SVN в 2 разных репозиториях

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

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

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


person gagneet    schedule 03.08.2009    source источник


Ответы (9)


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

diff -w -u -r -N WorkingCopy1 WorkingCopy2

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

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

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

person Cygon    schedule 03.08.2009
comment
Мне нравится идея. Если количество ожидаемых внутрифайловых конфликтов невелико, вы также можете выполнить rsync -av --ignore = '. Svn' в обоих направлениях (сначала с -n, флагом пробного запуска, а затем без) - person bobah; 13.10.2010
comment
предлагаем добавить --exclude = .svn ... или .git .hg ... и т. д., например: diff -w -u -r -N --exclude = .svn WorkingCopy1 WorkingCopy2 - person ideasman42; 23.05.2012
comment
если вы хотите по-настоящему чокнуть: diff -w -u -r -N -x '* .pyc' --exlude = .svn WorkingCopy1 WorkingCopy2 | vim - - person Alex Waters; 30.01.2013

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

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

person Lyle Ziegelmiller    schedule 08.05.2012
comment
+1 Сортировано; ура, и все из командной строки без каких-либо дополнительных услуг. - person Rob; 07.11.2012
comment
получаете svn: Sorry, svn_client_diff4 was called in a way that is not yet supported помощь мастера? - person Deepak Ingole; 17.04.2014
comment
Я получил svn: E170000: 'URL1' isn't in the same repository as 'URL2' (где URL1 и URL2 - URL-адреса моих репозиториев). У меня SVN версии 1.9.3 (r1718519) - person Alix; 03.01.2017

Лучшим инструментом для этого слияния может быть 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

person William Pursell    schedule 03.08.2009

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

person Amber    schedule 03.08.2009

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

person Sam Saffron    schedule 03.08.2009
comment
Преимущества использования такого инструмента, как winmerge или kdiff3, заключаются в параллельном сравнении и интерактивном просмотре (а также слиянии, если у вас есть необходимость). - person jyoungdev; 14.02.2013

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

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

Зарегистрируйтесь и выполните регулярное слияние из новой ветки в свою ствол.

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

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

person sebasgo    schedule 03.08.2009

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

person Aleksander Rozman    schedule 17.04.2015

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

svn diff [url1] [url2]
person Jonathan    schedule 03.09.2010

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

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

person Gapster    schedule 20.06.2018