2009-08-03 15 views
18

Mam 2 repozytoria. Ponieważ kod trunkingowy znajdował się w jednym repozytorium, które było chronione, zrobiłem kasę, a następnie zalogowałem się do drugiego repozytorium (ponieważ użytkownicy nie mieli uprawnień do pierwszego chronionego).SVN diff w 2 różnych repozytoriach

Problem polega na tym, że oba repozytoriom zostały opracowane i chcemy ostatecznie połączyć kod/gałąź w drugim niezabezpieczonym z chronionym. Ale będą w tym konflikty.

Czy istnieje sposób, aby dowiedzieć się diff dla 2 gałęzi repozytorium? Ponadto, jeśli istnieją białe znaki, jak je zignorować?

Odpowiedz

23

Nie znam wbudowanej funkcji subversion, która by to umożliwiła, ale można utworzyć kompletny checkout obu repozytoriów i użyć narzędzia diff z wiersza poleceń do porównania obu kopii roboczych:

diff -w -u -r -N WorkingCopy1 WorkingCopy2

-w do zignorowania re wszystkie białe znaki -u używać standardowym formacie diff (jak Subversion) -r dla rekurencyjnego -N pozwolić nowe pliki pojawią się w patchu

To na pewno nie jest najszybszy podejście, ale może być do zaakceptowania dla procesu jednorazowej . Można również stworzyć łatkę poprzez przekierowanie wyjścia do pliku diff -w -u -r -N WorkingCopy1 WorkingCopy2 > wc1-to-wc2.patch

Jeśli używasz systemu Windows, win32 kompilacje diff i patch można znaleźć tutaj: http://gnuwin32.sourceforge.net/packages/diffutils.htm

+0

Podoba mi się ten pomysł. Jeśli ilość spodziewanych konfliktów w plikach jest niewielka, możesz również wykonać polecenie rsync -av --ignore = '. Svn' w obu kierunkach (najpierw z opcją -n, suchym uruchomieniem, a następnie bez) – bobah

+1

zasugeruj add --exclude = " .svn " ... lub .git .hg ... itd. np .: diff -w -u -r -N --exclude =" .vv "WorkingCopy1 WorkingCopy2 – ideasman42

+0

jeśli chcesz się naprawdę przykre: diff - w -u -r -N -x '* .pyc' --exlude = ".vv" WorkingCopy1 WorkingCopy2 | vim - –

3

Można użyć narzędzia takiego jak kdiff3, aby po prostu porównać sprawdzone kopie robocze z obu repozytoriów. (Po prostu wskaż oba katalogi, a następnie rekursywnie porówna wszystkie pliki w nich.)

1

Najprawdopodobniej najprościej jest sprawdzić obydwie gałęzie i użyć narzędzia takiego jak winmerge (co pozwoli ci zignorować spacje i zrobić a multi porównaj)

+0

korzyści stosując narzędzia takie jak WinMerge lub kdiff3 są stronie- porównanie bezpośrednie i interaktywne przeglądanie (a także łączenie, jeśli masz taką potrzebę). – apollodude217

1

Skopiuj drugiego do pierwszego repozytorium używając coś dalej w kopii roboczej pierwszego repozytorium:

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

Sprawdź i wykonaj regularne połączenie z nowej gałęzi do bagażnika.

To wyjaśnienie zakłada, że ​​używasz najczęściej używanego układu repozytorium svn (branch /, tags/i/trunk jako katalogów najwyższego poziomu), więc może być konieczne dostosowanie polecenia kopiowania.

Należy również pamiętać, że niektóre GUI dla SVN obsługują również ten tryb kopiowania. W SmartSVN polecenie nazywa się "Kopiuj z adresu URL".

5

Najlepszym narzędziem do wykonania tej operacji może być git-svn.Jeśli adres URL z dwóch repozytoria są $ i $ URL2 URL1, a następnie spróbuj:

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

Aby zignorować zmiany białych znaków, należy użyć diff git -w

1

następujące prace ale to powoli:

svn diff [URL] [URL]

27
svn diff [email protected] [email protected] 

przykład:

svn diff --old=http://svn.whatever.com/trunk/[email protected] --new=http://svn.whatever.com/branch/[email protected] 

Pozwala to określić zarówno gałęzie, jak i numery wersji dla obu plików. Wiem, że to działa, bo właśnie to zrobiłem.

+3

To jest poprawna odpowiedź. –

+0

+1 Sortowane; okrzyki i wszystko z linii poleceń bez potrzeby żadnych dodatków. – Rob

+0

Trwa 'svn: Przepraszam, svn_client_diff4 został wywołany w sposób, który nie jest jeszcze wspierany? Any master pomocy? –

0

Jeśli jesteś na Linuksie można też użyć „meldunku” narzędzie ... To sprawia, że ​​wielkie diff, i można łatwo zrobić seryjnej ...

Powiązane problemy